当您想将一个账号下的镜像同步到另一个账号时,您可以使用跨账号同步实例功能。跨账号同步实例功能不受地域限制,支持手动和自动的方式。
前提条件
如果您想将源实例的镜像同步到目标实例,请确保您的源实例为标准版或高级版,基础版的源实例不支持同步实例功能。目标实例可以是经济版、基础版、标准版和高级版。
- 您可以在实例列表页面单击企业版实例的右下角的升级,升级企业版实例规格。 
- 公有云Region不支持同步至非公有云Region(金融云、政务云等)。 
背景信息
跨账号同步实例支持阿里云账号和阿里云账号之间、RAM用户和RAM用户之间、阿里云账号和RAM用户之间的实例同步。
跨账号自动同步实例
通过配置同步规则,在源实例上传镜像时,自动触发将该镜像同步到另一个账号的目标实例中。本文假设源实例所在账号为A账号,目标实例所在的账号为B账号。
跨账号自动同步实例只会同步设定同步规则后上传的符合规则的镜像,存量的镜像无法同步。
存量镜像同步提供两种方案:
- 存量镜像数量不多时,您可以选择手动同步镜像。请参见跨账号手动同步实例和CreateRepoSyncTask。 
- 存量镜像数量较多时,推荐您使用OSS复制+ACR镜像导入方案: 
操作前准备
在进行跨账号自动同步实例之前,您需要先获取以下信息:
- 获取A账号和B账号的UID。具体操作,请参见如何查看主账号UID?。 说明- 如果您使用的是RAM用户,您需要获取RAM用户所在的主账号的UID。 
- 获取目标实例的所在地域和实例ID。 - 登录容器镜像服务控制台,在实例列表页面顶部选择地域,单击目标企业版实例。在概览页面可以查看实例所在地域,在实例信息区域可以查看实例ID。 
- 跨账号自动同步实例支持按照命名空间和仓库同步: - 按照命名空间同步时,目标实例和源实例必须有相同的命名空间,并且目标实例的命名空间已开启自动创建仓库的能力。关于开启自动创建仓库的更多信息,请参见创建命名空间。 
- 按照仓库同步时,目标实例和源实例必须有相同的命名空间和镜像仓库。 
 
步骤一:在B账号中对A账号进行授权
在B账号中对A账号进行授权,允许A账号可以同步镜像到B账号的实例中。
- 创建aliyuncontainerregistrycrossaccoutsyncrole角色。 说明- 角色名称必须为aliyuncontainerregistrycrossaccoutsyncrole。 - 使用B账号登录RAM控制台 
- 在控制台左侧导航栏选择,在右侧页面单击创建角色。 
- 在创建角色页面,选择信任主体类型为云账号,然后设置具体的阿里云账号,最后单击确定。 
- 在创建角色弹框中,输入aliyuncontainerregistrycrossaccoutsyncrole角色名称后,单击确定。 
 
- 创建权限策略。 - 在RAM控制台左侧导航栏选择,单击创建权限策略。 
- 在创建权限策略页面选择脚本编辑,根据实际情况替换以下内容中的 - Resource字段,然后将以下内容复制到文档框中,单击确定。然后在创建权限策略对话框中填写策略名称和备注。说明- Resource:授权资源,格式为 - acs:cr:<B账号目标实例所在地域>:<B账号UID>:instance/<B账号目标实例ID>。- 如果B账号为RAM用户, - Resource中- B账号UID为RAM用户所在主账号的UID。- { "Statement": [ { "Effect": "Allow", "Action": [ "cr:CreateSyncRule", "cr:CreateRepositorySync" ], "Resource": "acs:cr:cn-beijing:151356101970****:instance/cri-4im1o411ls8g****" }, { "Effect": "Allow", "Action": [ "cr:CreateSyncRule", "cr:CreateRepositorySync" ], "Resource": "acs:cr:cn-hangzhou:151356101970****:instance/cri-4im1o411ls8gxr****" } ], "Version": "1" }
 
- 为aliyuncontainerregistrycrossaccoutsyncrole角色添加上文创建的权限策略。 - 在权限策略管理页面搜索上文创建的权限策略名称,单击上文创建的权限策略名称。 
- 单击引用记录页签,然后单击新增授权。 
- 在添加权限面板设置资源范围为账号级别,授权主体为aliyuncontainerregistrycrossaccoutsyncrole,然后单击确定新增授权。 
- 单击关闭。 
 
- 修改aliyuncontainerregistrycrossaccoutsyncrole角色的信任策略。 - 在RAM控制台左侧导航栏选择。 
- 在角色页面搜索aliyuncontainerregistrycrossaccoutsyncrole,单击aliyuncontainerregistrycrossaccoutsyncrole。 
- 单击信任策略,然后单击编辑信任策略。 
- 根据实际情况替换以下内容中 - Service字段,然后将以下内容复制到文档框中,单击保存信任策略。说明- Service:授权对象,格式为 - <A账号的UID>@cr.aliyuncs.com。- 如果A账号为RAM用户, - Service中- A账号UID为RAM用户所在主账号的UID。- { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "125287961064****@cr.aliyuncs.com" ] } } ], "Version": "1" }
 
步骤二:创建同步规则
- 使用A账号登录容器镜像服务控制台。 
- 在顶部菜单栏,选择所需地域。 
- 在左侧导航栏,选择实例列表。 
- 在实例列表页面单击目标企业版实例。 
- 在企业版实例管理页面左侧导航栏选择,在右侧页面单击新建规则。 
- 在新建规则对话框实例信息配置向导中设置参数,单击下一步。 - 参数 - 说明 - 规则名称 - 设置同步规则的名称。 - 同步场景 - 设置同步场景为跨账号。 - 目标UID - 输入目标实例所在账号的UID。 - 目标实例 - 选择目标实例所在地域,输入目标实例ID。 
- 在同步信息配置向导中设置同步级别,可选按照命名空间和仓库同步,选择相应的命名空间或者仓库,设置仓库版本过滤规则,然后单击创建同步规则。 - 在企业版实例管理页面选择,在同步记录页面可以看到同步任务的状态为同步成功,同时在目标实例中可以看到推送的镜像,说明跨账号自动同步实例成功。 
跨账号手动同步实例
通过配置同步规则,手动将源实例的镜像推送到另一个账号的目标实例中。本文假设源实例所在账号为A账号,目标实例所在的账号为B账号。
- 获取A账号和B账号的UID,目标实例的所在地域和实例ID。具体操作,请参见上文的操作前准备。 
- 在B账号中对A账号进行授权,允许A账号可以同步镜像到B账号的实例中。具体操作,请参见上文的步骤一。 
- 登录容器镜像服务控制台。 
- 在顶部菜单栏,选择所需地域。 
- 在左侧导航栏,选择实例列表。 
- 在实例列表页面单击目标企业版实例。 
- 在企业版实例管理页面选择。 
- 在镜像仓库页面单击目标镜像仓库的名称。 
- 在镜像仓库详情页面左侧导航栏单击镜像版本,然后单击目标镜像右侧操作列下的同步。 
- 在镜像同步对话框设置同步场景为跨账号,输入目标实例账号UID,选择目标仓库,输入目标实例ID、目标命名空间、目标仓库名称和镜像版本,然后单击确定。 - 在企业版实例管理页面选择,在同步记录页面可以看到同步任务的状态为同步成功,同时在目标实例中可以看到同步的镜像,说明跨账号手动同步实例成功。 
相关文档
若您想将一个账号下的镜像同步到该账号的其他地域时,您可以参考同账号同步实例来操作,无需进行账号授权。