使用 Cloudformation,您可以在创建 S3 存储桶时将 Authenticated Users 组设置为具有放置/删除访问控制吗?
1 回答
这对于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 和存储桶策略的特殊性,以防万一。