当需要为关键数据实现异地容灾、创建跨账号的隔离备份,或满足数据驻留的合规性要求时,可使用对象存储 OSS 的跨区域复制功能。该功能可将一个存储空间(Bucket)内的数据对象,自动、异步地复制到另一个阿里云账号下、位于不同地域的目标 Bucket 中,从而提升数据持久性与业务可用性。
配置跨账号复制需要源账号和目标账号共同操作,分为以下三个步骤:
在源账号操作:创建一个 RAM 角色,并授予它读取源 Bucket 数据的权限。
在目标账号操作:修改目标 Bucket 的授权策略,允许上一步创建的 RAM 角色向其中写入数据。
返回源账号操作:创建一条复制规则,将源 Bucket 和目标 Bucket 关联起来,正式启动复制任务。
步骤一:在源账号创建并授权RAM角色
使用源账号创建RAM角色,信任主体类型选择云服务,受信服务选择对象存储。
在创建权限策略页面,单击脚本编辑页签,创建以下策略内容,并将策略中的
src-bucket
替换为实际的源Bucket名称。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ReplicateList", "oss:ReplicateGet" ], "Resource": [ "acs:oss:*:*:src-bucket", "acs:oss:*:*:src-bucket/*" ] } ] }
在授权页面,单击新增授权,授权主体选择创建的RAM角色,权限策略选择创建的自定义策略,然后单击确认新增授权。
在角色页面,选择已创建的RAM角色,进入基本信息页面并复制ARN,以备后续步骤使用。
步骤二:在目标账号授权 RAM 角色写入目标 Bucket
使用目标账号进入Bucket列表页面,单击目标Bucket。
在左侧导航栏,选择权限控制 > Bucket 授权策略。
单击按图形策略添加页签,然后单击接收复制对象。
在弹出的面板中,按如下说明配置:
UID及RAM角色获取方式: 选择从源端复制RAM角色ARN获取。
源端复制RAM角色ARN: 输入在步骤一中记录的源账号的RAM角色ARN。
授权用途: 选择跨账号跨区域复制。
单击生成Policy,然后单击保存。
步骤三:在源账号创建跨区域复制规则
跨区域复制规则一旦创建,将无法修改或删除。请在创建前仔细确认所有配置项。
使用源账号进入Bucket列表页面,单击源Bucket。
在左侧导航栏,选择数据管理 > 跨区域复制。
单击跨区域复制,在弹出的对话框中配置以下参数:
设置目标Bucket:选择在另一个账号中指定一个Bucket,然后选择目标Bucket所在地域并输入其名称。
设置复制策略:
数据复制对象:选择全部文件进行同步或指定文件名前缀进行同步。在源 Bucket内指定前缀的Object复制到目标Bucket,默认最多可以添加10个前缀。如需增加前缀数量,请联系技术支持申请调整,最多可提升至30个。
数据复制策略:选择数据同步的方式。在数据容灾场景下,选择增/改 同步可防止源Bucket的意外删除操作同步到备份Bucket,增强数据安全性。
增/改 同步:仅同步新建和修改的对象。删除源Bucket中的对象不会影响目标Bucket。通过这种方式,可以有效防止因源Bucket手动删除、通过生命周期自动删除的行为导致目标Bucket数据丢失的问题。
增/删/改 同步:同步新建、修改和删除操作,使目标Bucket与源Bucket保持一致。通过这种方式,确保了数据的一致性,适用于需要共享和访问同一数据集的多用户或应用程序环境。但是配置该策略后,当手动删除或者通过生命周期自动删除源Bucket内的Object时,目标Bucket也会删除对应的Object,且Object删除后无法恢复。
复制历史数据:选择是否复制规则生效前源Bucket中已有的数据。此操作会覆盖目标 Bucket 中的同名对象。为避免数据丢失,建议为源和目标Bucket都开启版本控制功能。
(可选)复制 KMS 加密目标对象:若希望复制到目标 Bucket 的数据使用 KMS 加密,请确保:
说明可通过HeadObject和GetBucketEncryption分别查询源Object和目标Bucket的加密状态。
在目标地域下已创建所需的 KMS 密钥(CMK)。
设置该 CMK 的密钥策略,在策略的其他账号使用者中添加步骤一创建的源账号 RAM 角色的 ARN,并授予其
kms:GenerateDataKey
和kms:Encrypt
权限。配置:
使用的KMS密钥:填写KMS密钥的ARN。
授权角色:下拉选择步骤一创建的角色。
(可选)设置复制加速:
传输加速: 当复制任务涉及中国内地与非中国内地地域时,可开启此功能以提升数据传输速度,此功能会产生额外传输加速费用。
数据复制时间控制(RTC): 将绝大多数增量数据的复制延迟控制在10分钟内。此功能仅在部分地域间支持且会产生额外跨区域复制RTC费用。详情请参见RTC功能说明。
确认所有配置无误后,单击确定并确认开启。
复制任务将在规则创建成功后的几分钟内启动。数据复制为异步过程,具体耗时取决于对象大小、数量以及跨地域网络延迟,可能从几分钟到几小时不等。可在源Bucket的跨区域复制页签查看复制进度,包括历史数据和增量数据的同步状态。
常见问题
为什么源Bucket中对象的存储类型或最后访问时间变更后,没有同步到目标Bucket?
创建数据复制规则后,在源 Bucket 中通过生命周期规则或 CopyObject 操作修改了对象的 存储类型 时,该变更不会同步到目标 Bucket。对象的 最后访问时间(x-oss-last-access-time) 属性同样不会同步。
分片上传的对象会被复制吗?
当通过分片上传方式上传的Object,每个分片的上传操作都会复制至目标Bucket。且在源Bucket中完成合并(CompleteMultipartUpload)后生成的完整对象也会被作为一个整体复制到目标Bucket。
为源账号的 RAM 角色授权时,有比自定义策略更简单的授权方式吗?
有。如果您希望快速授权,可以直接为创建的 RAM 角色授予阿里云官方提供的系统策略 AliyunOSSFullAccess
。但该策略包含您账号下所有 OSS 资源的所有权限,权限范围过大,强烈不推荐在生产环境中使用。请始终遵循最小权限原则。
为目标 Bucket 授权时,除了图形化界面,是否支持通过 JSON 策略进行配置?
支持。您可以在目标 Bucket 的Bucket 授权策略页面选择按语法策略添加来进行更灵活的配置。使用 JSON 策略时需注意以下几点:
新添加的策略会 覆盖 已有的 Bucket 策略,因此请确保新策略包含了所有需要的授权规则。
策略中的
Principal
字段需要填写源账号中 RAM 角色的 ARN。如果角色名称中包含大写字母,在策略中需要转换为小写。例如,角色
AliyunOssDrsRole
在策略中应写为aliyunossdrsrole
。需要准确填写源账号的 UID 和目标 Bucket 的名称及目标账号的 UID。
一个策略示例如下:
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:ReplicateList",
"oss:ReplicateGet",
"oss:ReplicatePut",
"oss:ReplicateDelete"
],
"Principal": [
"arn:sts::{源账号UID}:assumed-role/{角色名}/*"
],
"Resource":[
"acs:oss:*:{目标账号UID}:{目标Bucket名}",
"acs:oss:*:{目标账号UID}:{目标Bucket名}/*"
]
}
]
}