当前位置: 首页 > 知识库问答 >
问题:

aws.accessKeyIdaws.secretKey不被读取

令狐献
2023-03-14

我有一个使用S3存储桶的Spring启动应用程序。根据亚马逊(https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html),订单应该是:

  1. 在系统环境变量中:AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。
  2. 在 Java 系统属性中:“aws.access 密钥 Id”和“aws.secret密钥”。
  3. 在默认凭据文件中(此文件的位置因平台而异)。
  4. 在实例配置文件凭证中,该凭证存在于与 EC2 实例的 IAM 角色关联的实例元数据中。

但是我的代码忽略了application.properties中的aws.accessKeyId和aws.secretKey。

public AmazonS3 getS3Client() {
    AWSCredentialsProviderChain instanceProvider = new AWSCredentialsProviderChain();
    AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard();
    builder.setCredentials(instanceProvider);
    builder.setRegion(region);
    return builder.build();
}

当我在EC2实例上使用它时,它可以工作,但是当我试图在本地使用它进行开发时,它就失败了。

更新:

也试过

        DefaultAWSCredentialsProviderChain instanceProvider = new DefaultAWSCredentialsProviderChain();
        System.out.println(instanceProvider.getCredentials().getAWSAccessKeyId());
        System.out.println(instanceProvider.getCredentials().getAWSSecretKey());
        return AmazonS3ClientBuilder.standard().withCredentials(instanceProvider).withRegion(region).build();

它也失败了。当我打印访问密钥时,它会显示正确的值和不同的秘密(我假设它是由于安全原因而加密的)。如果我使用Basic凭据,它就可以工作。

BasicAWSCredentials creds = new BasicAWSCredentials(keyName, secretKey);
        return AmazonS3ClientBuilder.standard().withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(creds)).disableChunkedEncoding().build();

共有1个答案

洪博艺
2023-03-14

我不确定您发布的代码在EC2上是如何工作的,因为AWSCredentialsProviderChain需要一个提供者列表。

相反,你想要的是默认AWS凭据提供者链。

但是,您不应该需要显式的凭据提供程序(这可能是它工作的原因),因为<code>AmazonS3ClientBuilder。standard()创建一个具有所有默认设置的构建器(包括默认提供程序链)。

如果更改类不能解决您的问题,那么您需要编辑您的问题,以显示(1)您正在使用的命令行(编辑键),以及(2)从终端复制的确切的错误消息。

 类似资料:
  • 重写httpd.conf中的模块如下: 通往成功之路。htaccess: 所以在。htacess我有这个: 我希望尝试: 而不是: 它应该可以工作,因为它在生产环境中工作,而不是在本地主机上,我有wamp服务器apache,下面是一些配置: 在C:\wamp\bin\apache\apache2.4.9\conf\httpd.conf中: 这是不正确的,因为Anu说,所以我改变了在C:\wamp\

  • 我在我的windows机器上设置了Elk堆栈,其中包含以下内容: Elasticserach Logstash Kibana 我的logstash.conf 我的日志文件。日志(Apache日志) 当我运行logstash时。conf它在elasticsearch中创建以下索引: 上面的索引为空,无法从我的日志文件中获取任何数据。请帮忙?我对麋鹿很陌生。 当我使用以下方法查询索引logstash-

  • 我想运行node。js作为子流程,并向其提供输入。使用C,下面是我的一些示例代码。 我遇到的问题是,尽管子进程的stdout仍然指向终端,但在向子进程stdin输入打印的“helloworld”行后,我什么也看不到。即使我对管道进行了fflush()操作,我也看不到任何输出。但是,如果关闭管道的输入,则“Hello World”将显示在终端上。 子流程似乎只是缓冲-为什么?我希望最终将子流程std

  • 问题内容: 我是Java的新手,所以如果这是一个很小的错误,请原谅我,这是 我的代码: 当我在编译后运行它时,第18行(n = System.in.read())被跳过。 我得到的输出是这样的: 对(1-5)投票: 1输入0退出,再次输入1投票: 对(1-5)投票: 2输入0退出,再次输入1投票: 对(1)投票-5): ^ C 的值not 会使程序成为无限循环。 谢谢您的帮助。 问题答案: 我认为

  • 我想编译我的程序,我在VS代码,但我不能,因为据称 javac不能被识别为内部或外部命令、可操作程序或批处理文件。 做了一些搜索,我觉得好像它应该工作: 通过所有必要的扩展,我设置了java。在VS代码中的用户设置中返回主页,以覆盖环境变量: “java.home”:“C:\\Program Files\\java\\jdk1.8.0_181\\bin” 这一个不起作用,但我也在没有“\\bin”