【问题标题】:Error when creating S3 bucket policy - Value of property PolicyDocument must be an object创建 S3 存储桶策略时出错 - 属性 PolicyDocument 的值必须是对象
【发布时间】:2019-10-16 05:15:23
【问题描述】:

我正在尝试通过无服务器应用程序创建 cloudTrail。

CloudTrail:
  Type: AWS::CloudTrail::Trail
  Properties: 
    # CloudWatchLogsLogGroupArn: "String"
    # CloudWatchLogsRoleArn: "String"
    # EnableLogFileValidation: True
    # EventSelectors: 
    #   - EventSelector
    # IncludeGlobalServiceEvents: True
    IsLogging: True
    # IsMultiRegionTrail: True
    # KMSKeyId: String
    S3BucketName: {"Ref" : "CloudTrailBucket"}
    # S3KeyPrefix: String
    # SnsTopicName: String
    # Tags: 
    #   - Tag
    # TrailName: String

首先我尝试单独创建 cloudTrail 并收到以下错误

CloudTrail - Incorrect S3 bucket policy is detected for bucket: ....

然后我添加了这段代码来创建策略

CloudTrailBucketPolicy: 
  # Version : 2012-10-17,
  Type:  AWS::S3::BucketPolicy
  Properties:
    PolicyDocument:
      - Action:
          - "s3:GetBucketAcl"
        Effect:  Allow
        Resource: { "Fn::Join": ["", ["arn:aws:s3:::CloudTrailBucket"] ] }
        Principal:  "*"
      - Action:
          - "s3:PutObject"
        Effect:  Allow
        Resource: { "Fn::Join": ["", ["arn:aws:s3:::CloudTrailBucket", "/*" ] ] }
        Principal:
          Service:  cloudtrail.amazonaws.com

但出现此错误。

An error occurred: CloudTrailBucketPolicy - Value of property PolicyDocument must be an object.

【问题讨论】:

    标签: amazon-web-services amazon-s3 yaml amazon-cloudformation aws-serverless


    【解决方案1】:

    你忘了Statement:

    CloudTrailBucketPolicy: 
      # Version : 2012-10-17,
      Type:  AWS::S3::BucketPolicy
        Properties:
          Bucket: !Ref CloudTrailBucket
          PolicyDocument:
            Statement:
              - 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
    

    【讨论】:

    • 谢谢,我将接受您的回答,只是想知道您是否知道为什么这不能正确创建策略,我在 s3 存储桶上的策略中获得的唯一操作是“操作":"s3:*",我希望 s3:GetBucketAcl 和 s3:PutObject
    • 您是否手动更改了存储桶策略?再次创建堆栈后,尝试删除 CloudFormation 堆栈和存储桶策略。有时 CloudFormation 不会取代我执行的一些手动更改。
    • 是的,我尝试删除堆栈甚至重命名它,还有其他想法吗?
    • 您是否也通过 CloudFormation 创建了您的存储桶?当我创建 BucketPolicy 时,我也通过 CloudFormation 创建了存储桶
    • 是的,我也在脚本中创建了存储桶,当您进入控制台并签入时,您的策略是否正确创建?
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2015-03-14
    • 2021-08-14
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    相关资源
    最近更新 更多