bap*_*pak 8 amazon-s3 amazon-web-services aws-cloudformation
我有一个现有的 S3 存储桶my-bucket。
我正在编写一个新的 CloudFormation 模板文件,该文件创建一些与my-bucket. my-bucket 现在,我的业务用例要求我从 CloudFormation 模板文件中向存储桶策略添加新的权限语句。
SourceBucketBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: my-bucket
PolicyDocument:
Statement:
- Effect: "Allow"
Action:
- 's3:PutBucketNotificationConfiguration'
Resource: "arn:aws:s3:::my-bucket"
Principal:
AWS: !GetAtt MyLambdaExecutionRole.Arn
Run Code Online (Sandbox Code Playgroud)
问题是该存储桶已经具有以下存储桶策略,该策略是其他人在过去某个时刻通过 AWS 控制台手动添加的。从商业角度来看,这是一个重要的存储桶策略,因此我无法摆脱它:
{
"Version": "2012-10-17",
"Id": "S3-Policy",
"Statement": [
{
"Sid": "DataCraft-012345678901-S3-datacraft",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::012345678901:user/datacraft"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以我想我唯一的选择是更新现有的存储桶策略以额外适应我的新策略声明。问题是:如何通过 CloudFormation 模板文件做到这一点?
编辑:AWS::IAM::Policy对于那些感兴趣的人,我最终通过编写而不是解决了问题AWS::S3::BucketPolicy:
SourceBucketNotificationConfigurationPolicy:
Type: AWS::IAM::Policy
Properties:
PolicyDocument:
Statement:
- Action: s3:PutBucketNotification
Effect: Allow
Resource: "arn:aws:s3:::my-bucket"
Version: '2012-10-17'
PolicyName: BucketNotificationsRolePolicy
Roles:
- Ref: MyLambdaExecutionRole.Arn
Run Code Online (Sandbox Code Playgroud)
遗憾的是,您无法更新不受 CloudFormation 管理的现有策略。
您唯一能做的就是使用 CloudFormation 重新创建存储桶中的策略来替换它。
此外,现有存储桶策略无法导入到 CloudFormation 中。原因是该AWS::S3::BucketPolicy资源不支持导入。
编辑:基于@JeremyThompson的评论
我验证了使用UpdateReplacePolicy: Retain.
为此,我使用了自己的水桶和策略。两者都是使用 AWS 控制台在 CloudFormation 外部创建的。
然后,我使用AWS::S3::BucketPolicy. 模板部署失败,有或没有UpdateReplacePolicy: Retain错误消息:
The bucket policy already exists on bucket <bucket-name>.
Run Code Online (Sandbox Code Playgroud)
这意味着您无法替换现有存储桶策略。必须在 CloudFormation 中重新创建该策略。
| 归档时间: |
|
| 查看次数: |
10912 次 |
| 最近记录: |