Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

使用 S3 REST API 配置 S3 对象锁

如果您的StorageGRID系统启用了全局 S3 对象锁定设置,则可以创建启用了 S3 对象锁定的存储桶。您可以为每个存储桶指定默认保留或为每个对象版本指定保留设置。

如何为存储桶启用 S3 对象锁定

如果您的StorageGRID系统启用了全局 S3 对象锁定设置,则可以在创建每个存储桶时选择启用 S3 对象锁定。

S3 对象锁定是一个永久设置,只有在创建存储桶时才能启用。创建存储桶后,您无法添加或禁用 S3 对象锁定。

要为存储桶启用 S3 对象锁定,请使用以下任一方法:

S3 对象锁需要存储桶版本控制,该功能在创建存储桶时自动启用。您无法暂停存储桶的版本控制。看"对象版本控制"

存储桶的默认保留设置

当为存储桶启用 S3 对象锁定时,您可以选择为存储桶启用默认保留,并指定默认保留模式和默认保留期。

默认保留模式

  • 在合规模式下:

    • 在达到保留截止日期之前,无法删除该对象。

    • 对象的保留截止日期可以增加,但不能减少。

    • 在达到该日期之前,不能删除对象的保留截止日期。

  • 在治理模式下:

    • 用户 `s3:BypassGovernanceRetention`许可可以使用 `x-amz-bypass-governance-retention: true`请求标头以绕过保留设置。

    • 这些用户可以在达到保留截止日期之前删除对象版本。

    • 这些用户可以增加、减少或删除对象的保留期限。

默认保留期

每个存储桶可以具有以年或天为单位指定的默认保留期。

如何设置存储桶的默认保留

要设置存储桶的默认保留,请使用以下任一方法:

PutObjectLock配置

PutObjectLockConfiguration 请求允许您设置和修改已启用 S3 对象锁的存储桶的默认保留模式和默认保留期。您还可以删除之前配置的默认保留设置。

当新的对象版本被提取到存储桶时,如果 `x-amz-object-lock-mode`和 `x-amz-object-lock-retain-until-date`未指定。如果 `x-amz-object-lock-retain-until-date`未指定。

如果在摄取对象版本后修改了默认保留期,则对象版本的保留截止日期保持不变,并且不会使用新的默认保留期重新计算。

你必须拥有 `s3:PutBucketObjectLockConfiguration`权限,或者成为帐户 root,即可完成此操作。

这 `Content-MD5`必须在 PUT 请求中指定请求标头。

请求示例

此示例为存储桶启用 S3 对象锁定,并将默认保留模式设置为 COMPLIANCE,将默认保留期设置为 6 年。

PUT /bucket?object-lock HTTP/1.1
Accept-Encoding: identity
Content-Length: 308
Host: host
Content-MD5: request header
User-Agent: s3sign/1.0.0 requests/2.24.0 python/3.8.2
X-Amz-Date: date
X-Amz-Content-SHA256: authorization-string
Authorization: authorization-string

<ObjectLockConfiguration>
    <ObjectLockEnabled>Enabled</ObjectLockEnabled>
    <Rule>
        <DefaultRetention>
            <Mode>COMPLIANCE</Mode>
            <Years>6</Years>
        </DefaultRetention>
    </Rule>
</ObjectLockConfiguration>

如何确定存储桶的默认保留时间

要确定存储桶是否启用了 S3 对象锁定并查看默认保留模式和保留期,请使用以下任一方法:

  • 在租户管理器中查看存储桶。看"查看 S3 存储桶"

  • 发出 GetObjectLockConfiguration 请求。

获取对象锁配置

GetObjectLockConfiguration 请求允许您确定是否为存储桶启用了 S3 对象锁,如果启用,则查看是否为存储桶配置了默认保留模式和保留期。

当新的对象版本被提取到存储桶时,如果 `x-amz-object-lock-mode`未指定。如果 `x-amz-object-lock-retain-until-date`未指定。

你必须拥有 `s3:GetBucketObjectLockConfiguration`权限,或者成为帐户 root,即可完成此操作。

请求示例

GET /bucket?object-lock HTTP/1.1
Host: host
Accept-Encoding: identity
User-Agent: aws-cli/1.18.106 Python/3.8.2 Linux/4.4.0-18362-Microsoft botocore/1.17.29
x-amz-date: date
x-amz-content-sha256: authorization-string
Authorization: authorization-string

响应示例

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIXk=
x-amz-request-id: B34E94CACB2CEF6D
Date: Fri, 04 Sep 2020 22:47:09 GMT
Transfer-Encoding: chunked
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <ObjectLockEnabled>Enabled</ObjectLockEnabled>
    <Rule>
        <DefaultRetention>
            <Mode>COMPLIANCE</Mode>
            <Years>6</Years>
        </DefaultRetention>
    </Rule>
