Amazon web services AWS:如何通过CloudFormation更新现有的S3存储桶策略?

Amazon web services AWS:如何通过CloudFormation更新现有的S3存储桶策略?,amazon-web-services,amazon-s3,amazon-cloudformation,Amazon Web Services,Amazon S3,Amazon Cloudformation,我有一个现有的S3 bucket我的bucket 我正在编写一个新的cloudformation模板文件,它创建了一些新的AWS资源,这些资源与我的bucket交互。现在,我的业务用例要求我从cloudformation模板文件中为my bucket的bucket策略添加新的权限语句 问题是该bucket已经具有以下bucket策略,这些策略是由其他人在过去某个时候通过AWS控制台手动添加的。从商业角度来看,这是一项重要的桶政策,因此我无法摆脱它: { "Version&quo

我有一个现有的S3 bucket
我的bucket

我正在编写一个新的cloudformation模板文件,它创建了一些新的AWS资源,这些资源与
我的bucket
交互。现在,我的业务用例要求我从cloudformation模板文件中为
my bucket
的bucket策略添加新的权限语句

问题是该bucket已经具有以下bucket策略,这些策略是由其他人在过去某个时候通过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/*"
        }
    ]
}
因此,我想我唯一的选择是更新现有的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

遗憾的是,您无法更新未由CloudFormation管理的现有策略

您唯一能做的就是使用CloudFormation通过重新创建策略来替换bucket中的策略

此外,现有的bucket策略不能导入到CloudFormation中。原因是资源不支持
AWS::S3::BucketPolicy

编辑:基于@Jeremythonpson

我验证了
UpdateReplacePolicy:Retain
的使用

为此,我使用了我自己的桶和政策。两者都是在CloudFormation之外使用AWS控制台创建的

然后,我用AWS::S3::BucketPolicy创建了一个CFN模板。模板部署失败,有或没有
UpdateReplacePolicy:Retain
,并显示错误消息:

The bucket policy already exists on bucket <bucket-name>.
bucket上已存在bucket策略。

这意味着您不能替换现有的bucket策略。必须在CloudFormation中重新创建策略。

真的吗?如果您设置了
UpdateReplacePolicy:Retain
,那么您不能安全地替换S3存储桶策略吗@我的理解是OP希望添加或修改不受CloudFormation控制的现有策略。我是否误解了这个问题?我看着这个问题,认为这是可以做到的:@jeremythonpson我将使用我自己的桶和策略来再次检查它。现在我可以删除答案,直到那时。谢谢你让我知道:u)
The bucket policy already exists on bucket <bucket-name>.