在 CloudFormation yaml 中创建 BucketPolicy 时出错
Posted
技术标签:
【中文标题】在 CloudFormation yaml 中创建 BucketPolicy 时出错【英文标题】:Error creating BucketPolicy in CloudFormation yaml 【发布时间】:2017-07-15 20:46:40 【问题描述】:我正在尝试使用以下 yaml 在 CloudFormation 中创建 S3 存储桶策略:
cloudTrailBucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket:
Ref: cloudtrailBucket
PolicyDocument:
-
Action:
- "s3:GetBucketAcl"
Effect: Allow
Resource:
Fn::Join:
- ""
-
- "arn:aws:s3:::"
-
Ref: cloudtrailBucket
- "/*"
Principal: "*"
-
Action:
- "s3:PutObject"
Effect: Allow
Resource:
Fn::Join:
- ""
-
- "arn:aws:s3:::"
-
Ref: cloudtrailBucket
- "/*"
Principal:
Service: cloudtrail.amazonaws.com
当我尝试这样做时,我收到一条消息“属性 PolicyDocument 的值必须是一个对象”
有人有什么想法吗?
【问题讨论】:
【参考方案1】:看起来您解决了这个问题,但为了便于阅读,您可以使用 !Sub 压缩格式,并且知道该操作允许单个值和列表。我喜欢 yaml 的主要原因之一是你使用较少的垂直性。
PolicyDocument:
-
Action: "s3:GetBucketAcl"
Effect: Allow
Resource: !Sub arn:aws:s3:::$cloudtrailBucket
Principal: "*"
-
Action: "s3:PutObject"
Effect: Allow
Resource: !Sub arn:aws:s3:::$cloudtrailBucket/*
Principal:
Service: cloudtrail.amazonaws.com
【讨论】:
【参考方案2】:AWS::S3::BucketPolicy
资源的PolicyDocument
属性具有必需的 JSON 对象类型。您问题中的 YAML 模板错误地提供了一个 JSON 数组,其中包含两个 JSON 对象作为 PolicyDocument
属性的值,因此您收到了错误消息。
要修复此错误,对象应正确嵌套在当前模板中缺少的 Statement
元素中。
有关 IAM 政策文档语法的更多详细信息,请参阅IAM Policy Elements Reference。
【讨论】:
【参考方案3】:啊。 s3:GetBucketAcl 是对存储桶的操作。我删除了第一条语句中的 /* 并且它起作用了。哎呀。超级有用的错误消息。
【讨论】:
以上是关于在 CloudFormation yaml 中创建 BucketPolicy 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何为在 Cloudformation 中创建的 Lambda 设置 Cloudwatch 日志
在特定子网和安全组 cloudformation 中创建实例
在 Cloudformation 中创建 DynamoDB 表失败
使用 CloudFormation 在 S3 存储桶中创建 Lambda 通知