如何在Java AWS开发工具包中使用临时AWS键而不是环境变量?

时间:2018-09-11 11:29:08

标签: java amazon-web-services amazon-s3

我正在使用saml2aws为我的客户生成临时AWS密钥。以前我使用环境变量:

aws_access_key_id=MY KEY
aws_secret_access_key=MY SECRET

在通过saml2aws进行身份验证之后,我的~/.aws/config文件看起来像这样(未更改)

[default]
output=json

我的~/.aws/credentials看起来像这样:

[default]
aws_access_key_id        = MY KEY ID
aws_secret_access_key    = MY KEY
aws_session_token        = MY SESSION TOKEN
aws_security_token       = MY TOKEN
x_principal_arn          = MY ARN
x_security_token_expires = TIME

当我使用aws s3 ls从cli尝试此操作时,它可以工作,但是当我尝试从Java SDK访问S3时:

AmazonS3Client(ProfileCredentialsProvider())
                .listObjects(ListObjectsRequest()
                        .withBucketName("some-bucket")
                        .withPrefix("some-prefix")
                        .withDelimiter("/")
                        .withMaxKeys(10000))

我得到:

  

com.amazonaws.AmazonClientException:无法将凭据加载到配置文件中。缺少个人资料名称或AWS Access Key ID或AWS Secret Access Key。

即使我明确尝试使用default个人资料:ProfileCredentialsProvider("default"),或者即使我根本没有设置任何提供程序,它也不起作用!

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

AmazonS3Client().listObjects(ListObjectsRequest()
                        .withBucketName("some-bucket")
                        .withPrefix("some-prefix")
                        .withDelimiter("/")
                        .withMaxKeys(10000))

就足够了,不需要显式给出ProfileCredentialsProvider()。 有关更多信息,请参见

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#AmazonS3Client--