跨账号跨区域复制

当需要为关键数据实现异地容灾、创建跨账号的隔离备份,或满足数据驻留的合规性要求时,可使用对象存储 OSS 的跨区域复制功能。该功能可将一个存储空间(Bucket)内的数据对象,自动、异步地复制到另一个阿里云账号下、位于不同地域的目标 Bucket 中,从而提升数据持久性与业务可用性。

配置跨账号复制需要源账号和目标账号共同操作,分为以下三个步骤:

  1. 在源账号操作:创建一个 RAM 角色,并授予它读取源 Bucket 数据的权限。

  2. 在目标账号操作:修改目标 Bucket 的授权策略,允许上一步创建的 RAM 角色向其中写入数据。

  3. 返回源账号操作:创建一条复制规则,将源 Bucket 和目标 Bucket 关联起来,正式启动复制任务。

步骤一:在源账号创建并授权RAM角色

  1. 使用源账号创建RAM角色信任主体类型选择云服务受信服务选择对象存储

  2. 创建权限策略页面,单击脚本编辑页签,创建以下策略内容,并将策略中的src-bucket替换为实际的源Bucket名称。

    {
       "Version": "1",
       "Statement": [
          {
             "Effect": "Allow",
             "Action": [
                "oss:ReplicateList",
                "oss:ReplicateGet"
             ],
             "Resource": [
                "acs:oss:*:*:src-bucket",
                "acs:oss:*:*:src-bucket/*"
             ]
          }
       ]
    }
  3. 授权页面,单击新增授权授权主体选择创建的RAM角色,权限策略选择创建的自定义策略,然后单击确认新增授权

  4. 角色页面,选择已创建的RAM角色,进入基本信息页面并复制ARN,以备后续步骤使用。

步骤二:在目标账号授权 RAM 角色写入目标 Bucket

  1. 使用目标账号进入Bucket列表页面,单击目标Bucket。

  2. 在左侧导航栏,选择权限控制 > Bucket 授权策略

  3. 单击按图形策略添加页签,然后单击接收复制对象

  4. 在弹出的面板中,按如下说明配置:

    • UIDRAM角色获取方式: 选择从源端复制RAM角色ARN获取

    • 源端复制RAM角色ARN: 输入在步骤一中记录的源账号的RAM角色ARN。

    • 授权用途: 选择跨账号跨区域复制

  5. 单击生成Policy,然后单击保存

步骤三:在源账号创建跨区域复制规则

重要

跨区域复制规则一旦创建,将无法修改或删除。请在创建前仔细确认所有配置项。

  1. 使用源账号进入Bucket列表页面,单击源Bucket。

  2. 在左侧导航栏,选择数据管理 > 跨区域复制

  3. 单击跨区域复制,在弹出的对话框中配置以下参数:

    1. 设置目标Bucket:选择在另一个账号中指定一个Bucket,然后选择目标Bucket所在地域并输入其名称。

    2. 设置复制策略:

      • 数据复制对象:选择全部文件进行同步指定文件名前缀进行同步。在源 Bucket内指定前缀的Object复制到目标Bucket,默认最多可以添加10个前缀。如需增加前缀数量,请联系技术支持申请调整,最多可提升至30个。

      • 数据复制策略:选择数据同步的方式。在数据容灾场景下,选择增/改 同步可防止源Bucket的意外删除操作同步到备份Bucket,增强数据安全性。

        • 增/改 同步:仅同步新建和修改的对象。删除源Bucket中的对象不会影响目标Bucket。通过这种方式,可以有效防止因源Bucket手动删除、通过生命周期自动删除的行为导致目标Bucket数据丢失的问题。

        • 增/删/改 同步:同步新建、修改和删除操作,使目标Bucket与源Bucket保持一致。通过这种方式,确保了数据的一致性,适用于需要共享和访问同一数据集的多用户或应用程序环境。但是配置该策略后,当手动删除或者通过生命周期自动删除源Bucket内的Object时,目标Bucket也会删除对应的Object,且Object删除后无法恢复。

      • 复制历史数据:选择是否复制规则生效前源Bucket中已有的数据。此操作会覆盖目标 Bucket 中的同名对象。为避免数据丢失,建议为源和目标Bucket都开启版本控制功能。

      • (可选)复制 KMS 加密目标对象:若希望复制到目标 Bucket 的数据使用 KMS 加密,请确保:

        说明

        可通过HeadObjectGetBucketEncryption分别查询源Object和目标Bucket的加密状态。

        1. 在目标地域下已创建所需的 KMS 密钥(CMK)

        2. 设置该 CMK 的密钥策略,在策略的其他账号使用者中添加步骤一创建的源账号 RAM 角色的 ARN,并授予其 kms:GenerateDataKey 和 kms:Encrypt 权限。

        3. 配置:

          1. 使用的KMS密钥:填写KMS密钥的ARN。

          2. 授权角色:下拉选择步骤一创建的角色。

    3. (可选)设置复制加速:

      • 传输加速: 当复制任务涉及中国内地与非中国内地地域时,可开启此功能以提升数据传输速度,此功能会产生额外传输加速费用

      • 数据复制时间控制(RTC): 将绝大多数增量数据的复制延迟控制在10分钟内。此功能仅在部分地域间支持且会产生额外跨区域复制RTC费用。详情请参见RTC功能说明

  4. 确认所有配置无误后,单击确定确认开启

    复制任务将在规则创建成功后的几分钟内启动。数据复制为异步过程,具体耗时取决于对象大小、数量以及跨地域网络延迟,可能从几分钟到几小时不等。可在源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名}/*"
            ]
        }
    ]
}