我正在使用AWS STS Federation Token获取临时凭证,并使用以下声明。
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?
我已向IAM用户提供以下政策,该用户将生成STS。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1507714071000",
"Effect": "Allow",
"Action": [
"sts:GetFederationToken"
],
"Resource": [
"*"
]
}
]
}