You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation创建S3桶遇NotStabilized错误,求排查方案

解决CloudFormation创建S3桶时的NotStabilized错误

错误原因

你的S3桶配置中,PublicAccessBlockConfiguration仅设置了BlockPublicAcls: false,但其余三个公共访问阻止参数(BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets)默认值为true。其中BlockPublicPolicy: true会阻止S3应用包含公开访问规则的桶策略(即你模板中Principal: "*"的语句),导致CloudFormation持续等待桶策略生效,最终超时抛出NotStabilized错误。

修复步骤

1. 修正S3桶的公共访问阻止配置

更新S3Bucket资源的PublicAccessBlockConfiguration,将所有四个参数设为false,确保桶策略能正常应用:

S3Bucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: !FindInMap [AccountsMap, !Ref "AWS::AccountId", BucketName]
    PublicAccessBlockConfiguration:
      BlockPublicAcls: false
      BlockPublicPolicy: false
      IgnorePublicAcls: false
      RestrictPublicBuckets: false
    # 其余配置保持不变...

2. (推荐)改用CloudFront Origin Access Identity(OAI)提升安全性

当前桶策略允许所有用户访问GetObject,存在安全风险。建议为CloudFront配置专属OAI,仅允许CloudFront访问S3桶:

步骤1:添加CloudFront OAI资源

在模板中新增CloudFrontOAI资源:

CloudFrontOAI:
  Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
  Properties:
    CloudFrontOriginAccessIdentityConfig:
      Comment: OAI for CloudFront access to my S3 bucket

步骤2:修改桶策略的访问规则

将原桶策略中Principal: "*"的语句替换为允许OAI访问:

BucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties:
    Bucket: !Ref S3Bucket
    PolicyDocument:
      Statement:
        - Effect: Allow
          Action:
            - s3:GetObject
            - s3:GetObjectAcl
          Principal:
            AWS: !Sub 'arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${CloudFrontOAI}'
          Resource: !Join [ '', ['arn:aws:s3::', !Ref S3Bucket, '/*']]
        # 其余规则保持不变...

步骤3:在CloudFront分发中关联OAI

后续创建CloudFront分发时,在Origin配置中选择该OAI,确保CloudFront通过OAI访问S3桶。

3. 验证桶名唯一性

S3桶名是全局唯一的,确认你映射中配置的BucketName未被其他AWS用户占用,若已被占用需修改为唯一名称。

内容的提问来源于stack exchange,提问作者RedPen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:07:34