

# 配置 S3 对象锁定
<a name="object-lock-configure"></a>

借助 Amazon S3 对象锁定，您可以使用*一次写入多次读取*（WORM）模式在 Amazon S3 通用存储桶中存储对象。您可以​使用 S3 对象锁定在固定的时间段内或无限期地阻止删除或覆盖对象。有关对象锁定功能的一般信息，请参阅[使用对象锁定以锁定对象](object-lock.md)。

在锁定任何对象之前，必须在通用存储桶上启用 S3 版本控制和对象锁定。之后，您可以设置保留期和/或依法保留。

要使用对象锁定功能，您必须拥有一定的权限。有关与各种对象锁定操作相关的权限列表，请参阅[所需的权限](object-lock.md#object-lock-permissions)。

**重要**  
在某个存储桶上启用对象锁定后，您将无法为该存储桶禁用对象锁定或暂停版本控制。
具有对象锁定的 S3 存储桶不能用作服务器访问日志的目标存储桶。有关更多信息，请参阅 [使用服务器访问日志记录来记录请求](ServerLogs.md)。

**Topics**
+ [创建新的 S3 通用存储桶时启用对象锁定](#object-lock-configure-new-bucket)
+ [在现有 S3 存储桶上启用对象锁定](#object-lock-configure-existing-bucket)
+ [设置或修改 S3 对象的依法保留](#object-lock-configure-set-legal-hold)
+ [设置或修改 S3 对象的保留期](#object-lock-configure-set-retention-period-object)
+ [设置或修改 S3 存储桶的默认保留期](#object-lock-configure-set-retention-period-bucket)

## 创建新的 S3 通用存储桶时启用对象锁定
<a name="object-lock-configure-new-bucket"></a>

可以在使用 Amazon S3 控制台、Amazon Command Line Interface（Amazon CLI）、Amazon SDK 或 Amazon S3 REST API 创建新的 S3 通用存储桶时启用对象锁定。

### 使用 S3 控制台
<a name="object-lock-new-bucket-console"></a>

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

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 选择**创建存储桶**。

   此时将打开**创建存储桶**页面。

1. 对于**存储桶名称**，输入存储桶的名称。
**注意**  
创建存储桶后，便无法更改其名称。有关给存储桶命名的更多信息，请参阅[通用存储桶命名规则](bucketnamingrules.md)。

1. 对于**区域**，选择要放置存储桶的 Amazon Web Services 区域。

1. 在**对象所有权**下，选择禁用或启用访问控制列表（ACL），并控制上传到存储桶中的对象的所有权。

1. 在**此存储桶的屏蔽公共访问权限设置**下，选择要应用于存储桶的屏蔽公共访问权限设置。

1. 在**存储桶版本控制**下，选择**已启用**。

   对象锁定仅适用于受版本控制的存储桶。

1. （可选）在**标签**下，您可以选择向存储桶添加标签。标签是用于对存储进行分类和分配成本的键/值对。

1. 在**高级设置**下，找到**对象锁定**，然后选择**启用**。

   您必须确认，启用对象锁定将永久允许锁定此存储桶中的对象。

1. 选择**创建存储桶**。

### 使用 Amazon CLI
<a name="object-lock-new-bucket-cli"></a>

以下 `create-bucket` 示例创建了一个名为 `amzn-s3-demo-bucket1` 的新 S3 存储桶，该存储桶启用了对象锁定：

```
aws s3api create-bucket --bucket amzn-s3-demo-bucket1 --object-lock-enabled-for-bucket
```

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

**注意**  
您可以从控制台中使用 Amazon CloudShell 运行 Amazon CLI 命令。Amazon CloudShell 是一个基于浏览器、经过预验证的 Shell，您可以直接从Amazon Web Services 管理控制台中启动它。有关更多信息，请参阅《Amazon CloudShell 用户指南》**中的[什么是 CloudShell？](https://docs.amazonaws.cn/cloudshell/latest/userguide/welcome.html)

### 使用 REST API
<a name="object-lock-new-bucket-rest"></a>

您可以使用 REST API 创建一个启用了对象锁定的新 S3 存储桶。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_CreateBucket.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_CreateBucket.html)。

### 使用 Amazon SDK
<a name="object-lock-new-bucket-sdk"></a>

有关在使用 Amazon SDK 创建新的 S3 存储桶时如何启用对象锁定的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_LCreateBucket_section.html)。

有关如何使用 Amazon SDK 获取当前对象锁定配置的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_GetObjectLockConfiguration_section.html)。

有关使用 Amazon SDK 演示不同对象锁定功能的交互式场景，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_Scenario_ObjectLock_section.html)。

有关使用不同 Amazon SDK 的一般信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the Amazon SDKs](https://docs.amazonaws.cn/AmazonS3/latest/API/sdk-general-information-section.html)。

## 在现有 S3 存储桶上启用对象锁定
<a name="object-lock-configure-existing-bucket"></a>

您可以使用 Amazon S3 控制台、Amazon CLI、Amazon SDK 或 Amazon S3 REST API 为现有 S3 存储桶启用对象锁定。

### 使用 S3 控制台
<a name="object-lock-existing-bucket-console"></a>

**注意**  
对象锁定仅适用于受版本控制的存储桶。

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

1. 在左侧导航窗格中，选择**存储桶**。

1. 在**存储桶**列表中，选择要为其启用对象锁定的存储桶的名称。

1. 选择**属性**选项卡。

1. 在**属性**下，向下滚动到**对象锁定**部分，然后选择**编辑**。

1. 在**对象锁定**下，选择**启用**。

   您必须确认，启用对象锁定将永久允许锁定此存储桶中的对象。

1. 选择 **Save changes（保存更改）**。



### 使用 Amazon CLI
<a name="object-lock-existing-bucket-cli"></a>

以下 `put-object-lock-configuration` 示例命令在名为 `amzn-s3-demo-bucket1` 的存储桶上设置 50 天的对象锁定保留期：

```
aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket1 --object-lock-configuration='{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 50 }}}'
```

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

**注意**  
您可以从控制台中使用 Amazon CloudShell 运行 Amazon CLI 命令。Amazon CloudShell 是一个基于浏览器、经过预验证的 Shell，您可以直接从Amazon Web Services 管理控制台中启动它。有关更多信息，请参阅《Amazon CloudShell 用户指南》**中的[什么是 CloudShell？](https://docs.amazonaws.cn/cloudshell/latest/userguide/welcome.html)

### 使用 REST API
<a name="object-lock-existing-bucket-rest"></a>

您可以使用 Amazon S3 REST API 在现有 S3 存储桶上启用对象锁定。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLockConfiguration.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLockConfiguration.html)。

### 使用 Amazon SDK
<a name="object-lock-existing-bucket-sdk"></a>

有关如何使用 Amazon SDK 为现有 S3 存储桶启用对象锁定的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_PutObjectLockConfiguration_section.html)。

有关如何使用 Amazon SDK 获取当前对象锁定配置的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_GetObjectLockConfiguration_section.html)。

有关使用 Amazon SDK 演示不同对象锁定功能的交互式场景，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_Scenario_ObjectLock_section.html)。

