使用S3对象锁,可以使用一次写入多次读取(WORM)模型存储对象。 可以使用它来防止对象在固定的时间内或无限期地被删除或覆盖。 Object Lock可帮助满足需要WORM存储的法规要求,或仅添加另一层保护以防止对象更改和删除。
S3 Object Lock已通过Cohasset Associates评估,可在符合SEC 17a-4,CTCC和FINRA规定的环境中使用。 有关“对象锁”如何与这些法规相关的更多信息,请参阅Cohasset Associates法规遵从性评估。
对象锁提供了两种管理对象保留的方法:保留期限(retention periods)和法律保留(legal holds)。
- 保留期限指定对象保持锁定的固定时间段。在此期间,对象受WORM保护,无法覆盖或删除。
- 法律保留提供与保留期限相同的保护,但没有到期日。取而代之的是,法律保留将一直有效,直到显式删除它。法律保留独立于保留期限。
一个对象版本可以同时拥有保留期限和合法持有期(只有一个,没有另一个),或者两者都没有。更多信息,请参见S3对象锁概述。
对象锁只在启用多版本的桶中有效,保留期限和法律保留适用于各个对象版本。当锁定一个对象版本时,Amazon S3将锁定信息存储在该对象版本的元数据中。对一个对象设置保留期限或法律保留只保护请求中指定的版本。它不会阻止对象的新版本被创建。如果将一个对象放入与现有受保护对象具有相同键名的桶中,Amazon S3将创建该对象的新版本,按照请求将其存储在桶中,并报告请求已成功完成。对象的现有保护版本根据其保留配置保持锁定状态。
要使用S3对象锁,请遵循以下基本步骤:
- 创建一个启用对象锁的新桶。
- (可选)配置存放到桶中的对象的默认保留期限。
- 将要锁定的对象放在桶中。
- 对想要保护的对象应用保留期限、法律保留或两者兼而有之。
有关在AWS管理控制台使用对象锁的信息,请参见《Amazon简单存储服务控制台用户指南》中如何锁定Amazon S3对象。
S3对象锁概述
可以使用一次写入多次读取(WORM)模型来使用S3对象锁来存储对象。 它可以帮助防止在固定的时间内或无限期地删除或覆盖对象。 可以使用S3对象锁来满足需要WORM存储的法规要求,或者添加额外的保护层以防止对象更改和删除。
有关管理Amazon S3对象的锁状态的信息,请参阅以下部分:
“管理对象锁”。
以下各节介绍S3对象锁的主要功能。
保留模式
S3对象锁提供了两种保留模式:
- Governance mode
- Compliance mode
这些保留模式将不同级别的保护应用于对象。 可以将任一保留模式应用于受“对象锁”保护的任何对象版本。
在governance 模式下,除非拥有特殊权限,否则用户无法覆盖或删除对象版本或更改其锁定设置。 使用governance 模式,可以防止大多数用户删除对象,但是仍然可以授予某些用户更改保留设置或在必要时删除对象的权限。 还可以在创建 compliance模式保留期限之前,使用governance 模式来测试保留期限设置。 要覆盖或删除governance 模式保留设置,用户必须具有s3:BypassGovernanceRetention权限,并且必须明确包含x-amz-bypass-governance-retention:true作为请求标头,以及任何需要覆盖governance 模式的请求。
注意事项
默认情况下,Amazon S3控制台包含x-amz-bypass-governance-retention:true标头。 如果尝试删除受governance 模式保护的对象并具有s3:BypassGovernanceRetention或s3:GetBucketObjectLockConfiguration权限,则该操作将成功。
在compliance模式下,任何用户都不能覆盖或删除受保护的对象版本,包括AWS账户中的root用户。 将对象锁定为compliance时,无法更改其保留模式,也不能缩短其保留期限。 compliance模式可确保在保留期限内不能覆盖或删除对象版本。
注意事项
更新对象版本的元数据(如放置或更改对象锁时发生的情况)不会覆盖对象版本或重置其Last-Modified的时间戳。
保留期限
保留期限可以在固定的时间内保护对象版本。 当您在对象版本上放置保留期限时,Amazon S3在对象版本的元数据中存储一个时间戳,以指示保留期限何时到期。 保留期限到期后,可以覆盖或删除对象版本,除非您还对该对象版本设置了法律保留。
可以明确地或通过存储桶默认设置在对象版本上设置保留期限。 当将保留期限明确地应用于对象版本时,请为该对象版本指定“保留截止日期”。 Amazon S3将“保留截止日期”设置存储在对象版本的元数据中,并在保留期限到期之前保护对象版本。
使用桶默认设置时,无需指定保留截止日期。 而是指定一个持续时间(以天或年为单位),应该保护桶中放置的每个对象版本的持续时间。 将对象放在桶中时,Amazon S3通过将指定的持续时间添加到对象版本的创建时间戳中来计算该对象版本的“保留截止日期”。 它将“保留截止日期”存储在对象版本的元数据中。 然后,就像在对象版本上显式放置具有该保留期限的锁一样,对对象版本进行完全保护。
注意事项
如果将对象版本放入桶的请求包含明确的保留模式和期限,则这些设置将覆盖该对象版本的所有桶默认设置。
像所有其他对象锁定设置一样,保留期限适用于各个对象版本。 单个对象的不同版本可以具有不同的保留模式和期限。
例如,假设有一个30天保留期限且已保存15天的对象,将一个名称相同、保留期限为60天的对象放入Amazon S3。在这种情况下,PUT将会成功,Amazon S3将创建具有60天保留期限的对象的新版本。旧版本保持其原始保留期限,并在15天后变为可删除。
将保留设置应用于对象版本后,可以延长保留期限。 为此,请提交一个针对对象版本的新锁定请求,该请求的“保留截止日期”晚于当前为该对象版本配置的“保留日期”。 Amazon S3用更长的新期限替换了现有的保留期限。 任何有权设置对象保留期限的用户都可以延长在任一模式下锁定的对象版本的保留期限。
法律保留
使用对象锁,还可以对对象版本进行法律保留。 与保留期限一样,法律保留可防止对象版本被覆盖或删除。 但是,法律保留没有相关的保留期限,并且在删除之前一直有效。 拥有s3:PutObjectLegalHold权限的任何用户都可以自由放置和删除法律保留。 有关Amazon S3权限的完整列表,请参阅Amazon S3的操作,资源和条件键。
法律保留与保留期限无关。 只要包含该对象的桶已启用“对象锁”,就可以放置和删除法律保留,无论指定的对象版本是否设置了保留期限。 对对象版本设置法律保留不会影响该对象版本的保留模式或保留期限。 例如,假设对对象版本设置了法律保留,而对象版本也受保留期限的保护。 如果保留期限到期,则该对象不会失去其WORM保护。 而是,法律保留继续保护该对象,直到授权用户明确将其删除为止。 同样,如果在对象版本具有有效保留期限的同时删除法律保留,则对象版本将保持受保护状态,直到保留期限到期为止。
桶配置
要使用对象锁,必须为桶启用对象锁。还可以选择配置适用于放入桶中的新对象的默认保留模式和保留期限。
启用S3对象锁
在锁定任何对象之前,必须将桶配置为使用S3对象锁。 为此,请在创建桶时指定要启用对象锁。 为对象锁配置桶后,可以使用保留期限,法律保留或同时使用两者来锁定该桶中的对象。
注意事项
- 只能为新桶启用对象锁。 如果要为现有桶启用对象锁,请联系AWS支持。
- 创建启用了对象锁的桶时,Amazon S3会自动为该桶启用多版本。
- 创建启用了对象锁的桶后,将无法禁用对象锁或暂停桶的多版本。
默认的保留设置
启用桶的对象锁时,桶可以存储受保护的对象。 但是,该设置不会自动保护放入桶中的对象。 如果要自动保护桶中放置的对象版本,则可以配置默认保留期限。 默认设置适用于放置在桶中的所有新对象,除非在创建对象时明确为其指定了不同的保留模式和期限。
小建议
如果要对放置在桶中的所有新对象版本强制执行桶默认保留模式和期限,请设置桶默认值并拒绝用户配置对象保留设置的权限。 然后,Amazon S3将默认保留模式和期限应用于放置在桶中的新对象版本,并拒绝任何放置包含保留模式和设置的对象的请求。
桶默认设置需要模式和期限。桶默认模式可以是governance ,也可以是compliance。
默认保留期限不是以时间戳记,而是以天或年为单位的期限。将对象版本放入具有默认保留期限的桶中时,对象锁会计算“保留截止日期”。 它通过将默认保留期限添加到对象版本的创建时间戳中来实现。 Amazon S3将结果时间戳存储为对象版本的“保留截止日期”,就好像是手动计算时间戳并将其自己放置在对象版本上一样。
默认设置仅适用于放置在桶中的新对象。 将默认保留设置放置在桶上不会对桶中已经存在的对象放置任何保留设置。
重要事项
对象锁仅适用于单个对象版本。 如果将对象放置在具有默认保留期的桶中,但未明确指定该对象的保留期限,则Amazon S3会创建该对象的保留期限与桶默认设置相匹配。 创建对象后,其保留期限与桶的默认保留期限无关。更改桶的默认保留期限不会更改该桶中任何对象的现有保留期限。
注意事项
如果在桶上配置了默认保留期限,则在此类桶中上传对象的请求必须包含Content-MD5标头。 有关更多信息,请参阅Amazon Simple Storage Service API参考中的PUT对象。
所需权限
对象锁操作需要特定权限。有关所需权限的更多信息,请参见示例-对象操作。有关使用具有权限的条件的信息,请参阅Amazon S3 Condition Key。
管理Amazon S3对象锁
S3对象锁可让使用一次写入多次读取(WORM)模型将对象存储在Amazon S3中。 可以使用它来查看,配置和管理Amazon S3对象的对象锁状态。
查看对象的锁信息
可以使用GET Object或HEAD Object命令查看Amazon S3对象版本的对象锁状态。 这两个命令都返回保留模式,保留截止日期以及指定对象版本的法律保留状态。
要查看对象版本的保留模式和保留期限,必须具有s3:GetObjectRetention权限。 要查看对象版本的法律保留状态,必须具有s3:GetObjectLegalHold权限。 如果GET或HEAD一个对象版本,但没有查看其锁定状态所需的权限,则请求成功。 但是,它不会返回无权查看的信息。
要查看桶的默认保留配置(如果有),请请求桶的对象锁定配置。 为此,必须具有s3:GetBucketObjectLockConfiguration权限。如果针对未启用S3对象锁的桶请求对象锁配置,则Amazon S3将返回错误。
可以在桶上配置Amazon S3清单报告,以包括桶中所有对象的保留日期、对象锁定模式和法律保留状态。
绕过governance模式
如果具有s3:BypassGovernanceRetention权限,则可以对在governance模式下锁定的对象版本执行操作,就好像它们不受保护一样。 这些操作包括删除对象版本,缩短保留期限或通过放置带有空参数的新锁来删除对象锁。 要绕过governance模式,必须在请求中明确指出要绕过此模式。 为此,请在请求中包含x-amz-bypass-governance-retention:true标头,或者对通过AWS CLI或AWS开发工具包提出的请求使用等效参数。 如果具有绕过governance模式所需的权限,则AWS管理控制台会自动将此标头应用于通过控制台发出的请求。
注意事项
绕过governance不会影响对象版本的法律保留状态。 如果对象版本启用了法律保留,则法律保留将保持有效,并防止覆盖或删除对象版本的请求
设置保留限制
可以使用存储桶策略设置存储桶的最小和最大允许保留期限。可以使用s3:object-lock-remaining-retention-days条件键来执行此操作。 以下示例显示了一个桶策略,该策略使用s3:object-lock-remaining-retention-days条件键将最大保留期设置为10天。
{
"Version": "2012-10-17",
"Id": "<SetRetentionLimits",
"Statement": [
{
"Sid": "<SetRetentionPeriod",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutObjectRetention"
],
"Resource": "arn:aws:s3:::<awsexamplebucket1>/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days": "10"
}
}
}
]
}
注意事项
如果桶是复制策略的目标桶,并且想要为使用复制创建的对象副本设置最小和最大允许保留期限,则必须在桶策略中包括s3:ReplicateObject操作。
管理删除标记和对象生命周期
尽管无法删除受保护的对象版本,但是仍然可以为该对象创建删除标记。将删除标记放在对象上不会删除任何对象版本。 但是,它使Amazon S3在大多数情况下都表现得就像已删除对象一样。 有关更多信息,请参阅使用删除标记。
注意事项
删除标记不受WORM保护,与底层对象上的任何保留期或法律保留无关。
对象生命周期管理配置继续在受保护对象上正常运行,包括放置删除标记。 但是,受保护的对象版本仍然可以安全地被生命周期配置删除或覆盖。 有关管理对象生命周期的更多信息,请参阅对象生命周期管理。