我想管理对我的 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 请求(例如 LIST 或 GET)产生费用。对于有人向公共存储桶或对象发出的匿名请求,AWS 会向您收费。AWS Config 规则和适用于 S3 的 IAM 访问权限分析器会生成有关存储桶公开状态的警告。
当您停用 S3 屏蔽公共访问权限时,您的 Amazon S3 控制台会在 External access summary(外部访问权限摘要)窗格中显示访问权限设置。
对"Access Denied"和 S3 存储桶错误进行故障排除
当您尝试在 S3 存储桶上启用或停用 S3 屏蔽公共访问权限时,您可能会收到"Access Denied"错误。
要对此问题进行故障排除,请执行以下操作:
- 确认 AWS Organizations 服务控制策略 (SCP) 不会阻止在账户或存储桶级别修改 S3 屏蔽公共访问权限。检查 s3:PutBucketPublicAccessBlock 和 s3: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]"