使用 S3 REST API 配置 S3 对象锁
如果您的StorageGRID系统启用了全局 S3 对象锁定设置,则可以创建启用了 S3 对象锁定的存储桶。您可以为每个存储桶指定默认保留或为每个对象版本指定保留设置。
如何为存储桶启用 S3 对象锁定
如果您的StorageGRID系统启用了全局 S3 对象锁定设置,则可以在创建每个存储桶时选择启用 S3 对象锁定。
S3 对象锁定是一个永久设置,只有在创建存储桶时才能启用。创建存储桶后,您无法添加或禁用 S3 对象锁定。
要为存储桶启用 S3 对象锁定,请使用以下任一方法:
-
使用租户管理器创建存储桶。看"创建 S3 存储桶" 。
-
使用 CreateBucket 请求创建存储桶 `x-amz-bucket-object-lock-enabled`请求标头。看"对 bucket 的操作" 。
S3 对象锁需要存储桶版本控制,该功能在创建存储桶时自动启用。您无法暂停存储桶的版本控制。看"对象版本控制" 。
存储桶的默认保留设置
当为存储桶启用 S3 对象锁定时,您可以选择为存储桶启用默认保留,并指定默认保留模式和默认保留期。
默认保留模式
-
在合规模式下:
-
在达到保留截止日期之前,无法删除该对象。
-
对象的保留截止日期可以增加,但不能减少。
-
在达到该日期之前,不能删除对象的保留截止日期。
-
-
在治理模式下:
-
用户 `s3:BypassGovernanceRetention`许可可以使用 `x-amz-bypass-governance-retention: true`请求标头以绕过保留设置。
-
这些用户可以在达到保留截止日期之前删除对象版本。
-
这些用户可以增加、减少或删除对象的保留期限。
-
默认保留期
每个存储桶可以具有以年或天为单位指定的默认保留期。
如何设置存储桶的默认保留
要设置存储桶的默认保留,请使用以下任一方法:
-
从租户管理器管理存储桶设置。看"创建 S3 存储桶"和"更新 S3 对象锁默认保留"。
-
针对存储桶发出 PutObjectLockConfiguration 请求,指定默认模式和默认天数或年数。
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 模式下,如果保留截止日期是将来,则可以检索对象,但不能修改或删除它。保留截止日期可以增加,但不能减少或删除。
-
在治理模式下,具有特殊权限的用户可以绕过保留截止日期设置。他们可以在保留期结束之前删除对象版本。他们还可以增加、减少甚至删除保留截止日期。
-
-
合法保留:对对象版本应用合法保留会立即锁定该对象。例如,您可能需要对与调查或法律纠纷相关的对象实施法律保留。合法保留没有到期日,但会一直有效,直到被明确取消。
对象的合法保留设置与保留模式和保留截止日期无关。如果对象版本处于合法保留状态,则任何人都无法删除该版本。
您可以使用以下内容:
-
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-mode
,x-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 操作以增加、减少或删除对象版本的保留期。