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

使用CloudFormation创建S3 Bucket Policy时遇Access Denied错误求助

问题分析与解决方案

核心问题定位

你遇到的CloudFormation创建S3桶策略时的Access Denied错误,最可能的原因及对应解决方法如下:

1. S3桶名全局唯一性冲突

S3桶名是AWS全局唯一的,你使用的桶名foo过于通用,几乎可以肯定已被其他AWS账户占用。当CloudFormation尝试创建已存在的桶时,会默认尝试修改该桶的策略,但由于桶不属于你的账户,自然会返回权限拒绝。

解决方法:
将桶名修改为全局唯一值,比如添加你的AWS账户ID后缀、自定义前缀,示例:

BucketName: "foo-your-aws-account-id-1234567890"

2. IAM策略生效延迟

部分情况下,IAM策略附加后需要1-5分钟才能完全生效。如果你刚添加完策略就立即执行部署,可能会遇到权限未同步的问题。

解决方法:
等待5分钟后重新部署,或退出并重新登录AWS控制台/刷新本地凭证(如使用CLI)。

3. AWS组织SCP(服务控制策略)限制

如果你的AWS账户属于某个AWS组织,组织管理员可能配置了SCP,限制了s3:PutBucketPolicy操作。SCP优先级高于IAM用户策略,即使你附加了全权限策略也会被拦截。

解决方法:
联系组织管理员检查SCP规则,确认是否允许目标账户执行s3:PutBucketPolicy操作。

4. 手动验证权限有效性

可以通过AWS CLI手动测试权限,排除CloudFormation本身的问题:

  1. 先创建一个全局唯一的S3桶:
    aws s3api create-bucket --bucket your-unique-bucket-name --region us-east-1
    
  2. 手动添加桶策略:
    aws s3api put-bucket-policy --bucket your-unique-bucket-name --policy '{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "DenyAccessToRestrictedPrefix",
                "Effect": "Deny",
                "Principal": "*",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::your-unique-bucket-name/bar/*"
            },
            {
                "Sid": "AllowWriteAccess",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::your-unique-bucket-name/*"
            }
        ]
    }'
    

如果手动操作成功,说明问题出在CloudFormation模板的桶名上;如果手动操作也返回Access Denied,则需要进一步排查IAM或SCP配置。

修改后的CloudFormation模板示例

AWSTemplateFormatVersion: "2010-09-09"
Description: Create an S3 bucket and define bucket policy

Resources:
  FooBucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: "foo-unique-suffix-123456"  # 替换为全局唯一桶名
      VersioningConfiguration:
        Status: "Enabled"
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: "AES256"
      AccessControl: "Private"
      LifecycleConfiguration:
        Rules:
          - Id: "ExpireNoncurrentVersions"
            Status: "Enabled"
            NoncurrentVersionExpirationInDays: 365
      Tags:
        - Key: "Name"
          Value: "foo"

  S3BucketPolicy:
    Type: "AWS::S3::BucketPolicy"
    Properties:
      Bucket: !Ref FooBucket
      PolicyDocument:
        Statement:
          - Sid: DenyAccessToRestrictedPrefix
            Effect: Deny
            Principal: "*"
            Action: "s3:PutObject"
            Resource: 
              - !Sub "arn:aws:s3:::${FooBucket}/bar/*"
          - Sid: AllowWriteAccess
            Effect: Allow
            Principal: "*"
            Action: "s3:PutObject"
            Resource: !Sub "arn:aws:s3:::${FooBucket}/*"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:43