【发布时间】:2020-11-04 11:14:05
【问题描述】:
我有一个现有的 S3 存储桶my-bucket。
我正在编写一个新的 CloudFormation 模板文件,该文件创建了一些与 my-bucket 交互的新 AWS 资源。现在,我的业务用例要求我在 CloudFormation 模板文件中为 my-bucket 的存储桶策略添加新的权限声明。
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
问题是存储桶已经具有以下存储桶策略,该策略是其他人在过去某个时间通过 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/*"
}
]
}
所以我想我唯一的选择是更新现有的存储桶策略以另外适应我的新策略声明。问题是:如何通过 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
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-cloudformation