有关使用不同 Amazon SDK 的一般信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the Amazon SDKs](https://docs.amazonaws.cn/AmazonS3/latest/API/sdk-general-information-section.html)。

## 设置或修改 S3 对象的依法保留
<a name="object-lock-configure-set-legal-hold"></a>

您可以使用 Amazon S3 控制台、Amazon CLI、Amazon SDK 或 Amazon S3 REST API 设置或移除 S3 对象的依法保留。

**重要**  
如果要对一个对象设置依法保留，则该对象的存储桶必须已启用对象锁定。
当您在存储桶中 `PUT` 具有明确的单独保留模式和期限的对象版本时，该对象版本的单独对象锁定设置会覆盖所有存储桶属性保留设置。

有关更多信息，请参阅 [法定保留](object-lock.md#object-lock-legal-holds)。

### 使用 S3 控制台
<a name="object-lock-set-legal-hold-console"></a>

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

1. 在左侧导航窗格中，选择**存储桶**。

1. 在**存储桶**列表中，选择包含要设置或修改其依法保留的对象的存储桶名称。

1. 在**对象**列表中，选择要设置或修改其依法保留的对象。

1. 在**对象属性**页面上，找到**对象锁定依法保留**部分，然后选择**编辑**。

1. 选择**启用**以设置依法保留，或选择**禁用**以移除依法保留。

1. 选择 **Save changes（保存更改）**。

### 使用 Amazon CLI
<a name="object-lock-set-legal-hold-cli"></a>

以下 `put-object-legal-hold` 示例为名为 `amzn-s3-demo-bucket1` 的存储桶中的对象 *`my-image.fs`* 设置了依法保留：

```
aws s3api put-object-legal-hold --bucket amzn-s3-demo-bucket1 --key my-image.fs --legal-hold="Status=ON"
```

以下 `put-object-legal-hold` 示例为名为 `amzn-s3-demo-bucket1` 的存储桶中的对象 *`my-image.fs`* 移除了依法保留：

```
aws s3api put-object-legal-hold --bucket amzn-s3-demo-bucket1 --key my-image.fs --legal-hold="Status=OFF"
```

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

**注意**  
您可以从控制台中使用 Amazon CloudShell 运行 Amazon CLI 命令。Amazon CloudShell 是一个基于浏览器、经过预验证的 Shell，您可以直接从Amazon Web Services 管理控制台中启动它。有关更多信息，请参阅《Amazon CloudShell 用户指南》**中的[什么是 CloudShell？](https://docs.amazonaws.cn/cloudshell/latest/userguide/welcome.html)

### 使用 REST API
<a name="object-lock-set-legal-hold-rest"></a>

您可以使用 REST API 设置或修改对象的依法保留。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLegalHold.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLegalHold.html)。

### 使用 Amazon SDK
<a name="object-lock-set-legal-hold-sdk"></a>

有关如何使用 Amazon SDK 为对象设置法定保留的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_PutObjectLegalHold_section.html)。

有关如何使用 Amazon SDK 获取当前法定保留状态的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_GetObjectLegalHoldConfiguration_section.html)。

