跳至内容

如何使用 Amazon S3 屏蔽公共访问权限功能来管理对 Amazon S3 资源的公共访问权限?

2 分钟阅读
0

我想管理对我的 Amazon Simple Storage Service (Amazon S3) 资源的访问权限。为此,我想使用 S3 屏蔽公共访问权限。

解决方法

您可以为不同级别的访问权限配置 Amazon S3 屏蔽公共访问权限设置。

添加所需的权限

要更改 S3 屏蔽公共访问权限设置,您的 AWS Identity and Access Management (IAM) 用户或角色必须具有以下权限:

  • s3:PutAccountPublicAccessBlock
  • s3:PutBucketPublicAccessBlock

要查看您当前的 S3 屏蔽公共访问权限设置,请确保您的 IAM 角色或用户具有以下权限:

  • s3:GetAccountPublicAccessBlock
  • s3:GetBucketPublicAccessBlock

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

启用或停用 S3 屏蔽公共访问权限

**注意:**自 2023 年 4 月起,Amazon S3 会自动为您创建的所有存储桶启用 S3 屏蔽公共访问权限。

您可以在账户级别存储桶级别或两者中配置 S3 屏蔽公共访问权限设置。

启用 S3 屏蔽公共访问权限

启用 S3 屏蔽公共访问权限后,Amazon S3 将执行以下操作:

  • 拒绝匿名请求和未经身份验证的请求,无一例外。使用 Web 浏览器或 curl 进行访问的 Amazon S3 URI 和 URL 会收到"HTTP 403 Access Denied"错误。
  • 忽略您应用于 Amazon S3 对象的新公共 ACL,并撤消用户对 S3 存储桶和对象的用户访问权限。

停用 S3 屏蔽公共访问权限

如果停用 S3 屏蔽公共访问权限,则 Amazon S3 允许使用公共存储桶策略或公共 ACL 访问对象。您可能会因 Amazon S3 请求(例如 LISTGET)产生费用。对于有人向公共存储桶或对象发出的匿名请求,AWS 会向您收费。AWS Config 规则和适用于 S3 的 IAM 访问权限分析器会生成有关存储桶公开状态的警告。

当您停用 S3 屏蔽公共访问权限时,您的 Amazon S3 控制台会在 External access summary(外部访问权限摘要)窗格中显示访问权限设置

对"Access Denied"和 S3 存储桶错误进行故障排除

当您尝试在 S3 存储桶上启用或停用 S3 屏蔽公共访问权限时,您可能会收到"Access Denied"错误。

要对此问题进行故障排除,请执行以下操作:

  • 确认 AWS Organizations 服务控制策略 (SCP) 不会阻止在账户或存储桶级别修改 S3 屏蔽公共访问权限。检查 s3:PutBucketPublicAccessBlocks3:PutAccountPublicAccessBlock 操作的 Deny 语句。
  • 如果您的存储桶在其 Access(访问权限)列中显示 Error,请将以下权限添加到您的 IAM 策略中,以列出存储桶和公共访问权限设置:
    s3:GetAccountPublicAccessBlock
    s3:GetBucketPublicAccessBlock
    s3:GetBucketPolicyStatus
    s3:GetBucketLocation
    s3:GetBucketAcl
    s3:ListAccessPoints
    s3:ListAllMyBuckets

识别修改 S3 屏蔽公共访问权限的 IAM 用户或角色

查看您的 AWS CloudTrail 事件历史记录,以识别以下 EventNames 的事件:

  • 对于账户级别,请检查 PutAccountPublicAccessBlock
  • 对于存储桶级别,请检查 PutBucketPublicAccessBlock

要识别调用者的 Amazon 资源名称 (ARN),请检查日志中的 UserIdentity 字段。日志示例:

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

然后,检查 bucketName 以识别修改后的 S3 存储桶。日志示例:

"requestParameters": {  
 "publicAccessBlock": "",  
 "bucketName": "[BucketName]"
AWS 官方已更新 4 个月前