带有Cloudformation的非固定ACL S3桶

时间:2012-05-09 21:18:30

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

使用Cloudformation可以将Authenticated Users组设置为在创建S3 Bucket时放置/删除Access Control吗?

1 个答案:

答案 0 :(得分:7)

对于Access Control Lists (ACL)的初始和Amazon S3,只有预定义的Canned ACLs可用于AWS resource types支持的AWS CloudFormation,这是不可能的。反过来,请参阅AWS::S3::Bucket资源的属性 AccessControl

  

一个固定ACL,用于为存储桶授予预定义权限。默认   是私人的。有关预设ACL的详细信息,请参阅Canned ACLs in the Amazon S3 documentation

     

AccessControl的有效值:AuthenticatedRead | AwsExecRead | BucketOwnerRead | BucketOwnerFullControl | LogDeliveryWrite |私人| PublicRead | PublicReadWrite

假设您不想给所有 S3用户提供放置/删除访问权限(经过身份验证的用户组实际上意味着让不知情的S3开发人员感到惊讶),但对于大多数用例,只对您自己(或众所周知的一组)帐户的用户,您可以使用S3 Bucket Policies来实现您的目标。

Example Cases for Amazon S3 Bucket Policies向具有已添加限制的多个帐户授予权限提供示例策略,授予PutObject,并将PutObjectAcl权限授予多个帐户,并要求公开读取包含canned acl - 将其剥离到请求的集合并将其转换为CloudFormation模板代码段将产生以下内容(您需要将 Principal 调整到您的帐户)当然):

"Resources" : {
  "S3Bucket" : {
    "Type" : "AWS::S3::Bucket"
  },
  "BucketPolicy" : {
    "Type" : "AWS::S3::BucketPolicy",
    "Properties" : {
      "PolicyDocument": {
        "Id"           : "Grant access to all account users",
        "Statement"    : [{
          "Sid"        : "PutObjectAccess",
          "Action"     : ["s3:PutObject"],
          "Effect"     : "Allow",
          "Resource"   : { "Fn::Join" : ["", ["arn:aws:s3:::", {"Ref" : "S3Bucket"} ]]},
          "Principal"  : { "AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"] }
        }]
      },
      "Bucket" : {"Ref" : "S3Bucket"}
    }
  },
},

请注意Using ACLs and Bucket Policies Together的特殊情况。