有关使用 Amazon SDK 演示不同对象锁定功能的交互式场景，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_Scenario_ObjectLock_section.html)。

有关使用不同 Amazon SDK 的一般信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the Amazon SDKs](https://docs.amazonaws.cn/AmazonS3/latest/API/sdk-general-information-section.html)。

## 设置或修改 S3 对象的保留期
<a name="object-lock-configure-set-retention-period-object"></a>

您可以使用 Amazon S3 控制台、Amazon CLI、Amazon SDK 或 Amazon S3 REST API 设置或修改 S3 对象的保留期。

**重要**  
如果要对一个对象设置保留期，则该对象的存储桶必须已启用对象锁定。
当您在存储桶中 `PUT` 具有明确的单独保留模式和期限的对象版本时，该对象版本的单独对象锁定设置会覆盖所有存储桶属性保留设置。
在合规模式下，要想在保留日期到期前删除对象，唯一的方法就是删除相关的 Amazon Web Services 账户。

有关更多信息，请参阅 [保留期限](object-lock.md#object-lock-retention-periods)。

### 使用 S3 控制台
<a name="object-lock-set-retention-period-console"></a>

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

1. 在左侧导航窗格中，选择**存储桶**。

1. 在**存储桶**列表中，选择包含要设置或修改其保留期的对象的存储桶名称。

1. 在**对象**列表中，选择要设置或修改其保留期的对象。

1. 在**对象属性**页面上，找到**对象锁定保留**部分，然后选择**编辑**。

1. 在**保留**下，选择**启用**以设置保留期，或者选择**禁用**以删除保留期。

1. 如果选择**启用**，请在**保留模式**下选择**治理模式**或**合规模式**。有关更多信息，请参阅 [保留模式](object-lock.md#object-lock-retention-modes)。

1. 在**保留截止日期**下，选择您希望保留期结束的日期。在该时间段内，您的对象将受 WORM 保护，不能被覆盖或删除。有关更多信息，请参阅 [保留期限](object-lock.md#object-lock-retention-periods)。

1. 选择 **Save changes（保存更改）**。

### 使用 Amazon CLI
<a name="object-lock-set-retention-period-cli"></a>

以下 `put-object-retention` 示例将名为 `amzn-s3-demo-bucket1` 的存储桶中对象 *`my-image.fs`* 的保留期限设置为 2025 年 1 月 1 日：

```
aws s3api put-object-retention --bucket amzn-s3-demo-bucket1 --key my-image.fs --retention='{ "Mode": "GOVERNANCE", "RetainUntilDate": "2025-01-01T00:00:00" }'
```

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

**注意**  
您可以从控制台中使用 Amazon CloudShell 运行 Amazon CLI 命令。Amazon CloudShell 是一个基于浏览器、经过预验证的 Shell，您可以直接从Amazon Web Services 管理控制台中启动它。有关更多信息，请参阅《Amazon CloudShell 用户指南》**中的[什么是 CloudShell？](https://docs.amazonaws.cn/cloudshell/latest/userguide/welcome.html)

### 使用 REST API
<a name="object-lock-set-retention-period-rest"></a>

您可以使用 REST API 设置对象的保留期。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectRetention.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectRetention.html)。

### 使用 Amazon SDK
<a name="object-lock-set-retention-period-sdk"></a>

有关如何使用 Amazon SDK 为对象设置保留期的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_PutObjectRetention_section.html)。

有关如何使用 Amazon SDK 获取对象保留期的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_GetObjectLockConfiguration_section.html)。

有关使用 Amazon SDK 演示不同对象锁定功能的交互式场景，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_GetObjectLockConfiguration_section.html)。

有关使用不同 Amazon SDK 的一般信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the Amazon SDKs](https://docs.amazonaws.cn/AmazonS3/latest/API/sdk-general-information-section.html)。

## 设置或修改 S3 存储桶的默认保留期
<a name="object-lock-configure-set-retention-period-bucket"></a>

您可以使用 Amazon S3 控制台、Amazon CLI、Amazon SDK 或 Amazon S3 REST API 设置或修改 S3 存储桶的默认保留期。您可以指定放入存储桶中的每个对象版本受保护的持续时间，以天或年为单位。

**重要**  
如果要为某个存储桶设置默认保留期，则该存储桶必须已启用对象锁定。
当您在存储桶中 `PUT` 具有明确的单独保留模式和期限的对象版本时，该对象版本的单独对象锁定设置会覆盖所有存储桶属性保留设置。
在合规模式下，要想在保留日期到期前删除对象，唯一的方法就是删除相关的 Amazon Web Services 账户。

有关更多信息，请参阅 [保留期限](object-lock.md#object-lock-retention-periods)。

### 使用 S3 控制台
<a name="object-lock-set-retention-period-bucket-console"></a>

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

1. 在左侧导航窗格中，选择**存储桶**。

1. 在**存储桶**列表中，选择要设置或修改其默认保留期的存储桶的名称。

1. 选择**属性**选项卡。

1. 在**属性**下，向下滚动到**对象锁定**部分，然后选择**编辑**。

1. 在**默认保留期**下，选择**启用**以设置默认保留期，或者选择**禁用**以删除默认保留期。

1. 如果选择**启用**，请在**保留模式**下选择**治理模式**或**合规模式**。有关更多信息，请参阅 [保留模式](object-lock.md#object-lock-retention-modes)。

1. 在**默认保留期**下，选择您希望保留期持续的天数或年数。放置在此存储桶中的对象将在此天数或年数内被锁定。有关更多信息，请参阅 [保留期限](object-lock.md#object-lock-retention-periods)。

1. 选择 **Save changes（保存更改）**。

### 使用 Amazon CLI
<a name="object-lock-configure-set-retention-period-bucket-cli"></a>

以下 `put-object-lock-configuration` 示例命令使用合规模式在名为 `amzn-s3-demo-bucket1` 的存储桶上设置 50 天的对象锁定保留期：

```
aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket1 --object-lock-configuration='{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 50 }}}'
```

以下 `put-object-lock-configuration` 示例删除了存储桶上的默认保留配置：

```
aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket1 --object-lock-configuration='{ "ObjectLockEnabled": "Enabled"}'
```

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

**注意**  
您可以从控制台中使用 Amazon CloudShell 运行 Amazon CLI 命令。Amazon CloudShell 是一个基于浏览器、经过预验证的 Shell，您可以直接从Amazon Web Services 管理控制台中启动它。有关更多信息，请参阅《Amazon CloudShell 用户指南》**中的[什么是 CloudShell？](https://docs.amazonaws.cn/cloudshell/latest/userguide/welcome.html)

### 使用 REST API
<a name="object-lock-configure-set-retention-period-bucket-rest"></a>

您可以使用 REST API 在现有的 S3 存储桶上设置默认保留期。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLockConfiguration.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObjectLockConfiguration.html)。

### 使用 Amazon SDK
<a name="object-lock-configure-set-retention-period-bucket-sdk"></a>

有关如何使用 Amazon SDK 在现有 S3 存储桶上设置默认保留期的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_PutObjectLockConfiguration_section.html)。

有关使用 Amazon SDK 演示不同对象锁定功能的交互式场景，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_Scenario_ObjectLock_section.html)。

有关使用不同 Amazon SDK 的一般信息，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the Amazon SDKs](https://docs.amazonaws.cn/AmazonS3/latest/API/sdk-general-information-section.html)。