2017-02-24 47 views
1

我尝试使用以下YAML在CloudFormation创建S3斗政策:错误CloudFormation YAML创建BucketPolicy

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

啊。 s3:GetBucketAcl是对存储桶的操作。我在第一个语句中删除了/ *并且它工作正常。啧啧。超级有用的错误消息。

0

PolicyDocument属性AWS::S3::BucketPolicy资源具有必需类型的JSON对象。您问题中的YAML模板错误地提供了一个包含两个JSON对象的JSON数组作为PolicyDocument属性的值,因此收到了错误消息。

为了解决这个错误,对象应该被正确地嵌套一个Statement元件,其是从当前模板缺少内。

参考IAM Policy Elements Reference对IAM政策文件语法的更多细节。

2

看起来你解决了这个问题,但为便于阅读,您可以通过使用!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