跨账号备份

为便于企业内部采用中心化统一策略进行数据灾备保护、合规性审计等,云备份对云上资源支持跨阿里云账号进行备份和恢复。本文介绍如何在阿里云账号B下创建RAM角色并授权给阿里云账号A,允许A以服务关联角色SLR(AliyunServiceRoleForHbrCrossAccountBackup)扮演B的RAM角色来访问B的资源,从而实现A跨账号备份和恢复B的阿里云资源。

背景信息

在典型的LandingZone架构最佳实践中,企业内存在不同多个部门多个阿里云账号,开发或者测试环境需要隔离。而数据灾备保护、合规性审计等则采取中心化统一策略。更多信息,请参见Landing Zone企业上云架构

例如在某企业内,拥有两个独立的生产环境账号A和测试环境账号B。现需要统一备份两个账号下的资源,且生产账号A的数据可以恢复至测试账号B作开发测试用途,测试账号B的数据可恢复至生产账号A做版本更新。此时可以挑选两个账号中的一个作为中心备份账号,或者新创建一个中心备份账号。A和B通过RAM授权给中心备份账号进行备份,A和B中的数据也可以跨账号恢复。

image

使用限制

重要
  • 目前支持ECS整机备份、ECS文件备份、NAS备份、OSS备份、Tablestore备份、ECS数据库备份和SAP HANA备份场景使用跨账号备份功能。ECS整机备份跨账号备份后,恢复操作时只能恢复到原阿里云账号。具体支持场景请以云备份控制台提示为准。

  • 支持地域:请参考地域支持的功能特性

授权原理

