全部产品
Search
文档中心

表格存储:跨账号授权

更新时间:Jan 18, 2024

本文介绍不同账号之间如何实现表格存储和MaxCompute之间的无缝连接。

准备工作

跨云账号需要两个阿里云账号,账号A将访问权限授予账号B,则运行MaxCompute时,账号B可以访问账号A下的表数据。账号基本信息如下:

说明

以下信息仅为示例,在操作时请替换为实际使用的信息。

项目

表格存储

MaxCompute

阿里云账号名

账号A

账号B

UID

1234567890****

5678901234****

使用MaxCompute跨云账号访问表格存储前,您需要完成以下准备工作:

  • MaxCompute产品详情页为账号B开通MaxCompute服务,并创建工作空间。具体操作,请参见创建工作空间

  • 分别获取账号A和账号B的AccessKey。具体操作,请参见获取AccessKey

  • 使用账号A创建可信实体为阿里云账号的RAM角色并设置信任策略内容。具体操作,请参见创建可信实体为阿里云账号的RAM角色修改RAM角色的信任策略

    说明

    策略内容中的5678901234****为账号B的UID。

    本示例中假设创建的RAM角色名称为AliyunODPSRoleForOtherUser,其信任策略内容示例如下,表示该RAM角色可以被账号B下的MaxCompute服务扮演。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "5678901234****@odps.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
                            
  • 记录账号A的RAM角色AliyunODPSRoleForOtherUser的ARN(例如acs:ram::1234567890****:role/aliyunodpsroleforotheruser),用于后续创建外表时配置。fig_20220706_arn

  • 创建权限策略并为账号A的RAM角色AliyunODPSRoleForOtherUser授权。具体操作,请参见创建自定义权限策略为RAM角色授权

    自定义权限策略示例如下,表示RAM角色具有读写账号A华东1(杭州)地域中名称为cap1的实例及其下所有表的权限。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ots:*",
          "Resource": [
          "acs:ots:cn-hangzhou:1234567890****:instance/cap1",
          "acs:ots:cn-hangzhou:1234567890****:instance/cap1/table/*"
          ],
          "Condition": {}
        }
      ]
    }

    关于自定义权限的更多信息,请参见自定义RAM Policy

  • 在表格存储控制台创建实例和创建数据表。具体操作,请参见创建实例和数据表

    在本示例中,创建的表格存储实例和数据表信息如下:

    • 实例名称:cap1

    • 数据表名称:vehicle_track

    • 主键信息:vid (integer),gt (integer)

    • 访问域名:https://cap1.cn-hangzhou.ots-internal.aliyuncs.com

      说明

      使用MaxCompute访问表格存储时,建议使用表格存储的私网地址。

    • 确保实例网络类型配置为允许任意网络访问

使用MaxCompute访问表格存储

跨账号访问的操作与同账号下的访问相同,只是在创建外部表时要使用角色ARN(即rolearn)。

账号B通过MaxCompute创建外部表,指定准备工作中创建的角色ARN来访问表格存储。

CREATE EXTERNAL TABLE ads_log_ots_pt_external
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
WITH SERDEPROPERTIES (
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption',
'tablestore.table.name'='vehicle_track',
'odps.properties.rolearn'='acs:ram::1234567890****:role/aliyunodpsroleforotheruser'
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'
USING 'odps-udf-example.jar'