PUT 对象—复制
您可以使用 S3 PUT 对象 - 复制请求为已存储在 S3 中的对象创建副本。PUT 对象 - 复制操作与执行 GET ,然后执行 PUT 操作相同。
解决冲突
冲突的客户端请求(例如、两个客户端写入同一密钥)将按"`latest-WINS`"的原则进行解决。"`latest-WINS`"评估的时间取决于StorageGRID 系统何时完成给定请求、而不是S3客户端何时开始操作。
对象大小
StorageGRID 支持大小高达5 TB的对象。
用户元数据中的 UTF-8 字符
如果某个请求在用户定义的元数据的密钥名称或值中包含(未转义) UTF-8 值,则会未定义 StorageGRID 行为。
StorageGRID 不会解析或解释用户定义的元数据的密钥名称或值中包含的转义 UTF-8 字符。转义的 UTF-8 字符被视为 ASCII 字符:
-
如果用户定义的元数据包含转义的 UTF-8 字符,则请求将成功。
-
StorageGRID 不会返回
x-amz-missing-meta
如果对密钥名称或值的解释值包含不可打印的字符、则为标题。
支持的请求标头
支持以下请求标头:
-
Content-Type
-
x-amz-copy-source
-
x-amz-copy-source-if-match
-
x-amz-copy-source-if-none-match
-
x-amz-copy-source-if-unmodified-since
-
x-amz-copy-source-if-modified-since
-
x-amz-meta-
、后跟一个名称-值对、该对包含用户定义的元数据 -
x-amz-metadata-directive
:默认值为COPY
、用于复制对象和关联的元数据。您可以指定
REPLACE
复制对象时覆盖现有元数据、或者更新对象元数据。 -
x-amz-storage-class
-
x-amz-tagging-directive
:默认值为COPY
、用于复制对象和所有标记。您可以指定
REPLACE
可在复制对象时覆盖现有标记、或更新标记。 -
S3 对象锁定请求标头:
-
x-amz-object-lock-mode
-
x-amz-object-lock-retain-until-date
-
x-amz-object-lock-legal-hold
-
-
SSA 请求标头:
-
x-amz-copy-source-server-side-encryption-customer-algorithm
-
x-amz-copy-source-server-side-encryption-customer-key
-
x-amz-copy-source-server-side-encryption-customer-key-MD5
-
x-amz-server-side-encryption
-
x-amz-server-side-encryption-customer-key-MD5
-
x-amz-server-side-encryption-customer-key
-
x-amz-server-side-encryption-customer-algorithm
-
请求标头不受支持
不支持以下请求标头:
-
Cache-Control
-
Content-Disposition
-
Content-Encoding
-
Content-Language
-
Expires
-
x-amz-website-redirect-location
存储类选项
。 x-amz-storage-class
如果匹配的ILM规则指定了双重提交或平衡的载入行为、则支持请求标头、并影响StorageGRID 创建的对象副本数。
-
STANDARD
(默认)指定在 ILM 规则使用双提交选项或 balanced-option 回退到创建中间副本时执行双提交载入操作。
-
REDUCED_REDUNDANCY
指定在 ILM 规则使用双提交选项或 balanced-option 回退为创建中间副本时执行单提交载入操作。
如果要在启用了S3对象锁定的情况下将对象载入存储分段、则会显示 REDUCED_REDUNDANCY
选项将被忽略。如果要将对象载入旧的合规存储分段、则会显示REDUCED_REDUNDANCY
选项返回错误。StorageGRID 将始终执行双提交载入,以确保满足合规性要求。
在 PUT 对象中使用 x-AMZ-copy-source —复制
如果源存储分段和密钥、请在中指定 x-amz-copy-source
标头与目标分段和密钥不同、源对象数据的副本将写入目标。
如果源和目标匹配、则使用和 x-amz-metadata-directive
标头指定为 REPLACE
、对象的元数据将使用请求中提供的元数据值进行更新。在这种情况下, StorageGRID 不会重新载入对象。这有两个重要后果:
-
您不能使用 PUT 对象 - 复制对现有对象进行原位加密,也不能更改现有对象的加密。如果您提供
x-amz-server-side-encryption
标题或x-amz-server-side-encryption-customer-algorithm
标头、StorageGRID 拒绝请求并返回XNotImplemented
。 -
不会使用匹配 ILM 规则中指定的 " 载入行为 " 选项。通过正常后台 ILM 进程重新评估 ILM 时,更新触发的任何对象放置更改都会进行。
这意味着,如果 ILM 规则对载入行为使用严格选项,则在无法放置所需对象时(例如,由于新需要的位置不可用),不会执行任何操作。更新后的对象会保留其当前位置,直到可以进行所需的位置为止。
服务器端加密的请求标头
如果使用服务器端加密,则您提供的请求标头取决于源对象是否已加密以及是否计划对目标对象加密。
-
如果源对象使用客户提供的密钥( SSI-C )进行加密,则必须在 PUT Object - Copy 请求中包含以下三个标头,以便可以解密并复制此对象:
-
x-amz-copy-source-server-side-encryption-customer-algorithm
指定AES256
。 -
x-amz-copy-source-server-side-encryption-customer-key
指定在创建源对象时提供的加密密钥。 -
x-amz-copy-source-server-side-encryption-customer-key-MD5
:指定在创建源对象时提供的MD5摘要。
-
-
如果要使用您提供和管理的唯一密钥对目标对象(副本)进行加密,请包含以下三个标题:
-
x-amz-server-side-encryption-customer-algorithm
:指定AES256
。 -
x-amz-server-side-encryption-customer-key
:为目标对象指定新的加密密钥。 -
x-amz-server-side-encryption-customer-key-MD5
:指定新加密密钥的MD5摘要。
-
-
注意: * 您提供的加密密钥永远不会存储。如果丢失加密密钥,则会丢失相应的对象。在使用客户提供的密钥保护对象数据之前、请查看"`使用服务器端加密中的注意事项。`
-
如果要使用由 StorageGRID ( SSE )管理的唯一密钥对目标对象(副本)进行加密,请将此标头包括在 PUT 对象 - 复制请求中:
-
x-amz-server-side-encryption
-
注意: server-side-encryption
无法更新对象的值。而是使用新创建副本 server-side-encryption
价值使用 x-amz-metadata-directive
: REPLACE
。
版本控制
如果源存储分段已版本控制、则可以使用 x-amz-copy-source
用于复制最新版本对象的标题。要复制对象的特定版本、必须使用明确指定要复制的版本 versionId
子资源。如果目标存储分段已进行版本控制、则会在中返回生成的版本 x-amz-version-id
响应标头。如果目标分段的版本控制已暂停、则 x-amz-version-id
返回"`null`"值。