3

使用 Cloudformation,您可以在创建 S3 存储桶时将 Authenticated Users 组设置为具有放置/删除访问控制吗?

4

1 回答 1

7

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

对存储桶授予预定义权限的标准 ACL。默认为私人。有关标准 ACL 的更多信息,请参阅Amazon S3 文档中的标准 ACL

AccessControl 的有效值:AuthenticatedRead | AwsExec读取 | BucketOwner阅读 | BucketOwnerFullControl | 日志传递写 | 私人 | 公开阅读 | 公共读写

假设您实际上不想向所有S3 用户授予 put/delete 访问权限(Authenticated Users组实际上暗示了不知情的 S3 开发人员的惊讶),但仅授予您自己的用户(或一组众所周知的) 帐户与大多数用例一样,您可以通过使用S3 存储桶策略来实现您的目标。

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"}
    }
  },
},

请注意同时使用 ACL 和存储桶策略的特殊性,以防万一。

于 2012-05-27T20:14:11.403 回答