2

我正在使用 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": [
                "*"
            ]
        }
    ]
}
4

0 回答 0