在CloudFormation yaml中创建BucketPolicy时出错

时间:2017-02-24 21:19:30

标签: amazon-s3 yaml amazon-cloudformation

我尝试使用以下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的值必须是一个对象"

有人有什么想法吗?

3 个答案:

答案 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