以阿里云账号A备份阿里云账号B资源为例,说明其授权原理:

  1. 账号A创建服务关联角色AliyunServiceRoleForHbrCrossAccountBackup,云备份用此角色来扮演账号B的RAM角色进行数据备份。

  2. 账号B创建RAM角色hbrcrossrole,然后:

    1. 精确授权:先授予RAM角色hbrcrossrole系统策略AliyunHBRRolePolicy。该策略拥有访问账号B资源的权限,内容如下:

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "nas:DescribeFileSystems",
              "nas:CreateMountTargetSpecial",
              "nas:DeleteMountTargetSpecial",
              "nas:DescribeMountTargets",
              "nas:DescribeAccessGroups"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "ecs:RunCommand",
              "ecs:CreateCommand",
              "ecs:InvokeCommand",
              "ecs:DeleteCommand",
              "ecs:DescribeCommands",
              "ecs:StopInvocation",
              "ecs:DescribeInvocationResults",
              "ecs:DescribeCloudAssistantStatus",
              "ecs:DescribeInstances",
              "ecs:DescribeInstanceRamRole",
              "ecs:DescribeInvocations",
              "ecs:CreateSnapshotGroup",
              "ecs:DescribeSnapshotGroups",
              "ecs:DeleteSnapshotGroup",
              "ecs:CopySnapshot"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": "bssapi:QueryAvailableInstances",
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "ecs:AttachInstanceRamRole",
              "ecs:DetachInstanceRamRole"
            ],
            "Resource": [
              "acs:ecs:*:*:instance/*",
              "acs:ram:*:*:role/aliyunecsaccessinghbrrole"
            ],
            "Effect": "Allow"
          },
          {
            "Action": [
              "ram:PassRole",
              "ram:GetRole",
              "ram:GetPolicy",
              "ram:ListPoliciesForRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "hcs-sgw:DescribeGateways"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "oss:ListBuckets",
              "oss:GetBucketInventory",
              "oss:ListObjects",
              "oss:HeadBucket",
              "oss:GetBucket",
              "oss:GetBucketAcl",
              "oss:GetBucketLocation",
              "oss:GetBucketInfo",
              "oss:PutObject",
              "oss:CopyObject",
              "oss:GetObject",
              "oss:AppendObject",
              "oss:GetObjectMeta",
              "oss:PutObjectACL",
              "oss:GetObjectACL",
              "oss:PutObjectTagging",
              "oss:GetObjectTagging",
              "oss:InitiateMultipartUpload",
              "oss:UploadPart",
              "oss:UploadPartCopy",
              "oss:CompleteMultipartUpload",
              "oss:AbortMultipartUpload",
              "oss:ListMultipartUploads",
              "oss:ListParts"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Effect": "Allow",
            "Action": [
              "ots:ListInstance",
              "ots:GetInstance",
              "ots:ListTable",
              "ots:CreateTable",
              "ots:UpdateTable",
              "ots:DescribeTable",
              "ots:BatchWriteRow",
              "ots:CreateTunnel",
              "ots:DeleteTunnel",
              "ots:ListTunnel",
              "ots:DescribeTunnel",
              "ots:ConsumeTunnel",
              "ots:GetRange",
              "ots:ListStream",
              "ots:DescribeStream",
              "ots:CreateIndex",
              "ots:CreateSearchIndex",
              "ots:DescribeSearchIndex",
              "ots:ListSearchIndex"
            ],
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "cms:QueryMetricList"
            ],
            "Resource": "*"
          },
          {
            "Action": [
              "ecs:DescribeSecurityGroups",
              "ecs:DescribeImages",
              "ecs:CreateImage",
              "ecs:DeleteImage",
              "ecs:DescribeSnapshots",
              "ecs:CreateSnapshot",
              "ecs:DeleteSnapshot",
              "ecs:DescribeSnapshotLinks",
              "ecs:DescribeAvailableResource",
              "ecs:ModifyInstanceAttribute",
              "ecs:CreateInstance",
              "ecs:DeleteInstance",
              "ecs:AllocatePublicIpAddress",
              "ecs:CreateDisk",
              "ecs:DescribeDisks",
              "ecs:AttachDisk",
              "ecs:DetachDisk",
              "ecs:DeleteDisk",
              "ecs:ResetDisk",
              "ecs:StartInstance",
              "ecs:StopInstance",
              "ecs:ReplaceSystemDisk",
              "ecs:ModifyResourceMeta"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "vpc:DescribeVpcs",
              "vpc:DescribeVSwitches"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "kms:ListKeys",
              "kms:ListAliases"
            ],
            "Resource": "*",
            "Effect": "Allow"
          }
        ]
      }
    2. 修改信任策略仅允许账号A的服务关联角色SLR(AliyunServiceRoleForHbrCrossAccountBackup)扮演账号B的RAM角色来访问阿里云账号B的资源。

  3. 在账号A的云备份控制台添加跨账号备份账号B,其中角色名称必须为获得授权的RAM角色hbrcrossrole

  4. 在账号A的云备份控制台切换到账号B,就可以使用账号A备份和恢复账号B的资源。

假设使用阿里云账号A跨账号备份和恢复阿里云账号B的资源,账号A和账号B允许的操作如下表所示:

账号B的资源

账号A允许的操作(备份管理账号)

账号B允许的操作(待备份资源账号)

ECS整机

  • 查看账号B的待备份ECS

  • 管理ECS整机备份策略

  • 为账号A的ECS配置备份策略/发起备份

  • 管理ECS整机备份点/发起恢复

  • 查看待备份ECS

  • 在快照控制台查看或使用通过ECS整机备份创建的快照

其他类型资源

  • 查看账号B的待备份资源

  • 管理备份计划/策略

  • 对账号B的资源发起备份/恢复

  • 查看待备份资源

费用说明

使用云备份提供的跨账号备份功能是免费的。但备份恢复产生的费用由备份管理账号(阿里云账号A)支付,其中ECS整机备份的快照服务费用、OSS请求费用仍由原账号(阿里云账号B)支付。更多信息,请参见计费方式与计费项

假设使用阿里云账号A跨账号备份和恢复阿里云账号B的资源,账号A和账号B的计费项如下表所示:

账号B的资源

账号A计费项(备份管理账号)

账号B计费项(待备份资源账号)

ECS整机

  • ECS整机备份软件使用费

  • 快照容量费

  • 开启备份异地复制后所产生的跨地域流量费和目标地域快照容量费

