带有Cloudformation的非固定ACL S3桶

nsf*_*n55 3 amazon-s3 amazon-ec2 amazon-web-services aws-cloudformation

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

Ste*_*pel 7

对于Amazon S3的初始和受限访问控制列表(ACL),这是不可能的,其中只有预定义的固定ACL可用于AWS CloudFormation支持的AWS资源类型,请参阅AWS ::的属性AccessControl.S3 :: Bucket资源:

一个固定ACL,用于授予存储区的预定义权限.默认为私人.有关预装ACL的更多信息,请参阅Amazon S3文档中的预装ACL.

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

假设您不希望事实上给所有 S3用户提供放置/删除访问权限(Authenticated Users组实际上意味着让不知情的S3开发人员感到惊讶),但仅限于您自己的用户(或众所周知的一组用户) )对于大多数用例,您可以像往常一样使用S3 Bucket Policies来实现目标.

Amazon S3存储桶策略示例案例提供了一个示例策略,用于向具有已添加限制的多个帐户授予权限,该策略将PutObject和PutObjectAcl权限授予多个帐户,并要求包含公共读取的固定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"}
    }
  },
},
Run Code Online (Sandbox Code Playgroud)

请注意以下一起使用ACL和存储桶策略的特性.