使用AWS短期凭证(AWS STS)将文件上载到S3时设置ACL

时间:2017-11-15 10:32:32

标签: java amazon-web-services amazon-s3 aws-sdk aws-sts

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

0 个答案:

没有答案