如何使用cloudformation更改s3存储桶策略?

时间:2017-12-21 19:11:02

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

我希望能够使用cloudformation更改s3存储桶上的策略。但是,当我尝试这样做时,我遇到了错误:

2017-12-21 18:49:10 UTC   TestBucketpolicyAwsS3Bucketpolicy   CREATE_FAILED        API: s3:PutBucketPolicy Access Denied  

以下是由于此问题而失败的云信息模板示例:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "",
  "Resources": {
    "TestBucketpolicyAwsS3Bucketpolicy": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": "alex-test-bucket-123",
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": [
                  "*"
                ]
              },
              "Resource": "arn:aws:s3:::alex-test-bucket-123/*",
              "Action": [
                "s3:GetObject*",
                "s3:DeleteObject*",
                "s3:PutObject*"
              ]
            }
          ]
        }
      }
    }
  }
}

我已尝试更改IAM用户和我想要使用cloudformation管理的实际存储桶的策略,但这两种解决方案都没有解决问题。如何删除此"s3:PutBucketPolicy"限制?

编辑:我认为问题可能是只有IAM角色可以访问"s3:PutBucketPolicy"操作。我可能需要创建一个具有s3访问权限的角色,然后与运行此云信息模板的用户建立信任关系。

https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html

1 个答案:

答案 0 :(得分:1)

IAM用户无法直接运行s3:PutBucketPolicy次操作。您需要创建一个单独的IAM角色,并使用trust relationship to assume that IAM role将其附加到您的用户。

您的角色需要s3和cloudformation访问权限。以下政策文件将有效。

{
    "Version": "2012-10-17",
    "Statement": {
        "Action": [
            "s3:*",
            "cloudformation:*"
        ],
        "Resource": "*",
        "Effect": "Allow"
    }
}

然后需要在您的配置或AWS_STS_ROLE_ARN环境变量中设置您的IAM角色的arn以及您的aws访问密钥。

一旦您担任该角色,您就可以更改s3存储桶策略。

请注意,这将覆盖用户在配置或环境变量中设置AWS_STS_ROLE_ARN时拥有的任何权限。