ECS文件

  • 文件备份软件使用费

  • 备份库存储容量费

  • 开启备份异地复制后所产生的镜像备份库存储容量费和备份库跨地域复制流量费

/

NAS

  • 备份库存储容量费

  • 开启备份异地复制后所产生的镜像备份库存储容量费和备份库跨地域复制流量费

  • 访问NAS的低频存储数据时,备份服务产生的NAS低频存储读写流量费

OSS

  • 备份库存储容量费

  • 开启备份异地复制后所产生的镜像备份库存储容量费和备份库跨地域复制流量费

  • 备份服务产生的OSS请求费

Tablestore

  • 备份库存储容量费

  • 开启备份异地复制后所产生的镜像备份库存储容量费和备份库跨地域复制流量费

/

ECS数据库

  • 数据库备份仓库租用费

  • 数据库备份存储容量费

/

SAP HANA

  • SAP HANA 备份软件使用费

  • 备份库存储容量费

  • 开启备份异地复制后所产生的镜像备份库存储容量费和备份库跨地域复制流量费

/

步骤一:为阿里云账号A创建服务关联角色

使用阿里云账号A进行跨账号备份和恢复,您需要为阿里云账号A授权服务关联角色AliyunServiceRoleForHbrCrossAccountBackup。

  • 角色名称:AliyunServiceRoleForHbrCrossAccountBackup

  • 权限策略:AliyunServiceRolePolicyForHbrCrossAccountBackup

  • 权限说明:允许备份服务跨账号访问其他被授权账号的资源,以进行跨账号备份和恢复。

重要

该操作只需要在首次进入时操作一次。

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在左侧导航栏,选择备份>跨账号备份

    页面会弹出授权对话框,根据提示授权角色。

  3. 云备份服务授权对话框中,单击确认授权

    image.png更多信息,请参见云备份服务关联角色

步骤二:为阿里云账号B创建RAM角色

  1. 使用阿里云账号B登录RAM控制台

  2. 在左侧导航栏中,选择身份管理 > 角色

  3. 角色页面,单击创建角色

  4. 选择类型配置向导中,选择可信实体类型为阿里云账号,然后单击下一步

  5. 配置角色配置向导中,配置如下内容,然后单击完成

    参数

    说明

    角色名称

    输入RAM角色名称,例如hbrcrossrole

    备注

    输入创建RAM角色的备注信息。

    选择信任的云账号

    选择其它云账号。此处选择账号A的账号ID。

    说明

    您可以访问安全设置页面查看阿里云账号ID。

  6. 创建完成配置向导中,单击关闭

步骤三:为RAM角色授权

创建RAM角色后,您可以使用该RAM角色进行相关操作,但该RAM角色无任何权限,您需要为该RAM角色授予系统策略或自定义策略。在精确授权界面,RAM默认提供两种系统策略,请选择一种授权。

  • AdministratorAccess:授予目标账号管理所有云资源的权限。

  • AliyunHBRRolePolicy:(推荐)授予云备份系统权限策略。

本文以为RAM角色授予AliyunHBRRolePolicy权限为例。

  1. 使用阿里云账号B登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 角色

  3. 找到目标RAM角色(例如hbrcrossrole),进入目标RAM角色详情页。

  4. 权限管理页签,单击精确授权

  5. 精确授权面板,选择权限类型为系统策略,输入策略名称为AliyunHBRRolePolicy,然后单击确定

  6. 系统提示精确授权成功,单击关闭

  7. 修改该RAM角色的信任策略。

    1. 在当前角色的详情页面,单击信任策略

    2. 单击编辑信任策略

    3. 在编辑框中,将下述代码复制至文本框。其中目标账号ID为阿里云账号A的账号ID。

      该策略表示阿里云账号A有权限通过云备份获取临时Token来操作阿里云账号B的资源。

      说明

      您可以访问安全设置页面查看阿里云账号ID。

      {
       "Statement": [
           {
               "Action": "sts:AssumeRole",
               "Effect": "Allow",
               "Principal": {
                   "RAM": [
                       "acs:ram::目标账号ID:role/AliyunServiceRoleForHbrCrossAccountBackup"
                   ]
               }
           }
       ],
       "Version": "1"
      }
    4. 单击保存信任策略。配置完成。

