我尝试使用以下yaml在CloudFormation中创建S3 Bucket策略:
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的值必须是一个对象"
有人有什么想法吗?
答案 0 :(得分:5)
看起来你已经解决了这个问题,但为了便于阅读,你可以使用!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
答案 1 :(得分:0)
唉唉。 s3:GetBucketAcl是对存储桶的操作。我在第一个语句中删除了/ *并且它有效。啧啧。超级有用的错误消息。
答案 2 :(得分:0)
PolicyDocument
资源的AWS::S3::BucketPolicy
属性具有所需类型的JSON对象。您的问题中的YAML模板错误地提供了一个包含两个JSON对象的JSON数组作为PolicyDocument
属性的值,因此收到了错误消息。
要修复此错误,对象应正确嵌套在当前模板中缺少的Statement
元素中。
有关IAM策略文档语法的更多详细信息,请参阅IAM Policy Elements Reference。