CloudFormation配置S3 Object Lock报InvalidBucketState错误求助
问题原因及解决办法
问题原因
S3桶名是全局唯一的,哪怕你确认自己账户下没有testbucket-prod这个桶,也可能出现这种情况:其他AWS账户曾创建过同名桶,之后删除了,但S3桶删除后有24小时的删除保留期,这段时间内该桶名无法被任何账户重新创建。而Object Lock必须在桶创建时启用,不能事后添加,所以CloudFormation尝试创建带Object Lock的桶时,S3会返回类似“已有桶”的错误。
解决办法
- 更换桶名:用一个从未被使用过的新名称,比如在原名称后加日期、随机字符串后缀,例如把
testbucket-prod改成testbucket-prod-20240520或testbucket-prod-xyz,修改模板里的BucketName字段后重新创建栈。 - 等待释放:如果必须用原桶名,得等24小时,等S3释放该桶名后再重试创建。
- 确认模板逻辑:确保
ObjectLockConfiguration是在桶创建时就配置的(当前模板已经符合要求,别尝试给已创建的桶加这个配置,S3不支持)。
修正后的示例模板
--- Resources: TestBucketBucketProd: Type: 'AWS::S3::Bucket' Properties: BucketName: testbucket-prod-20240520 # 替换为新的唯一桶名 VersioningConfiguration: Status: Enabled AccessControl: Private Tags: - Key: org Value: prod PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true ObjectLockConfiguration: ObjectLockEnabled: true Rule: DefaultRetention: Mode: GOVERNANCE Days: 2 Outputs: TestBucketBucketName: Value: !Ref TestBucketBucketProd Description: The name of the TestBucket S3 bucket.
内容的提问来源于stack exchange,提问作者marvelli
相关产品推荐
相关产品推荐

