AWS S3如何配置仅账户授权用户可访问的策略?CloudFormation部署异常求助
根因说明
你当前全量开启4个公有访问块的配置,会触发S3的系统级硬阻断逻辑,控制台因此直接判定为Bucket and objects not public。这个状态和你期望的Only authorized users of this account并非同一判定维度。
后者的触发条件非常明确:
- 桶未配置任何允许匿名用户、跨账号非授权主体访问的规则
- 未开启
BlockPublicPolicy、RestrictPublicBuckets这两个硬阻断类公有访问块参数
调整步骤
1. 修改公有访问块参数
将原有的全true配置调整为如下结构,在保留ACL层面防误操作能力的前提下,解除硬阻断判定:
PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: false IgnorePublicAcls: true RestrictPublicBuckets: false
配置说明:关闭后两个参数不会降低桶的安全性,仅会让控制台脱离“全硬阻断”的判定逻辑,后续会通过桶策略补齐访问管控能力。
2. 配套配置安全桶策略
新增/更新S3桶策略,硬性阻断所有外部、匿名访问,确保仅本账号内的授权IAM主体可按权限访问:
S3BucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref YourS3BucketResource PolicyDocument: Version: "2012-10-17" Statement: # 拒绝所有非本账号身份的访问请求 - Sid: DenyNonAccountAccess Effect: Deny Principal: "*" Action: "s3:*" Resource: - !GetAtt YourS3BucketResource.Arn - !Join ["", [ !GetAtt YourS3BucketResource.Arn, "/*" ]] Condition: StringNotEquals: "aws:PrincipalAccount": !Ref AWS::AccountId # 允许本账号内的授权IAM主体按自身权限访问 - Sid: AllowAccountAccess Effect: Allow Principal: "*" Action: "s3:*" Resource: - !GetAtt YourS3BucketResource.Arn - !Join ["", [ !GetAtt YourS3BucketResource.Arn, "/*" ]] Condition: StringEquals: "aws:PrincipalAccount": !Ref AWS::AccountId
策略说明:优先执行的Deny规则会硬性拦截所有不属于当前账号的身份、匿名用户的操作,不存在公开访问风险;本账号内的实际访问粒度,完全由给IAM用户、角色配置的授权策略控制,不会出现权限过度开放。
效果验证
完成CloudFormation部署后,打开S3控制台对应桶的“公有访问”面板,即可看到预期的Only authorized users of this account状态,所有外部访问会被策略直接拦截。
内容的提问来源于stack exchange,提问作者Bankchart Arlai
相关产品推荐
相关产品推荐

