为 S3 存储桶配置屏蔽公共访问权限设置 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 S3 存储桶配置屏蔽公共访问权限设置

Amazon S3 屏蔽公共访问权限提供接入点、存储桶和账户的设置,帮助您管理对 Amazon S3 资源的公有访问。默认情况下,新存储桶、接入点和对象不允许公有访问。

有关更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问

您可以使用 S3 控制台、Amazon CLI、Amazon SDK 和 REST API 授予对一个或多个存储桶的公共访问权限。您还可以对已经设为公共的存储桶屏蔽公共访问权限。有关更多信息,请参阅以下部分。

要为账户中的每个存储桶配置“屏蔽公共访问权限”设置,请参阅为您的账户配置屏蔽公共访问权限设置。有关为接入点配置屏蔽公共访问权限的信息,请参阅 在接入点上执行屏蔽公共访问权限操作

Amazon S3 屏蔽公共访问权限将阻止使用允许对 S3 存储桶中的数据进行公有访问的任何设置的应用程序。本部分介绍如何为一个或多个 S3 存储桶编辑屏蔽公共访问权限设置。有关使用 Amazon CLI、Amazon SDK 和 Amazon S3 REST API 阻止公有访问的信息,请参阅阻止对您的 Amazon S3 存储的公有访问

您可以在存储桶列表中查看您的存储桶是否可以公开访问。在访问列中,Amazon S3 会标注存储桶的权限,如下所示:

  • 公有 – 所有人都拥有以下一项或多项访问权限:列出对象、写入对象、读取和写入权限。

  • 对象可以是公有的 – 存储桶不是公有的,但具有适当权限的任何人都可以授予对象公有访问权限。

  • 存储桶和对象不是公有的 – 存储桶和对象没有任何公有访问权限。

  • 仅限此账户的授权用户 – 由于存在授予公有访问权限的策略,因此访问权限仅限于此账户中的 IAM 用户和角色以及 Amazon 服务主体。

您还可以按访问类型来筛选存储桶搜索。从 Search for bucket(搜索存储桶)栏旁边的下拉列表中选择一种访问类型。

如果您在列出存储桶及其公有访问设置时看到 Error,则您可能不具备所需的权限。检查以确保您已将以下权限添加到您的用户或角色策略:

s3:GetAccountPublicAccessBlock s3:GetBucketPublicAccessBlock s3:GetBucketPolicyStatus s3:GetBucketLocation s3:GetBucketAcl s3:ListAccessPoints s3:ListAllMyBuckets

在极少数情况下,请求也可能因 Amazon Web Services 区域中断而失败。

为单个 S3 存储桶编辑 Amazon S3 屏蔽公共访问权限设置

如何您需要为单个 S3 存储桶更改公有访问设置,请执行以下步骤。

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Bucket name(存储桶名称)列表中,请选择所需的存储桶的名称。

  3. 选择 Permissions (权限)

  4. 请选择 Edit(编辑)以更改存储桶的公有访问设置。有关四个 Amazon S3 屏蔽公共访问权限设置的更多信息,请参阅 屏蔽公共访问权限设置

  5. 请选择要更改的设置,然后选择 Save (保存)

  6. 当系统要求确认时,请输入 confirm。然后选择 Confirm (确认) 以保存更改。

在创建存储桶时,可以更改 Amazon S3 屏蔽公共访问权限设置。有关更多信息,请参阅创建存储桶

要对存储桶屏蔽公共访问权限或删除公共访问权限屏蔽,请使用 Amazon CLI 服务 s3api。使用此服务的存储桶级别的操作如下所示:

  • PUT PublicAccessBlock(用于存储桶)

  • GET PublicAccessBlock(用于存储桶)

  • DELETE PublicAccessBlock(用于存储桶)

  • GET BucketPolicyStatus

有关更多信息和示例,请参阅 Amazon CLI 参考中的 put-public-access-block

Java
AmazonS3 client = AmazonS3ClientBuilder.standard() .withCredentials(<credentials>) .build(); client.setPublicAccessBlock(new SetPublicAccessBlockRequest() .withBucketName(<bucket-name>) .withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration() .withBlockPublicAcls(<value>) .withIgnorePublicAcls(<value>) .withBlockPublicPolicy(<value>) .withRestrictPublicBuckets(<value>)));
重要

此示例仅适用于使用 AmazonS3 客户端类的存储桶级别操作。对于账户级别的操作,请参阅以下示例。

Other SDKs

有关使用其他 Amazon SDK 的信息,请参阅 使用 Amazon 开发工具包和浏览器进行 Amazon S3 开发

有关通过 REST API 使用 Amazon S3 屏蔽公共访问权限的信息,请参阅 Amazon Simple Storage Service API 参考中的以下主题。