在 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 通知

如何使用 Cloudformation 在 AWS RestAPI 中创建嵌套资源路径?

AWS Cloudformation - 在 EFS 中创建初始文件夹