启用或关闭 Amazon S3 屏蔽公共访问权限设置会有什么后果?

2 分钟阅读
0

我想知道启用或关闭 Amazon Simple Storage Service(Amazon S3)屏蔽公共访问权限设置对 Amazon S3 操作有何影响。

解决方法

可用设置

Amazon S3 屏蔽公共访问权限设置具有不同级别的限制,您可以通过四个可配置选项来应用这些限制:

  • 屏蔽通过新的访问控制列表(ACL)授予的公共访问权限: Amazon S3 会屏蔽您应用于新添加的桶或对象的公共访问权限。S3 还会阻止为现有桶和对象创建新的公共访问 ACL。此设置不会更改允许公众访问使用 ACL 的 S3 资源的现有权限。
  • 屏蔽通过任何 ACL 授予的公共访问权限:S3 会忽略所有授予对桶和对象的公共访问权限的 ACL。
  • 屏蔽通过新的公共桶或接入点策略授予的公共访问权限: S3 会屏蔽授予对桶和对象的公共访问权限的新桶和接入点策略。此设置不会更改允许公众访问 S3 资源的现有策略。
  • 屏蔽通过公共桶或接入点策略授予的公共和跨账户访问权限: 通过授予对桶和对象的公共访问权限的策略,S3 会忽略对桶或接入点的公共和跨账户访问。

第一个和第三个选项旨在防止对授予公共访问权限的 S3 桶策略或对象 ACL 进行新更新。这些设置不会更改当前授予公共访问权限的现有策略或者 ACL。

第二个和第四个选项旨在防止和忽略授予公共访问权限的新桶策略和现有桶策略或者对象 ACL。

有关详细信息,请参阅屏蔽公共访问权限设置

启用或关闭 S3 屏蔽公共访问权限设置

注意:自 2023 年 4 月起,所有新创建的 S3 桶都默认启用 S3 屏蔽公共访问权限

您可以在账户级别和/或桶级别启用此设置。

在您为桶启用屏蔽公共访问权限设置后,会发生以下情况:

  • 匿名请求和未经身份验证的请求均被拒绝,无一例外。使用 Web 浏览器访问的 S3 URI 和 URL 会返回 HTTP 403 访问被拒绝错误以及相应的请求 ID。
  • 应用于 S3 对象的任何公共 ACL 都将被忽略,导致依赖此 ACL 进行对象访问的用户的访问权限被撤销。

在您关闭桶的屏蔽公共访问权限设置后,会发生以下情况:

  • 现在,互联网上具有对象路径链接的任何人都能访问具有公共桶策略或公共 ACL 访问权限的对象。这包括网络爬虫和未经授权的用户。
  • 您可能会增加与 S3 请求(如 LIST 或 GET)相关联的成本。针对公共桶或对象发出的匿名请求将向桶所有者收取费用。
  • 适用的 AWS Config 规则以及适用于 S3 的 AWS Identity and Access Management(IAM)Access Analyzer 会生成有关您的桶公有状态的警告。若要遵守这些规则,您必须启用屏蔽公共访问权限设置。

当您关闭屏蔽公共访问权限设置时,您的 S3 桶的访问列会在控制台上显示下列内容之一:

  • 对象可以是公共的: 桶不是公共的,但是具有相应权限的任何人都可以授予对对象的公共访问权限。
  • 桶和对象不是公共的: 桶和对象不具有公共访问权限。
  • 仅此账户的授权用户: 由于存在授予公共访问权限的策略,访问被隔离到 IAM 帐户用户和角色以及 AWS 服务主体。
  • 公共: 每个人都有权访问一个或多个列表对象、写入对象,并且具有读写权限。

必需权限

如需启用或关闭 S3 屏蔽公共访问权限设置,您的 IAM 角色或用户必须具有下列 S3 权限:

  • 账户级别:s3:PutAccountPublicAccessBlock
  • 桶级别:s3:PutBucketPublicAccessBlock

如需查看您当前的 S3 屏蔽公共访问权限设置,您的 IAM 角色或用户必须具有下列 S3 权限:

  • 账户级别:s3:GetAccountPublicAccessBlock
  • 桶级别:s3:GetBucketPublicAccessBlock

有关详细信息,请参阅权限

错误故障排除

当您尝试在 S3 桶上启用或关闭屏蔽公共访问权限设置时,可能会遇到访问被拒绝错误。如需排查此错误,请尝试以下各项:

  • 验证服务控制策略是否不包括防止在账户级别或桶级别修改 S3 屏蔽公共访问权限设置的组织策略。检查 s3:PutBucketPublicAccessBlock 和 s3:PutAccountPublicAccessBlock 操作的 Deny 语句。
  • 验证 IAM 用户或角色是否对资源具有所需的权限。
  • 验证您想要修改设置的 S3 桶是否没有现有的公有 S3 桶策略(任何带 Principal: "*" 的桶策略语句)。

识别用户

如需识别哪个 IAM 实体修改了您的桶或账户上的此设置,请使用 AWS CloudTrail 事件。您可以在 CloudTrail 控制台中针对以下 EventNames 筛选这些事件:

  • 对于账户级别,请查找 PutAccountPublicAccessBlock
  • 对于桶级别,请查找 PutBucketPublicAccessBlock

如需识别调用方 ARN,请对照日志中的 UserIdentity 字段进行检查:

 "userIdentity": {  
 "type": "AssumedRole",  
 "principalId": "[AccountID]:[RoleName]",  
 "arn": "arn:aws:sts::[AccountID]:assumed-role/[RoleName]/[RoleSession]",

然后,验证您要检查的 S3 桶资源:

"requestParameters": {  
 "publicAccessBlock": "",  
 "bucketName": "[BucketName]"

其他注意事项

  • 具有广泛 IP 地址范围(例如 0.0.0.0/1)、对 aws:SourceIp 条件键授予访问权限的桶策略被评估为公共策略。
  • 您可以使用适用于 S3 的 IAM Access Analyzer 来查看包含授予公共访问权限的桶 ACL、桶策略或接入点策略的桶。
  • 如果您的桶在 S3 控制台中针对访问列显示错误,则表示您的 IAM 角色或用户缺乏足够的权限,无法列出您的桶及其公共访问权限设置。务必为您的用户或角色策略添加下列权限:
s3:GetAccountPublicAccessBlock
s3:GetBucketPublicAccessBlock
s3:GetBucketPolicyStatus
s3:GetBucketLocation
s3:GetBucketAcl
s3:ListAccessPoints
s3:ListAllMyBuckets
  • Amazon S3 不支持基于每个对象的屏蔽公共访问权限设置。
  • 当您对账户应用屏蔽公共访问权限设置时,这些设置适用于全球所有 AWS 区域。这些设置可能不会立即或同时在所有区域生效,但它们最终会传播到所有区域。
AWS 官方
AWS 官方已更新 1 年前