针对同一账户中的存储桶配置复制
实时复制是跨相同或不同 Amazon Web Services 区域中的存储桶自动、异步复制对象。实时复制会将源存储桶中新创建的对象和对象更新复制到一个或多个目标存储桶。有关更多信息,请参阅 在区域内和跨区域复制对象。
配置复制时,需要向源存储桶添加复制规则。复制规则定义要复制的源存储桶对象和存储已复制对象的目标存储桶。您可以创建一条规则,以复制存储桶中的所有对象或具有特定键名前缀和/或一个或多个对象标签的对象子集。目标存储桶与源存储桶可以位于同一 Amazon Web Services 账户 中,也可以位于不同的账户中。
如果您指定要删除的对象版本 ID,Amazon S3 会在源存储桶中删除该对象版本。但不会将删除操作复制到目标存储桶中。换句话说,它不会从目标存储桶中删除同一对象版本。这会防止恶意删除数据。
当您将复制规则添加到存储桶后,默认情况下将启用复制规则,使该规则在您保存它后立即启动。
在此示例中,您为由同一 Amazon Web Services 账户拥有的源存储桶和目标存储桶设置实时复制。提供了使用 Amazon S3 控制台、Amazon Command Line Interface (Amazon CLI) 以及 Amazon SDK for Java 和 Amazon SDK for .NET 的示例。
要在目标存储桶与源存储桶位于同一 Amazon Web Services 账户中时配置复制规则,请按照以下步骤操作。
如果目标存储桶与源存储桶位于不同的账户中,您必须向目标存储桶添加存储桶策略以便为源存储桶账户的所有者授予复制目标存储桶中的对象的权利。有关更多信息,请参阅 在源存储桶和目标存储桶由不同的 Amazon Web Services 账户 拥有时授予权限。
登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。
-
在存储桶列表中,请选择您想要的存储桶的名称。
-
选择管理选项卡,向下滚动到复制规则,然后选择创建复制规则。
-
在复制规则配置部分的复制规则名称下,输入规则的名称,以帮助以后识别该规则。该名称是必填项,并且它在存储桶内必须是唯一的。
-
在状态下,已启用默认情况下处于选中状态。已启用的规则将在您保存它后立即开始工作。如果您想以后再启用该规则,请选择已禁用。
-
如果存储桶具有现有的复制规则,系统会指示您为规则设置优先级。必须为规则设置优先级,以避免因在多个规则的范围内包含对象而引起冲突。如果规则重叠,Amazon S3 会使用规则优先级确定要应用哪个规则。数字越大,优先级越高。有关规则优先级的更多信息,请参阅 复制配置文件元素。
-
在源存储桶下,您可以通过以下选项设置复制源:
-
要复制整个存储桶,请选择应用到存储桶中的所有对象。
-
要复制具有相同前缀的所有对象,请选择 Limit the scope of this rule using one or more filters (使用一个或多个筛选条件限制此规则的范围)。这会将复制限制为名称以您指定的前缀(例如
pictures
)开头的所有对象。在前缀框中输入前缀。注意
如果您输入的前缀是文件夹名称,则必须使用 /(正斜杠)作为最后一个字符(例如,
pictures/
)。 -
要复制具有一个或多个对象标签的所有对象,请选择添加标签,然后在框中输入键值对。重复上述过程以添加其他标签。您可以组合前缀和标签。有关对象标签的更多信息,请参阅 使用标签对存储进行分类。
新的复制配置 XML 模式支持前缀和标签筛选以及规则优先级划分。有关新架构的更多信息,请参阅 向后兼容性注意事项。如需详细了解在用户界面后台工作的 Amazon S3 API 所使用的 XML,请参阅 复制配置文件元素。新架构被描述为复制配置 XML V2。
-
-
在目标下,选择您希望 Amazon S3 将对象复制到的存储桶。
注意
目标存储桶的数量仅限于给定分区中的 Amazon Web Services 区域 的数量。分区是一组区域。Amazon 目前有三个分区:
aws
(标准区域)、aws-cn
(中国区域)和aws-us-gov
(Amazon GovCloud (US) 区域)。要请求提高目标存储桶限额,您可以使用服务限额。-
要复制到您的账户中的一个或多个存储桶,请选取选择此账户中的存储桶,然后输入或浏览目标存储桶。
-
要复制到其他 Amazon Web Services 账户中的一个或多个存储存储桶,请选择指定另一个账户中的存储存储桶,然后输入目标存储存储桶账户 ID 和存储桶名称。
如果目标存储桶与源存储桶位于不同的账户中,您必须向目标存储桶添加存储桶策略以便为源存储桶账户的所有者授予复制对象的权限。有关更多信息,请参阅 在源存储桶和目标存储桶由不同的 Amazon Web Services 账户 拥有时授予权限。
(可选)如果要帮助标准化目标存储桶中的新对象的所有权,请选择将对象所有权更改为目标存储桶拥有者。有关此选项的更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。。
注意
如果未对目标存储桶启用版本控制,您将收到包含 Enable versioning(启用版本控制)按钮的警告。请选择此按钮可对存储桶启用版本控制。
-
-
设置 Amazon Identity and Access Management (IAM) 角色,Amazon S3 可以代入该角色以代表您复制对象。
要设置 IAM 角色,请在 IAM 角色部分中,从 IAM 角色下拉列表中选择以下任一选项:
-
我们强烈建议您选择 Create new role (创建新角色),让 Amazon S3 为您创建一个新的 IAM 角色。当您保存该规则后,将为 IAM 角色生成一个与您选择的源和目标存储桶匹配的新策略。
-
您可以选择使用现有的 IAM 角色。在这种情况下,您必须选择一个角色,该角色会授予 Amazon S3 必要的权限以进行复制。如果该角色未按照您的复制规则授予 Amazon S3 足够的权限,复制会失败。
重要
将复制规则添加到存储桶时,您必须具有
iam:PassRole
权限才能传递授予 Amazon S3 复制权限的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递给 Amazon Web Services 服务的权限。 -
-
要复制源存储桶中使用具有 Amazon Key Management Service(Amazon KMS)密钥的服务器端加密(SSE-KMS)进行加密的对象,请在加密下选择复制已使用 Amazon KMS 加密的对象。在用于加密目标对象的 Amazon KMS 密钥下,是您允许复制使用的源密钥。预设情况下,所有源 KMS 密钥都包含在内。要缩小 KMS 密钥选择范围,可以选择别名或密钥 ID。
使用您未选择的 Amazon KMS keys 加密的对象不会进行复制。系统为您选择一个 KMS 密钥或一组 KMS 密钥,您可以自行选择 KMS 密钥。有关将 Amazon KMS 用于复制的信息,请参阅 复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
重要
在复制使用 Amazon KMS 加密的对象时,Amazon KMS 请求速率会在源区域中加倍并在目标区域中增加相同的量。之所以对 Amazon KMS 的调用率会增加,是因为数据是使用您为复制目标区域定义的 KMS 密钥进行重新加密的。对于每个区域的每个调用账户,Amazon KMS 设定了一个请求速率限额。有关限额默认值的信息,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon KMS 限额 – 每秒请求数:因情况而异。
如果您在复制期间的当前 Amazon S3
PUT
对象请求速率超过您账户的默认 Amazon KMS 速率限制的一半,则建议您请求提高您的 Amazon KMS 请求速率限额。要请求提高,请在联系我们处的 Amazon Web Services Support 中心内创建一个案例。例如,假设您当前的 PUT
对象请求速率为每秒 1000 个请求并且您使用 Amazon KMS 加密对象。在此情况下,建议您让 Amazon Web Services Support 将您在源区域和目标区域中的 Amazon KMS 速率限制提高到每秒 2500 个请求(如果不同),以确保不受 Amazon KMS 的限制。要查看源存储桶中的
PUT
对象请求速率,请查看 Amazon S3 的 Amazon CloudWatch 请求指标中的PutRequests
。有关查看 CloudWatch 指标的信息,请参阅使用 S3 控制台如果选择复制使用 Amazon KMS 加密的对象,请执行以下操作:
-
在用于加密目标对象的 Amazon KMS key 下,通过以下方式之一指定您的 KMS 密钥:
-
要从可用的 KMS 密钥列表中进行选择,请选择从您的 Amazon KMS keys 密钥中进行选择,并从可用密钥的列表中选择您的 KMS 密钥。
Amazon 托管式密钥 (
aws/s3
) 和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户密钥和 Amazon 密钥。 -
要输入 KMS 密钥 Amazon 资源名称(ARN),请选择输入 Amazon KMS key ARN,然后在显示的字段中输入您的 KMS 密钥 ARN。这会加密目标存储桶中的副本。您可以在 IAM 控制台
中的加密密钥下方找到您的 KMS 密钥的 ARN。 -
要在 Amazon KMS 控制台中创建新的客户自主管理型密钥,请选择创建 KMS 密钥。
有关创建 Amazon KMS key 的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建密钥。
重要
您只能使用与存储桶所在相同 Amazon Web Services 区域 中启用的 KMS 密钥。选择从您的 KMS 密钥中选择时,S3 控制台对于每个区域仅列出 100 个 KMS 密钥。如果您在同一区域中有超过 100 个 KMS 密钥,您只会在 S3 控制台中看到前 100 个 KMS 密钥。要使用控制台中未列出的 KMS 密钥,请选择输入 Amazon KMS key ARN,然后输入您的 KMS 密钥 ARN。
在 Amazon S3 中使用 Amazon KMS key 进行服务器端加密时,您必须选择对称加密 KMS 密钥。Amazon S3 仅支持对称加密 KMS 密钥,而不支持非对称 KMS 密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的确定对称和非对称 KMS 密钥。
有关创建 Amazon KMS key 的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的创建密钥。有关将 Amazon KMS 与 Amazon S3 结合使用的更多信息,请参阅使用具有 Amazon KMS 密钥的服务器端加密(SSE-KMS)。
-
-
-
在目标存储类下,如果要将数据复制到目标中的特定存储类,请选择更改复制对象的存储类。然后选择要用于目标中的已复制对象的存储类。如果您不选择此选项,已复制对象的存储类将与原始对象的类相同。
-
设置其他复制选项时,您具有以下附加选项:
-
如果要在复制配置中启用 S3 Replication Time Control(S3 RTC),请选择复制时间控制(RTC)。有关此选项的更多信息,请参阅 使用 S3 Replication Time Control 满足合规性要求。
-
如果要在复制配置中启用 S3 复制指标,请选择 Replication metrics and events(复制指标和事件)。有关更多信息,请参阅使用指标、事件通知和状态监控复制。
-
如果要在复制配置中启用删除标记复制,请选择 Delete marker replication (删除标记复制)。有关更多信息,请参阅在存储桶之间复制删除标记。
-
如果要在复制配置中启用 Amazon S3 副本修改同步,请选择 Replica modification sync (副本修改同步)。有关更多信息,请参阅使用副本修改同步复制元数据更改。
注意
使用 S3 RTC 或 S3 复制指标时,需要支付额外费用。
-
-
要完成,请选择 Save (保存)。
-
在您保存规则之后,可以通过选择您的规则并选择 Edit rule (编辑规则) 来编辑、启用、禁用或删除您的规则。
要使用 Amazon CLI 在源存储桶和目标存储桶由同一 Amazon Web Services 账户 拥有时设置复制,请执行以下操作:
-
创建源存储桶和目标存储桶。
-
对存储桶启用版本控制。
-
创建 Amazon Identity and Access Management(IAM)角色来向 Amazon S3 授予复制对象的权限。
-
将复制配置添加到源存储桶。
要验证您的设置,请对其进行测试。
当源存储桶和目标存储桶由同一 Amazon Web Services 账户拥有时设置复制
-
为 Amazon CLI 设置凭证配置文件。此示例使用配置文件名称
acctA
。有关设置凭证配置文件和使用命名配置文件的信息,请参阅《Amazon Command Line Interface 用户指南》中的 Configuration and credential file settings。重要
用于此示例的配置文件必须具有必要的权限。例如,在复制配置中,指定 Amazon S3 可担任的 IAM 角色。仅当您使用的配置文件具有
iam:PassRole
权限时,才能执行此操作。有关更多信息,请参阅《IAM 用户指南》中的向用户授予权限以将角色传递给 Amazon Web Services 服务。如果您使用管理员凭证创建命名配置文件,则可执行所有任务。 -
使用以下 Amazon CLI 命令创建一个源存储桶,并对其启用版本控制。要使用这些命令,请将
替换为您自己的信息。user input placeholders
以下
create-bucket
命令在美国东部(弗吉尼亚州北部)(us-east-1
) 区域中创建一个名为
的源存储桶。amzn-s3-demo-source-bucket
aws s3api create-bucket \ --bucket
amzn-s3-demo-source-bucket
\ --regionus-east-1
\ --profileacctA
以下
put-bucket-versioning
命令对于
存储桶启用 S3 版本控制:amzn-s3-demo-source-bucket
aws s3api put-bucket-versioning \ --bucket
amzn-s3-demo-source-bucket
\ --versioning-configuration Status=Enabled \ --profileacctA
-
使用以下 Amazon CLI 命令创建一个目标存储桶,并对其启用版本控制。要使用这些命令,请将
替换为您自己的信息。user input placeholders
注意
要在源存储桶和目标存储桶位于同一 Amazon Web Services 账户中时设置复制配置,请对源存储桶和目标存储桶使用相同的配置文件。此示例使用
acctA
。要在这些存储桶由不同 Amazon Web Services 账户拥有时对复制配置进行测试,请为每个账户指定不同的配置文件。例如,对目标存储桶使用
acctB
配置文件。以下
create-bucket
命令在美国西部(俄勒冈州)(us-west-2
) 区域中创建一个名为
的目标存储桶。amzn-s3-demo-destination-bucket
aws s3api create-bucket \ --bucket
amzn-s3-demo-destination-bucket
\ --regionus-west-2
\ --create-bucket-configuration LocationConstraint=us-west-2
\ --profileacctA
以下
put-bucket-versioning
命令对于
存储桶启用 S3 版本控制:amzn-s3-demo-destination-bucket
aws s3api put-bucket-versioning \ --bucket
amzn-s3-demo-destination-bucket
\ --versioning-configuration Status=Enabled \ --profileacctA
-
创建一个 IAM 角色。您将在稍后添加到源存储桶的复制配置中指定此角色。Amazon S3 担任此角色以代表您复制对象。分两个步骤创建 IAM 角色:
-
创建角色。
-
将权限策略附加到角色。
-
创建 IAM 角色。
-
复制以下信任策略,并将其保存到本地计算机上当前目录中一个名为
s3-role-trust-policy.json
的文件。此策略向 Amazon S3 服务主体授予担任该角色的权限。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
-
运行以下命令以创建角色。
$
aws iam create-role \ --role-namereplicationRole
\ --assume-role-policy-document file://s3-role-trust-policy.json
\ --profileacctA
-
-
将权限策略附加到角色。
-
复制以下权限策略,并将其保存到本地计算机上当前目录中一个名为
s3-role-permissions-policy.json
的文件。此策略授予对各种 Amazon S3 存储桶和对象操作的权限。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::
amzn-s3-demo-source-bucket
/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket
" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket
/*" } ] } -
运行以下命令以创建策略并将其附加到角色。将
替换为您自己的信息。user input placeholders
$
aws iam put-role-policy \ --role-namereplicationRole
\ --policy-document file://s3-role-permissions-policy.json
\ --policy-namereplicationRolePolicy
\ --profileacctA
-
-
-
将复制配置添加到源存储桶。
-
尽管 Amazon S3 API 要求您将复制配置指定为 XML 形式,但 Amazon CLI 要求您将复制配置指定为 JSON 形式。将以下 JSON 保存到计算机上本地目录中一个名为
replication.json
文件。{ "Role": "
IAM-role-ARN
", "Rules": [ { "Status": "Enabled", "Priority": 1, "DeleteMarkerReplication": { "Status": "Disabled" }, "Filter" : { "Prefix": "Tax
"}, "Destination": { "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket
" } } ] } -
通过使用您自己的信息替换
和amzn-s3-demo-destination-bucket
的值来更新 JSON。保存更改。IAM-role-ARN
-
运行以下
put-bucket-replication
命令来将复制配置添加到源存储桶。请务必提供源存储桶名称:$
aws s3api put-bucket-replication \ --replication-configuration file://replication.json
\ --bucketamzn-s3-demo-source-bucket
\ --profileacctA
要检索复制配置,请使用
get-bucket-replication
命令:$
aws s3api get-bucket-replication \ --bucketamzn-s3-demo-source-bucket
\ --profileacctA
-
-
通过执行以下步骤,在 Amazon S3 控制台中测试设置:
登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。在通用存储桶列表中,选择源存储桶。
-
在源存储桶中,创建一个名为
的文件夹。Tax
-
将示例对象添加到源存储桶中的
文件夹。Tax
注意
Amazon S3 复制对象所需的时间量取决于对象的大小。有关如何查看复制状态的信息,请参阅获取复制状态信息。
在
目标
存储桶中,确认以下几点:-
该 Amazon S3 已复制对象。
-
这些对象是副本。在对象的属性选项卡上,向下滚动至对象管理概述部分。在管理配置下,查看复制状态下的值。确保此值设置为
REPLICA
。 -
副本归源存储桶账户拥有。可以在对象的权限选项卡上验证对象所有权。
如果源存储桶和目标存储桶由不同的账户拥有,则可以添加可选配置,来指示 Amazon S3 将副本所有权更改为目标账户。有关示例,请参阅如何更改副本拥有者。
-
以下代码示例分别使用 Amazon SDK for Java 和 Amazon SDK for .NET 向存储桶添加复制配置。