2017-02-24 51 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