</ObjectLockConfiguration>

如何指定对象的保留设置

启用了 S3 对象锁的存储桶可以包含具有和不具有 S3 对象锁保留设置的对象的组合。

使用 S3 REST API 指定对象级保留设置。对象的保留设置会覆盖存储桶的任何默认保留设置。

您可以为每个对象指定以下设置:

  • 保留模式:合规或治理。

  • Retain-until-date:指定StorageGRID必须保留对象版本多长时间的日期。

    • 在 COMPLIANCE 模式下,如果保留截止日期是将来,则可以检索对象,但不能修改或删除它。保留截止日期可以增加,但不能减少或删除。

    • 在治理模式下,具有特殊权限的用户可以绕过保留截止日期设置。他们可以在保留期结束之前删除对象版本。他们还可以增加、减少甚至删除保留截止日期。

  • 合法保留:对对象版本应用合法保留会立即锁定该对象。例如,您可能需要对与调查或法律纠纷相关的对象实施法律保留。合法保留没有到期日,但会一直有效,直到被明确取消。

    对象的合法保留设置与保留模式和保留截止日期无关。如果对象版本处于合法保留状态,则任何人都无法删除该版本。

要在将对象版本添加到存储桶时指定 S3 对象锁定设置,请发出"放置对象""复制对象" , 或者"创建多部分上传"要求。

您可以使用以下内容:

  • x-amz-object-lock-mode,可以是 COMPLIANCE 或 GOVERNANCE(区分大小写)。

    备注 如果您指定 x-amz-object-lock-mode,您还必须指定 x-amz-object-lock-retain-until-date
  • x-amz-object-lock-retain-until-date

    • 保留截止日期值必须采用以下格式 2020-08-10T21:46:00Z。允许使用小数秒,但仅保留 3 位小数(毫秒精度)。不允许使用其他 ISO 8601 格式。

    • 保留截止日期必须是将来的日期。

  • x-amz-object-lock-legal-hold

    如果合法保留处于开启状态(区分大小写),则该对象将被置于合法保留之下。如果合法保留处于关闭状态,则不会设置合法保留。任何其他值都会导致 400 Bad Request (InvalidArgument) 错误。

如果您使用以下任何请求标头,请注意以下限制:

  • 这 `Content-MD5`请求标头(如果有) `x-amz-object-lock-*`请求标头存在于 PutObject 请求中。 `Content-MD5`对于 CopyObject 或 CreateMultipartUpload 来说不是必需的。

  • 如果存储桶未启用 S3 对象锁定,并且 `x-amz-object-lock-*`请求标头存在,则返回 400 错误请求(InvalidRequest)错误。

  • PutObject 请求支持使用 `x-amz-storage-class: REDUCED_REDUNDANCY`以匹配 AWS 行为。但是,当将对象提取到启用了 S3 对象锁的存储桶中时, StorageGRID将始终执行双重提交提取。

  • 后续的 GET 或 HeadObject 版本响应将包含标头 x-amz-object-lock-modex-amz-object-lock-retain-until-date , 和 x-amz-object-lock-legal-hold,如果配置并且请求发送者有正确的 `s3:Get*`权限。

您可以使用 `s3:object-lock-remaining-retention-days`策略条件键用于限制对象的最小和最大允许保留期。

如何更新对象的保留设置

如果需要更新现有对象版本的合法保留或保留设置,您可以执行以下对象子资源操作:

  • PutObjectLegalHold

    如果新的合法保留值为 ON,则该对象将被置于合法保留之下。如果合法保留值为 OFF,则解除合法保留。

  • PutObjectRetention

    • 模式值可以是 COMPLIANCE 或 GOVERNANCE(区分大小写)。

    • 保留截止日期值必须采用以下格式 2020-08-10T21:46:00Z。允许使用小数秒,但仅保留 3 位小数(毫秒精度)。不允许使用其他 ISO 8601 格式。

    • 如果对象版本具有现有的保留截止日期,则只能增加它。新值必须是未来的值。

如何使用治理模式

拥有 `s3:BypassGovernanceRetention`权限可以绕过使用治理模式的对象的活动保留设置。任何 DELETE 或 PutObjectRetention 操作都必须包括 `x-amz-bypass-governance-retention:true`请求标头。这些用户可以执行以下附加操作:

  • 执行 DeleteObject 或 DeleteObjects 操作,在对象版本的保留期结束之前删除该对象版本。

    处于合法保留状态的对象无法被删除。必须关闭合法保留。

  • 在对象的保留期结束之前,执行 PutObjectRetention 操作,将对象版本的模式从 GOVERNANCE 更改为 COMPLIANCE。

    绝不允许将模式从合规性更改为治理性。

  • 执行 PutObjectRetention 操作以增加、减少或删除对象版本的保留期。