设置 S3 表类数据存储服务复制
您可以设置复制,以便自动从源表创建表副本并将其复制到最多五个目标表存储桶。可以在存储桶级别(应用于存储桶中的所有表)或表级别(针对特定表)配置复制。本主题介绍如何使用 Amazon S3 控制台或 AWS 命令行界面(AWS CLI)配置复制。
有关设置复制的更多信息,请参阅以下主题。
设置复制的先决条件
在配置复制之前,请确保您拥有:
所需的资源
-
源表存储桶:包含要复制的表的表存储桶
-
目标表存储桶:要将您的表复制到的一个或多个表存储桶(最多 5 个目标表存储桶)
-
源表:源表存储桶中要复制的现有表
-
IAM 角色:一个 IAM 角色,用于授予 Amazon S3 权限以代表您复制表
所需的权限
您用于设置复制的 IAM 身份必须具有以下权限:
对于存储桶级别的复制:
-
源表存储桶上的
s3tables:PutTableBucketReplication -
源表存储桶上的
s3tables:GetTableBucketReplication -
针对复制 IAM 角色的
iam:PassRole
对于表级别的复制:
-
源表上的
s3tables:PutTableReplication -
源表上的
s3tables:GetTableReplication -
针对复制 IAM 角色的
iam:PassRole
对于跨账户复制:
-
来自目标账户的存储桶策略的权限
对跨账户复制的额外要求
如果您的源表存储桶和目标表存储桶位于不同的 AWS 账户中,您还需要:
-
目标表存储桶上的存储桶策略,该策略用于为源账户授予复制表的权限
-
目标账户 ID 和表存储桶 Amazon 资源名称(ARN)
对加密表的额外要求
如果您要使用 AWS KMS 加密副本表,则需要:
-
目标区域中的 KMS 密钥
-
在您的 IAM 复制角色中使用该 KMS 密钥的权限
-
允许复制角色加密数据的 KMS 密钥策略
了解复制配置
复制配置定义了 Amazon S3 如何从您的源表存储桶复制表。可以在两个级别配置复制:
存储桶级别的复制
存储桶级别的复制配置将应用于源表存储桶中的所有表。当您配置存储桶级别的复制时,Amazon S3 会自动复制存储桶中创建的所有现有表和新表。
在以下情况下使用存储桶级别的复制:
-
您希望复制存储桶中的所有表
-
您希望所有表的复制行为保持一致
-
您希望通过单一配置来简化管理
表级别的复制
表级别的复制配置将应用于特定表。表级别配置会覆盖该特定表的存储桶级别配置。
在以下情况下使用表级别的复制:
-
您只希望复制特定表
-
您需要为不同的表设置不同的复制目标
-
您希望覆盖某些表的存储桶级别配置
复制配置元素
每个复制配置都包含:
-
IAM 角色:Amazon S3 代入的用于执行复制操作的角色
-
规则:一条或多条复制规则(启动时限制为 1 条规则)。每条规则都包含:
-
目标:目标表存储桶 ARN 的列表(最多 5 个目标)
-
状态:规则是已启用还是已禁用
-
-
版本令牌:用于在更新配置时防止写入冲突的令牌
在存储桶级别的复制与表级别的复制之间做出选择
配置优先级
当存储桶级别的配置和表级别的配置同时存在时:
-
对于该特定表,表级别的配置优先。
-
其他表遵循存储桶级别的配置。
使用 Amazon S3 控制台设置复制
此过程说明如何使用 Amazon S3 控制台配置复制。
此过程说明如何使用 Amazon S3 控制台创建表存储桶复制配置。表存储桶复制配置将应用于源表存储桶中的所有表。
-
登录到 AWS 管理控制台,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航窗格中,选择表存储桶。
-
在表存储桶列表中,选择要为其配置复制的表存储桶的名称。
-
选择管理选项卡。
-
在表存储桶复制配置部分,选择创建表存储桶复制配置。
-
在目标部分,配置您的复制目标:
-
在表存储桶 ARN 字段中,输入目标表存储桶的 ARN。格式为:
arn:aws:s3tables:region:account-id:bucket/table-bucket-name或者,也可以选择浏览 S3 以从您的账户中选择表存储桶。
-
(可选)要添加其他目标,请选择添加目标。您可以再添加最多 4 个表存储桶,对应总共 5 个目标。
-
-
在 IAM 角色部分中,配置复制角色:
-
对于 IAM 角色选择方法,选择以下选项之一:
-
创建新的 IAM 角色:Amazon S3 将创建一个具有所需复制权限的新角色。
-
从现有 IAM 角色中选择:选择具有所需复制权限的现有角色。
-
输入 IAM 角色 ARN:手动输入现有 IAM 角色的 ARN。
-
-
如果您选择了从现有 IAM 角色中选择,请从 IAM 角色下拉列表中选择一个角色。
-
(可选)选择查看以在 IAM 控制台中查看所选角色的权限。
-
-
选择创建复制配置。
创建复制配置后,Amazon S3 会开始初始回填过程。您可以在表复制状态部分中监控复制状态,该部分显示了有关每个目标的信息,包括复制状态、目标表 ARN 和上次复制的元数据。
此过程说明如何使用 Amazon S3 控制台创建表级别的复制配置。表复制配置将应用于特定表,并覆盖该表的任何存储桶级别的复制配置。
-
登录到 AWS 管理控制台,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航窗格中,选择表存储桶。
-
在表存储桶列表中,选择包含要复制的表的表存储桶的名称。
-
选择 Tables (表) 选项卡。
-
在表列表中,选择要复制的表的名称。
-
选择管理选项卡。
-
在表复制配置部分,选择创建表复制配置。
-
在目标部分,配置您的复制目标:
-
在表存储桶 ARN 字段中,输入目标表存储桶的 ARN。格式为:
arn:aws:s3tables:region:account-id:bucket/table-bucket-name或者,也可以选择浏览 S3 以从您的账户中选择表存储桶。
-
(可选)要添加其他目标,请选择添加目标。您可以再添加最多 4 个表存储桶,对应总共 5 个目标。
-
-
在 IAM 角色部分中,配置复制角色:
-
对于 IAM 角色选择方法,选择以下选项之一:
-
创建新的 IAM 角色:Amazon S3 将创建一个具有所需复制权限的新角色。
-
从现有 IAM 角色中选择:选择具有所需复制权限的现有角色。
-
输入 IAM 角色 ARN:手动输入现有 IAM 角色的 ARN。
-
-
如果您选择了从现有 IAM 角色中选择,请从 IAM 角色列表中选择一个角色。
-
(可选)选择查看以在 IAM 控制台中查看所选角色的权限。
-
-
选择创建复制配置。
接下来会发生什么?
在您创建复制配置后:
-
Amazon S3 开始初始回填过程,在每个目标存储桶中创建副本表
-
回填开始后,复制状态将更改为正在复制
-
您可以在管理选项卡上监控复制进度
-
初始复制时间取决于源表的大小
使用 AWS CLI 设置复制
此过程介绍如何使用 AWS CLI 配置复制。将账户 ID、区域和存储桶名称替换为实际值,并将所有目标存储桶添加到权限。
步骤 1:创建用于复制的 IAM 角色
首先,创建一个 Amazon S3 可以代入的 IAM 角色,用于复制您的表。
-
创建一个信任策略文档,该文档允许 S3 表类数据存储服务代入该角色。将其另存为
trust-policy.json:{ "Version": "2012-10-17" "Statement": [ { "Effect": "Allow", "Principal": { "Service": "replication.s3tables.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
创建 IAM 角色:
aws iam create-role \ --role-nameS3TablesReplicationRole\ --assume-role-policy-document file://trust-policy.json \ --description "Role for S3 Tables replication" -
创建授予复制权限的权限策略。将其另存为
replication-permissions.json:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableMaintenanceConfiguration", "s3tables:GetTableData" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*" }, { "Effect": "Allow", "Action": [ "s3tables:ListTables" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source" }, { "Effect": "Allow", "Action": [ "s3tables:CreateTable", "s3tables:CreateNamespace" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination" }, { "Effect": "Allow", "Action": [ "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*" } ] } -
将权限策略附加到角色:
aws iam put-role-policy \ --role-nameS3TablesReplicationRole\ --policy-nameS3TablesReplicationPermissions\ --policy-document file://replication-permissions.json -
(可选)如果使用了 KMS 加密,请将 KMS 权限添加到您的策略:
{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" ] }
(仅限跨账户)步骤 2:配置目标存储桶策略
如果要复制到其他 AWS 账户,则目标账户必须向源账户授予权限。
-
在目标账户中,为目标表存储桶创建一个存储桶策略。将其另存为
destination-bucket-policy.json:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/cross-account-test" }, "Action": [ "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/cross-account-test" }, "Action": [ "s3tables:CreateTable", "s3tables:CreateNamespace" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination" } ] } -
使用 S3 表类数据存储服务 API 应用策略:
aws s3tables put-table-bucket-policy \ --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/\ --policy file://amzn-s3-demo-table-bucket-cross-account-destinationdestination-bucket-policy.json\ --profiledestination-account -
修改您的源 KMS 密钥以允许 S3 表类数据存储服务复制和维护:
{ "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "allow replication to decrypt", "Effect": "Allow", "Principal": { "AWS": "replication_role_arn" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" }, { "Sid": "allow maintenance", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" } ] } -
同样,在目标 KMS 密钥策略中添加权限
{ "Version": "2012-10-17", "Id": "key-policy-3", "Statement": [ { "Sid": "allow maintenance", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" }, { "Sid": "allow replication to encrypt/decrypt", "Effect": "Allow", "Principal": { "AWS": "replication_role_arn" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" } ]
步骤 3:创建复制配置
您可以使用 AWS CLI 在表存储桶级别或表级别创建复制配置。有关更多信息,请参阅以下流程。
使用此方法可复制存储桶中的所有表。
-
创建复制配置文件。将其另存为
bucket-replication-config.json:例:同一个账户中的单个目标
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr" } ] } ] }例:跨区域的多个目标
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-dreu-west-1:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-euap-south-1:111122223333:bucket/" } ] } ] }amzn-s3-demo-table-bucket-apac例:跨账户复制
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/" } ] } ] }amzn-s3-demo-table-bucket-partner -
应用存储桶级别的复制配置:
aws s3tables put-table-bucket-replication \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket\ --configuration file://bucket-replication-config.json预期输出:
{ "versionToken": "3HL4kqtJl40Nr8X8gdRQBpUMLUo", "status": "Success" }
使用此方法可复制特定表或覆盖存储桶级别的复制。
-
创建复制配置文件。将其另存为
table-replication-config.json:例:单个表复制
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/" } ] } ] }amzn-s3-demo-table-bucket-analytics-bucket例:包含多个目标的表
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-dreu-west-1:111122223333:bucket/" } ] } ] }amzn-s3-demo-table-bucket-eu -
应用表级别的复制配置:
aws s3tables put-table-replication \ --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/\ --configuration file://amzn-s3-demo-table-bucket-sales-datatable-replication-config.json预期输出:
{ "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M", "status": "Success" }