

# 为 S3 存储桶配置屏蔽公共访问权限设置
<a name="configuring-block-public-access-bucket"></a>

Amazon S3 屏蔽公共访问权限提供接入点、存储桶、组织和账户的设置，帮助您管理对 Amazon S3 资源的公共访问。默认情况下，新存储桶、接入点和对象不允许公有访问。有关更多信息，请参阅 [阻止对您的 Amazon S3 存储的公有访问](access-control-block-public-access.md)。

**注意**  
存储桶级别的屏蔽公共访问权限设置与组织级别和账户级别的策略共同起作用。S3 采用存储桶级别配置与生效的账户级别配置之间最严格的设置（如果存在组织策略，则可由组织策略强制执行）。

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

要为账户中的每个存储桶配置“屏蔽公共访问权限”设置，请参阅[为您的账户配置屏蔽公共访问权限设置](configuring-block-public-access-account.md)。有关组织范围的集中管理，请参阅《AWS Organizations 用户指南》**中的 [S3 策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_s3.html)。

有关为接入点配置屏蔽公共访问权限的信息，请参阅 [在接入点上执行屏蔽公共访问权限操作](access-control-block-public-access.md#access-control-block-public-access-examples-access-point)。

# 使用 S3 控制台
<a name="block-public-access-bucket"></a>

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

您可以从 **IAM Access Analyzer** 列的**存储桶**列表中查看您的存储桶是否可以公开访问。有关更多信息，请参阅 [使用适用于 S3 的 IAM Access Analyzer 查看存储桶访问权限](access-analyzer.md)。

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

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

在极少数情况下，请求也可能因 AWS 区域中断而失败。

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

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

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在 **Bucket name**（存储桶名称）列表中，请选择所需的存储桶的名称。

1. 选择 **Permissions (权限)**。

1. 选择**屏蔽公共访问权限（存储桶设置）**旁边的**编辑**，以更改存储桶的公共访问权限设置。有关四个 Amazon S3 屏蔽公共访问权限设置的更多信息，请参阅 [屏蔽公共访问权限设置](access-control-block-public-access.md#access-control-block-public-access-options)。

1. 选择其中一个设置，然后选择**保存更改**。

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

**重要**  
即使您禁用了存储桶级别的屏蔽公共访问权限设置，但存储桶仍可能受到账户级别策略或组织级别策略的保护。S3 始终采用所有级别中限制性最严格的设置组合。

还可以在创建存储桶时更改 Amazon S3 屏蔽公共访问权限设置。有关更多信息，请参阅 [创建通用存储桶](create-bucket-overview.md)。

## 使用 AWS CLI
<a name="configuring-block-public-access-bucket-cli"></a>

要对存储桶屏蔽公共访问权限或删除公共访问权限屏蔽，请使用 AWS CLI 服务 `s3api`。使用此服务的存储桶级别的操作如下所示：
+ `PutPublicAccessBlock`（对于存储桶）
+ `GetPublicAccessBlock`（对于存储桶）
+ `DeletePublicAccessBlock`（对于存储桶）
+ `GetBucketPolicyStatus`

有关更多信息和示例，请参阅《AWS CLI 参考》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-public-access-block.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-public-access-block.html)。

**注意**  
这些存储桶级别的操作不受组织级别策略的限制。但是，生效的公共访问行为仍将受到存储桶、账户和组织设置的最严格限制组合的约束。有关层次结构和策略交互的更多信息，请参阅[使用 S3 控制台](block-public-access-bucket.md)。

## 使用 AWS 开发工具包
<a name="configuring-block-public-access-bucket-sdk"></a>

------
#### [ 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 ]

有关使用其它 AWS SDK 的信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the AWS SDKs](https://docs.aws.amazon.com/AmazonS3/latest/API/sdk-general-information-section.html)。

------

## 使用 REST API
<a name="configuring-block-public-access-bucket-api"></a>

有关通过 REST API 使用 Amazon S3 屏蔽公共访问权限的信息，请参阅 *Amazon Simple Storage Service API 参考*中的以下主题。
+ 存储桶级别操作
  + [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html)
  + [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html)
  + [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html)
  + [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html)