5

以下是在 A 存储桶的 cfn 模板中设置存储桶策略的示例。

"mybucketpolicy" : {
   "Type" : "AWS::S3::BucketPolicy",
   "Properties" : {
      "PolicyDocument" : {
         "Id" : "MyPolicy",
         "Statement" : [ {
            "Sid" : "ReadAccess",
            "Action" : [ "s3:GetObject" ],
            "Effect" : "Allow",
            "Resource" : { "Fn::Join" : [
                  "", [ "arn:aws:s3:::", { "Ref" : "mybucket" } , "/*" ]
               ] },
            "Principal" : {
               "AWS" : { "Fn::GetAtt" : [ "mygroup", "Arn" ] }
            }
         } ]
      },
      "Bucket" : { "Ref" : "mybucket" }
      }
   }
}

如果我想将策略应用于除 mybucket 之外的另一个存储桶,我该怎么做?

我一定要吗:

  1. 创建一个全新的bucketpolicy,让我们说'mybucketpolicy2',它与上面的非常相似?
  2. 只需使用新的存储桶名称在上面的“语句”数组中再添加一项?如果是,那么这将与上面的“Bucket”键冲突,不是吗?
  3. 其他方式?

PS:我在 aws cfn 论坛上问过同样的问题,但我意识到我在 SO 上比在 aws 论坛上更快地得到答案。

4

1 回答 1

7

您不能将 AWS::S3::BucketPolicy 资源附加到多个存储桶。要将策略附加到多个资源,您需要使用 IAM 资源。AWS::IAM::Policy资源用于通过 IAM 管理定义策略并将其应用于各种资源。在我看来,IAM 接口比旧式策略资源更强大、更灵活(但更复杂)。您不仅可以将单个策略应用于多个存储桶,还可以将多个策略(语句)应用于多个存储桶并分配给多个 IAM 用户/组/角色。

您可以使用可以在 CloudFormation 模板中创建的 IAM 组或用户授予对特定策略的访问权限,例如。AWS::IAM::Group 资源。

根据您的需要调整此代码段:

"GetS3ContentPolicy" : {
  "Type" : "AWS::IAM::Policy",
  "Properties" : {
    "PolicyName" : "S3ContentPolicy",
    "PolicyDocument" : {
      "Statement" : [ {
        "Effect" : "Allow",
        "Action" : [
          "s3:ListBucket"
        ],
        "Resource" : [ 
          { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "PubS3Bucket" } ] ] },
          { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "SecretS3Bucket" } ] ] }
        ]
      },
      {
        "Effect" : "Allow",
        "Action" : [
          "s3:GetObject",
          "s3:GetObjectVersion"
        ],
        "Resource" : [ 
          { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "PubS3Bucket" }, "/*" ] ] },
          { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "SecretS3Bucket" }, "/*" ] ] }
        ]
      } ]
    },
    "Groups" : [
      { "Ref" : "ManagementInstancesGroup" },
      { "Ref" : "WebInstancesGroup" }
    ]
  }
},
于 2013-03-23T13:32:00.343 回答