步骤四:添加备份账号

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在顶部菜单栏,选择所在地域。

    重要

    如果您要备份阿里云账号B在地域regionC的ECS文件、NAS、OSS、Tablestore、数据库或ECS整机,请选择地域regionC。即待备份资源在哪个地域,就在哪个地域添加备份账号。

  3. 在左侧导航栏,选择备份>跨账号备份

  4. 跨账号备份,单击添加备份账号

  5. 添加备份账号对话框,配置以下参数,然后单击确定

    image.png

    参数

    说明

    阿里云账号ID

    输入您的阿里云账号ID。此处填写账号B的账号ID。

    说明

    您可以访问安全设置页面查看阿里云账号ID。

    角色名称

    输入已创建的RAM角色名称。此处填写hbrcrossrole,即您在步骤二:为阿里云账号B创建RAM角色创建的RAM角色名称。

    重要

    您可以单击授权检查,检查之前配置授权是否正确。若提示错误,请检查之前配置后重试。通过检查时,界面会提示此角色已经授权您访问其所属资源的权限

    账号别名

    您可以任意设置账号别名,方便进行备份账号的管理。

    创建成功后,您可以看到已经增加一条跨账号备份记录。

    zhanghao

步骤五:开始跨账号备份

创建完成后,您就可以使用阿里云账号A登录控制台,切换账号,进行跨账号备份阿里云账号B的数据源。

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在顶部菜单栏,选择待备份资源所在的地域。

  3. 单击登录账号,选择阿里云账号B。image.png

  4. 在左侧导航选择不同备份功能,就可以进行跨账号备份了。

    重要

    目前支持ECS文件备份、NAS备份、OSS备份、Tablestore备份、数据库备份和SAP HANA备份场景使用跨账号备份功能。ECS整机备份跨账号备份后,恢复操作时只能恢复到原阿里云账号。具体支持场景请以云备份控制台提示为准。

    例如,当您选择ECS文件备份,就可以看到ECS实例列表中已经读取到阿里云账号B名下的ECS资产。备份完成后,阿里云账号B的数据源已经备份到阿里云账号A的备份库。

步骤六:跨账号恢复

您已完成了阿里云账号A备份阿里云账号B的数据源。此时,备份库包含了阿里云账号A(未进行跨账号备份之前的数据)和阿里云账号B的数据备份,备份库是通用的。您可以从备份库的任意历史备份点进行恢复,可以恢复至账号A,也可以恢复到账号B。

  1. 切换账号。

    备份库是通用的,阿里云账号A和B都可以使用备份库中的历史备份点进行恢复。您希望恢复哪个账号的数据,就切换到哪个账号。

  2. 创建恢复任务。创建恢复任务的操作步骤,与各数据源恢复步骤一致。

    image.png

如何取消跨账号备份功能

重要
  • 取消跨账号备份功能后,阿里云账号A无法再备份阿里云账号B的数据源。请谨慎评估后操作。

  • 建议您保留对其他账号的跨账号备份功能,不进行备份恢复操作,不会新增费用。

  • 之前已经备份的数据仍然保留在备份库,这些数据继续占用存储容量,云备份会继续收取容量费用。希望停止计费,请参见云备份服务如何停止计费?。注意删除备份后数据不可恢复。

  1. 切换到阿里云账号B,在对应数据源页面,卸载备份客户端(如果有)、注销实例、删除备份库等。具体操作,请参见云备份服务如何停止计费?

  2. 切换到阿里云账号A,在云备份控制台的跨账号备份页面,删除阿里云账号B。image.png

  3. 删除为阿里云账号B创建的RAM角色。

    1. 使用阿里云账号B登录RAM控制台

    2. 在左侧导航栏中,选择身份管理 > 角色

    3. 找到为阿里云账号B创建的RAM角色,例如hbrcrossrole。在其操作列,进行删除。

相关文档