5

以下は、A バケットの cfn テンプレートで bucketpolicy を設定する例です。

"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. まったく新しいバケットポリシーを作成する 「mybucketpolicy2」と言ってみましょう。これは上記と非常によく似ていますか?
  2. 上記の「Statement」配列に、新しいバケット名で項目をもう 1 つ追加するだけですか? はいの場合、これは上記の「バケット」キーと競合しますよね?
  3. 他の方法?

PS: aws cfn フォーラムで同じ質問をしましたが、aws フォーラムよりも SO の方が早く回答が得られることに気付きました。

4

1 に答える 1

7

AWS::S3::BucketPolicy リソースを複数のバケットにアタッチすることはできません。ポリシーを複数のリソースにアタッチするには、IAM リソースを使用する必要があります。AWS::IAM::Policyリソースは、IAM 管理を通じてポリシーを定義し、それらをさまざまなリソースに適用するために使用されます。私の意見では、IAM インターフェイスは古いスタイルのポリシー リソースよりもはるかに強力で柔軟です (ただし、より複雑です)。単一のポリシーを複数のバケットに適用できるだけでなく、複数のポリシー (ステートメント) を複数のバケットに適用し、複数の IAM ユーザー/グループ/ロールに割り当てることもできます。

たとえば、CloudFormation テンプレートで作成できる IAM グループまたはユーザーを使用して、特定のポリシーへのアクセスを許可します。AWS::IAM::グループ リソース。

このスニペットをニーズに合わせます。

"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 に答える