【问题标题】:S3 Creation CloudFormation results in 400 Bad RequestS3 创建 CloudFormation 导致 400 错误请求
【发布时间】:2019-06-15 00:31:33
【问题描述】:

我在使用 CloudFormation 创建 S3 存储桶时遇到了这个问题。我收到 400 错误请求。如果有人可以提供帮助,将不胜感激。

aws cloudformation deploy --profile DEV --stack-name testBucket --template-file create_bucket.yml --region us-east-1 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --parameter-overrides BucketName=myBucket

模板:

    AWSTemplateFormatVersion: 2010-09-09
    Parameters:
      BucketName:
        Description: Provisioned read throughput for each table
        Type: String
    Resources:
      MYBUCKET:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: ${BucketName}
      MYBUCKETPOLICY:
        Type: AWS::S3::BucketPolicy
        Properties:
          Bucket: !Ref MYBUCKET
          PolicyDocument:
            Id: ReportPolicy
            Version: "2012-10-17"
            Statement:
              - Sid: ReportBucketPolicyDoc
                Effect: Allow
                Action: "s3:*"
                Principal:
                  AWS: !Join ['', ["arn:aws:iam::", !Ref "AWS::AccountId", ":root"]]
                Resource: !Join ['', ['arn:aws:s3:::', !Ref MYBUCKET, '/*']]

错误

错误请求(服务:Amazon S3;状态代码:400;错误代码:400 错误 要求;请求编号:B4AEAA3C454B7868; S3 扩展请求 ID: ATFscTA4dQw8J8AYUfkIARYhiT4/BpVWRcD172WnR75Uzm+i5dlHOTC2HCb9drkO16dzYiELJZc=)

【问题讨论】:

    标签: amazon-s3 amazon-cloudformation


    【解决方案1】:

    以下线程与尝试更改 S3 存储桶区域的任何人相关他们删除了另一个区域中的存储桶。

    在一个区域中删除存储桶与在所有其他区域中可用的名称之间基本上存在延迟。因此,如果您在 ap-southeast-2 中删除了一个存储桶,然后尝试创建一个与 us-east-1 同名的存储桶,您应该会收到这种错误。

    https://github.com/aws/aws-cdk/issues/6646#issuecomment-597905903

    【讨论】:

    • 你是救星,谢谢!亚马逊认真地需要改进他们关于这个错误的消息。
    【解决方案2】:

    您应该使用!Ref BucketName 而不是${BucketName}

      MYBUCKET:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: !Ref BucketName
    

    【讨论】:

    • 你是怎么得到这个的?我的意思是有没有办法获取有关这种错误情况的信息,例如cloudtrail 或 smthg 之类的?
    • 这个答案帮助我找到了我的一个错误,我在Fn::Sub: "${BucketName}" 中缺少美元符号,导致Fn::Sub: "{BucketName}" 和类似的400 错误。遗憾的是,即使是 cfn-lint 工具也只会将此报告为警告。
    • 这是错误的,BucketName 是一个变量,应该和 !Sub ${BucketName} 一起使用
    • @Baris 这没有错。您可以通过以下任何一种方式访问​​参数:!Ref BucketName!Sub "${BucketName}"Fn::Ref: BucketNameFn::Sub "${BucketName}" 和其他方式,具体取决于您希望使用内部函数和引号获得的详细程度...
    【解决方案3】:

    您没有正确引用BucketName 参数:

    MYBUCKET:
      Type: AWS::S3::Bucket
        Properties:
        BucketName: !Sub ${BucketName}  # Or !Ref BucketName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2018-11-06
      • 2020-02-03
      • 2016-10-13
      • 1970-01-01
      相关资源
      最近更新 更多