我正在使用 AWS STS 联合令牌来获取临时凭证,并带有以下语句。
Statement putStatement = new Statement(Statement.Effect.Allow)
.withId("TempCreds")
.withActions(S3Actions.PutObject)
.withResources(new S3ObjectResource(bucketName, "*"));
现在我可以获得临时凭据,但是当我使用以下方式上传文件时PutObjectRequest
:
s3Client.putObject(new PutObjectRequest(bucketName, keyName, file));
但这是默认的PRIVATE ACL。问题是如何设置PUBLIC ACL?
因为当我使用下面的代码时,
s3Client.putObject(new PutObjectRequest(bucketName, keyName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
上传失败。
如果在上述获取联合令牌的语句中,我添加如下 ACL
Statement putStatement = new Statement(Statement.Effect.Allow)
.withId("TempCreds")
.withActions(S3Actions.PutObject)
.withResources(new S3ObjectResource(bucketName, "*"))
.withConditions(S3ConditionFactory.newCannedACLCondition(CannedAccessControlList.PublicRead));
上传仍然失败。
那么在使用短期凭证时如何设置公共 ACL?
我已将以下策略提供给将生成 STS 的 IAM 用户。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1507714071000",
"Effect": "Allow",
"Action": [
"sts:GetFederationToken"
],
"Resource": [
"*"
]
}
]
}