

# 使用对象锁定以锁定对象
<a name="object-lock"></a>

​S3 对象锁定可以协助在固定的时间长度内或无限期地阻止删除或覆盖 Amazon S3 对象。对象锁定使用*一次写入多次读取*（WORM）模式存储对象。您可以使用对象锁定来协助满足需要 WORM 存储的法规要求，或用于添加额外的保护层来防止对象被更改和删除。

**注意**  
S3 对象锁定已由 Cohasset Associates 评估，可在受 SEC 17a-4、CFTC 和 FINRA 法规约束的环境中使用。有关对象锁定与这些法规关系的更多信息，请参阅 [Cohasset Associates 合规性评估](https://d1.awsstatic.com/r2018/b/S3-Object-Lock/Amazon-S3-Compliance-Assessment.pdf)。

对象锁定提供了以下两种方式来管理对象保留：*保留期限*和*依法保留*。对象版本可以同时具有保留期限和/或依法保留。
+ **保留期**：保留期指定对象版本可以保持锁定状态的固定时间长度。您可以为各个对象设置唯一的保留期。此外，您可以在 S3 存储桶上设置默认保留期。您还可以在桶策略中使用 `s3:object-lock-remaining-retention-days` 条件键限制允许的最小和最大保留期。此条件键有助于您确定可支持的保留期。有关更多信息，请参阅[使用存储桶策略为保留期限设置限制](https://docs.amazonaws.cn/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-retention-limits)。
+ **依法保留** – 依法保留提供的保护与保留期限相同，但没有到期日期。依法保留将一直有效，直至您明确将其删除。法定保留与保留期无关，且应该对单独的对象目标应用。

对象锁定仅在启用 S3 版本控制的存储桶中生效。当您锁定某一对象版本时，Amazon S3 会将锁定信息存储在该对象版本的元数据中。在对象上实施保留期限或依法保留仅保护在请求中指定的版本。保留期和法定保留不会阻止创建对象的新版本，也不会阻止在对象顶部添加删除标记。有关 S3 版本控制的信息，请参阅[使用 S3 版本控制保留对象的多个版本](Versioning.md)。

如果您将一个对象放入存储桶中，而存储桶中包含的现有受保护对象与其具有相同的对象键名，Amazon S3 将创建对象的新版本。现有受保护版本的对象将根据其保留配置保持锁定状态。

## S3 对象锁定的工作原理
<a name="object-lock-overview"></a>

**Topics**
+ [

### 保留期限
](#object-lock-retention-periods)
+ [

### 保留模式
](#object-lock-retention-modes)
+ [

### 法定保留
](#object-lock-legal-holds)
+ [

### 删除如何处理 S3 对象锁定
](#object-lock-how-deletes-work)
+ [

### 使用 S3 对象锁定的最佳实践
](#object-lock-best-practices)
+ [

### 所需的权限
](#object-lock-permissions)

### 保留期限
<a name="object-lock-retention-periods"></a>

*保留期限*可在固定时间内保护对象版本。当您对对象版本施加保留期限时，Amazon S3 会在该对象版本的元数据中存储时间戳，以指示保留期限的到期时间。在保留期限到期后，便可覆盖或删除对象版本。

您可以对单独对象版本或在存储桶属性上明确设置保留期限，以便它自动应用于存储桶中的所有对象。将保留期显式应用于对象版本时，即为对象版本指定*保留到期日期*。Amazon S3 将此日期存储在对象版本的元数据中。

您还可以在存储桶的属性中设置保留期限。在存储存储桶上设置保留期限时，您可以指定放入存储桶中的每个对象版本受保护的持续时间，以天或年为单位。当您将对象放入存储桶时，Amazon S3 将该对象版本的创建时间戳加上指定的持续时间，以此来计算*保留到期日*。然后，在您对该对象版本明确应用的单独锁定保留期限内，对象版本将受到保护。

**注意**  
当您在存储桶中 `PUT` 具有明确的单独保留模式和期限的对象版本时，该对象版本的单独对象锁定设置会覆盖所有存储桶属性保留设置。

与所有其他对象锁定设置一样，保留期限适用于各个对象版本。单个对象的不同版本可以具有不同的保留模式和周期。

例如，如果您将 15 天的对象放入 30 天保留期限，并将一个保留期限为 60 天的同名对象 `PUT` 到 Amazon S3 中。在这种情况下，您的 `PUT` 请求将成功，Amazon S3 将创建一个保留期限为 60 天的新对象版本。较旧版本将保持其原来的保留期限，并且可在 15 天内删除。

在某个对象版本上应用了保留设置后，您可以延长保留期限。要执行此操作，您需对该对象版本提交新对象锁定请求，其*保留到期日*晚于当前为该对象版本配置的保留到期日期。Amazon S3 将用更长的新期限替换现有的保留期限。任何用户只要具有实施对象保留期限的权限，即可对象版本的保留期限。要设置保留期限，您必须具有 `s3:PutObjectRetention` 权限。

在对象或 S3 存储桶上设置保留权期限时，您必须选择两种保留模式之一：*合规性*或*监管*。

### 保留模式
<a name="object-lock-retention-modes"></a>

S3 对象锁定提供了两种保留模式，可为对象应用不同级别的保护：
+ 合规性模式
+ 监管模式

在*合规性*模式中，任何用户都不能覆盖或删除受保护的对象版本，包括 Amazon Web Services 账户中的根用户。在合规性模式下锁定对象后，其保留模式便无法更改，其保留期限也不能缩短。合规性模式可帮助确保在保留期限内无法覆盖或删除对象版本。

**注意**  
在合规模式下，要想在保留日期到期前删除对象，唯一的方法就是删除相关的 Amazon Web Services 账户。

在*监管* 模式中，除非用户具有特殊权限，否则用户不能覆盖或删除对象版本，或更改其锁定设置。使用监管模式，您可以保护对象以免被大多数用户删除，但您仍可向部分用户授予权限，以在必要时更改保留设置或删除对象。您还可以在创建合规性模式保留期限之前使用监管模式测试保留期限设置。

要覆盖或删除监管模式保留设置，您必须具有 `s3:BypassGovernanceRetention` 权限，并且在需要覆盖监管模式的任何请求中，必须明确包含 `x-amz-bypass-governance-retention:true` 作为请求标头。

**注意**  
默认情况下，Amazon S3 控制台包括 `x-amz-bypass-governance-retention:true` 标头。如果您尝试删除受*监管*模式保护的对象并且拥有 `s3:BypassGovernanceRetention` 权限，则操作将会成功。

### 法定保留
<a name="object-lock-legal-holds"></a>

使用对象锁定，您还可以在对象版本上实施*依法保留*。与保留期限相似，依法保留可防止对象版本被覆盖或删除。但是，依法保留没有关联的固定时间长度，会一直有效，直至删除。拥有 `s3:PutObjectLegalHold` 权限的任何用户均可自由实施和删除依法保留。

依法保留与保留期限无关。对对象版本实施依法保留不会影响该对象版本的保留模式或保留期限。

例如，假设您对某一对象版本实施依法保留，同时该对象版本也受保留期限保护。如果保留期限过期，该对象不会失去其 WORM 保护。那么依法保留将继续保护该对象，直至授权用户明确删除依法保留对象。与之相似，如果您在对象版本的保留期限生效时删除依法保留，该对象版本将一直受保护，直至保留期限过期。

### 删除如何处理 S3 对象锁定
<a name="object-lock-how-deletes-work"></a>

如果存储桶启用了 S3 对象锁定，并且该对象受保留期或法定保留的保护，而您尝试删除某个对象，则 Amazon S3 会返回以下响应之一，具体取决于您尝试删除该对象的方式：
+ **永久 `DELETE` 请求**：如果您发出了永久 `DELETE` 请求（指定版本 ID 的请求），则当您尝试删除对象时，Amazon S3 会返回拒绝访问 (`403 Forbidden`) 错误。有关排查与对象锁定有关的拒绝访问错误的更多信息，请参阅 [S3 对象锁定设置](troubleshoot-403-errors.md#troubleshoot-403-object-lock)。
+ **简单 `DELETE` 请求**：如果您发出了简单 `DELETE` 请求（未指定版本 ID 的请求），Amazon S3 将返回 `200 OK` 响应并在存储桶中插入[删除标记](DeleteMarker.md)，该标记将成为具有新 ID 的对象的当前版本。有关管理具有对象锁定的删除标记的更多信息，请参阅[使用对象锁定管理删除标记](object-lock-managing.md#object-lock-managing-delete-markers)。

### 使用 S3 对象锁定的最佳实践
<a name="object-lock-best-practices"></a>

如果您想保护对象在预定义的保留期内不被大多数用户删除，但同时又希望一些具有特殊权限的用户能够灵活地更改保留设置或删除对象，请考虑使用*监管模式*。

如果您从不希望任何用户（包括您的 Amazon Web Services 账户中的根用户）能够在预定义的保留期内删除对象，请考虑使用*合规模式*。如果您需要存储合规数据，则可以使用此模式。

当您不确定要让对象保持不可变的时长时，可以使用*依法保留*。这可能是因为您即将对数据进行外部审计，并希望在审计完成之前保持对象不可变。或者，您可能有一个正在进行的项目，而您希望在项目完成之前，让该项目使用的数据集保持不变。

### 所需的权限
<a name="object-lock-permissions"></a>

对象锁定操作需要特定的权限。根据您正在尝试的确切操作，您可能需要以下任意权限：
+ `s3:BypassGovernanceRetention`
+ `s3:GetBucketObjectLockConfiguration`
+ `s3:GetObjectLegalHold`
+ `s3:GetObjectRetention`
+ `s3:PutBucketObjectLockConfiguration`
+ `s3:PutObjectLegalHold`
+ `s3:PutObjectRetention`

有关 Amazon S3 权限的完整列表及其描述，请参阅《Service Authorization Reference》**中的 [Actions, resources, and condition keys for Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html)。

有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

有关将条件与权限结合使用的信息，请参阅 [使用条件键的存储桶策略示例](amazon-s3-policy-keys.md)。

# 对象锁定注意事项
<a name="object-lock-managing"></a>

Amazon S3 ​对象锁定可以协助在固定的时间长度内或无限期地阻止删除或覆盖对象。

您可以使用 Amazon S3 控制台、Amazon Command Line Interface（Amazon CLI）、Amazon SDK 或 Amazon S3 REST API 来查看或设置对象锁定信息。有关 S3 对象锁定功能的一般信息，请参阅[使用对象锁定以锁定对象](object-lock.md)。

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

**Topics**
+ [

## 查看锁定信息的权限
](#object-lock-managing-view)
+ [

## 绕过监管模式
](#object-lock-managing-bypass)
+ [

## 将对象锁定与 S3 复制结合使用
](#object-lock-managing-replication)
+ [

## 将对象锁定与加密结合使用
](#object-lock-managing-encryption)
+ [

## 将对象锁定与 Amazon S3 清单结合使用
](#object-lock-inv-report)
+ [

## 使用对象锁定管理 S3 生命周期策略
](#object-lock-managing-lifecycle)
+ [

## 使用对象锁定管理删除标记
](#object-lock-managing-delete-markers)
+ [

## 将 S3 Storage Lens 存储分析功能与对象锁定结合
](#object-lock-storage-lens)
+ [

## 将对象上传到启用了对象锁定的桶
](#object-lock-put-object)
+ [

## 配置事件和通知
](#object-lock-managing-events)
+ [

## 使用存储桶策略为保留期限设置限制
](#object-lock-managing-retention-limits)

## 查看锁定信息的权限
<a name="object-lock-managing-view"></a>

您可以使用 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_HeadObject.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_HeadObject.html) 或 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_GetObject.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_GetObject.html) 操作，以编程方式查看 Amazon S3 对象版本的对象锁定状态。这两个操作都会返回指定对象版本的保留模式、保留到期日和依法保留状态。此外，您可以使用 S3 清单来查看 S3 存储桶中多个对象的对象锁定状态。

要查看对象版本的保留模式和保留期限，您必须拥有 `s3:GetObjectRetention` 权限。要查看对象版本的依法保留状态，您必须拥有 `s3:GetObjectLegalHold` 权限。要查看存储桶的默认保留配置，您必须具有 `s3:GetBucketObjectLockConfiguration` 权限。如果您对未启用 S3 对象锁定的存储桶请求对象锁定配置，则 Amazon S3 将返回错误。

## 绕过监管模式
<a name="object-lock-managing-bypass"></a>

如果您具有 `s3:BypassGovernanceRetention` 权限，则在对象未受保护时，您可对在监管模式下锁定的对象版本执行操作。这些操作包括删除对象版本、缩短保留期限，或者通过实施参数为空的新 `PutObjectRetention` 请求来删除对象锁定保留期限。

要绕过监管模式，您必须在请求中明确指明您要绕过此模式。为此，在 `PutObjectRetention` API 操作请求中包含 `x-amz-bypass-governance-retention:true` 标头，或将等效参数用于通过 Amazon CLI 或 Amazon SDK 发出的请求。如果您具有 `s3:BypassGovernanceRetention` 权限，则 S3 控制台会自动将此标头应用于通过 S3 控制台发出的请求。

**注意**  
绕过监管模式不会影响对象版本的依法保留状态。如果某个对象版本已启用依法保留，则依法保留将保持有效，并可阻止覆盖或删除该对象版本的请求。

## 将对象锁定与 S3 复制结合使用
<a name="object-lock-managing-replication"></a>

您可以将对象锁定与 S3 复制结合使用，以便跨 S3 存储桶，对锁定对象及其保留元数据启用自动异步复制。这意味着，对于复制的对象，Amazon S3 采用源存储桶的对象锁定配置。换句话说，如果源存储桶已启用对象锁定，则目标存储桶也必须启用对象锁定。如果将对象直接上传到目标存储桶（在 S3 复制之外），它将使用目标存储桶上设置的对象锁定。如果您使用复制功能，则*源存储桶*中的对象会被复制到*目标存储桶*。

要在启用了对象锁定的存储桶上设置复制功能，您可以使用 S3 控制台、Amazon CLI、Amazon S3 REST API 或 Amazon SDK。

**注意**  
要将对象锁定与复制功能结合使用，您必须在用于设置复制的 Amazon Identity and Access Management（IAM）角色中，授予对源 S3 存储桶的两项额外的权限。这两项额外的权限是 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。如果角色已有 `s3:Get*` 权限声明，则该声明已满足要求。有关更多信息，请参阅 [为实时复制设置权限](setting-repl-config-perm-overview.md)。  
有关 S3 复制的一般信息，请参阅[在区域内和跨区域复制对象](replication.md)。  
有关设置 S3 复制的示例，请参阅[配置实时复制的示例](replication-example-walkthroughs.md)。

## 将对象锁定与加密结合使用
<a name="object-lock-managing-encryption"></a>

默认情况下，Amazon S3 会对所有新对象进行加密。您可以对加密的对象使用对象锁定。有关更多信息，请参阅 [利用加密来保护数据](UsingEncryption.md)。

虽然对象锁定有助于防止删除或覆盖 Amazon S3 对象，但并不能防止加密密钥的访问权限丢失，也不能防止加密密钥遭删除。例如，如果您使用 Amazon KMS 服务器端加密为对象加密，而 Amazon KMS 密钥被删除，则对象可能会变得无法读取。

## 将对象锁定与 Amazon S3 清单结合使用
<a name="object-lock-inv-report"></a>

您可以配置 Amazon S3 清单，以便按预定的计划创建 S3 存储桶中对象的列表。对于您的对象，您可以将 Amazon S3 清单配置为包含以下对象锁定元数据：
+ 保留截止日
+ 保留模式
+ 依法保留状态

有关更多信息，请参阅 [使用 S3 清单对数据进行编目和分析](storage-inventory.md)。

## 使用对象锁定管理 S3 生命周期策略
<a name="object-lock-managing-lifecycle"></a>

对象生命周期管理配置将继续正常应用于受保护的对象，包括实施删除标记。但是，S3 生命周期过期策略无法删除对象的锁定版本。无论对象位于哪个存储类，以及在存储类之间的整个 S3 生命周期转换过程中，都将保持对象锁定。

有关管理对象生命周期的更多信息，请参阅[管理对象的生命周期](object-lifecycle-mgmt.md)。

## 使用对象锁定管理删除标记
<a name="object-lock-managing-delete-markers"></a>

尽管您无法删除受保护的对象版本，但您仍可为该对象创建删除标记。对对象实施删除标记不会删除对象或它的对象版本。但会使 Amazon S3 的行为方式在最大程度上与对象被删除时相似。有关更多信息，请参阅 [使用删除标记](DeleteMarker.md)。

**注意**  
无论基础对象中实施任何保留期限或依法保留，删除标记均不受 WORM 保护。

## 将 S3 Storage Lens 存储分析功能与对象锁定结合
<a name="object-lock-storage-lens"></a>

要查看启用对象锁定的存储字节数和对象计数的指标，您可以使用 Amazon S3 Storage Lens 存储统计管理工具。S3 Storage Lens 存储统计管理工具是一项云存储分析功能，您可以使用它在整个组织范围内了解对象存储的使用情况和活动。

有关更多信息，请参阅 [使用 S3 Storage Lens 存储统计管理工具保护您的数据](storage-lens-data-protection.md)。

要获得指标的完整列表，请参阅 [Amazon S3 Storage Lens 存储统计管理工具指标词汇表](storage_lens_metrics_glossary.md)。

## 将对象上传到启用了对象锁定的桶
<a name="object-lock-put-object"></a>

如果使用对象锁定为某个对象配置了保留期，则任何上传该对象的请求都需要 `Content-MD5` 或 `x-amz-sdk-checksum-algorithm` 标头。这些标头是在上传过程中验证对象完整性的一种方式。

使用 Amazon S3 控制台上传对象时，S3 会自动添加 `Content-MD5` 标头。可以选择通过控制台指定额外的校验和函数和校验和值作为 `x-amz-sdk-checksum-algorithm` 标头。如果您使用 [PutObject](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObject.html) API，则必须指定 `Content-MD5` 标头、`x-amz-sdk-checksum-algorithm` 标头或两者来配置对象锁定保留期。

有关更多信息，请参阅 [在 Amazon S3 中检查对象完整性](checking-object-integrity.md)。

## 配置事件和通知
<a name="object-lock-managing-events"></a>

您可以使用 Amazon S3 事件通知，通过 Amazon CloudTrail 跟踪在对象锁定配置及数据上进行的访问和更改。有关 CloudTrail 的信息，请参阅《Amazon CloudTrail 用户指南》**中的[什么是 Amazon CloudTrail？](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)

您还可以使用 Amazon CloudWatch 根据此数据生成警报。有关 CloudWatch 的信息，请参阅《Amazon CloudWatch 用户指南》**中的[什么是 Amazon CloudWatch？](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)

## 使用存储桶策略为保留期限设置限制
<a name="object-lock-managing-retention-limits"></a>

您可以使用存储桶策略为存储桶设置允许的最小和最大保留期限。最长保留周期为 100 年。

以下示例显示一个存储桶策略，它使用 `s3:object-lock-remaining-retention-days` 条件键将最长保留期限设置为 10 天。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "SetRetentionLimits",
    "Statement": [
        {
            "Sid": "SetRetentionPeriod",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:PutObjectRetention"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "NumericGreaterThan": {
                    "s3:object-lock-remaining-retention-days": "10"
                }
            }
        }
    ]
}
```

------

**注意**  
如果您的存储桶是复制配置的目标存储桶，则对于通过使用复制功能创建的对象副本，您可以设置允许的最小和最大保留期限。为此，您必须在存储桶策略中允许 `s3:ReplicateObject` 操作。有关复制权限的更多信息，请参阅[为实时复制设置权限](setting-repl-config-perm-overview.md)。

有关存储桶的更多信息，请参阅以下主题：
+ 《Service Authorization Reference》**中的 [Actions, resources, and condition keys for Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html)。

  有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。
+ [对象操作](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects)
+ [使用条件键的存储桶策略示例](amazon-s3-policy-keys.md)

# 配置 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)。