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

为何AWS: *形式的S3存储桶策略主体表现得如同*主体?

问题原因分析

你遇到的核心问题有两点:

  1. 桶策略缺少身份验证条件:Principal: {AWS: "*"}确实匹配所有AWS身份实体,但如果没有附加条件限制,若测试环境本地存在AWS凭证缓存,curl会自动使用凭证发起认证请求,导致你误以为是匿名访问;同时,策略只声明了允许规则,没有明确排除匿名访问的拒绝规则,结合宽松的公共访问配置,可能出现不符合预期的访问权限。
  2. Public Access Block配置宽松:你设置了RestrictPublicBuckets: false,这会允许S3桶策略使用AWS: "*"这类宽泛主体,不会触发公开访问限制,间接放大了权限范围。

修正方案

1. 调整Public Access Block配置

将RestrictPublicBuckets设为true,强制S3拒绝任何允许匿名访问的桶策略,确保只有经过身份验证的AWS实体能被授权。

2. 修改桶策略

添加条件限制,确保只有经过AWS身份验证的实体(包括IAM用户/角色、AWS服务)才能访问对象,同时覆盖CloudFormation等AWS服务的访问需求:

AWSTemplateFormatVersion: '2010-09-09'
Description: S3 Bucket with restricted access for AWS entities only
Resources:
  MyBucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: 'my-bucket'
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true  # 改为true,限制公开策略
  MyBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket: !Ref 'MyBucket'
      PolicyDocument:
        Statement:
          - Sid: AllowAuthenticatedAWSUsersAndServices
            Effect: Allow
            Principal:
              AWS: "*"
            Action: s3:GetObject
            Resource: !Sub '${MyBucket.Arn}/*'
            Condition:
              # 确保请求经过AWS身份验证(排除匿名)
              Null:
                aws:PrincipalArn: false
              # 可选:仅允许HTTPS请求,提升安全性
              Bool:
                aws:SecureTransport: true

3. 验证匿名访问

测试前先清除本地AWS凭证缓存(执行unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY),再用curl访问:

curl https://my-bucket.s3.amazonaws.com/my-file.txt

此时应返回AccessDenied,符合禁止匿名访问的需求。

补充说明

  • CloudFormation服务会使用其服务角色或你指定的执行角色访问S3资源,只要该角色拥有s3:GetObject权限且符合桶策略的身份验证条件,就能正常访问托管文件。
  • 处于活跃AWS登录会话的用户(如通过AWS控制台登录的IAM用户),浏览器请求会自动携带身份凭证,满足桶策略的aws:PrincipalArn非空条件,因此能正常下载文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:45:12