背景
在使用Data Lake Analytics(https://et.aliyun.com/bdad/datalake)进行OSS数据分析时,通常云账号A是访问自己的OSS bucket数据,如果有访问其他云账号(假设云账号B)的OSS数据的需求,本文正好帮到您,教您如何通过DLA实现DLA跨云账号分析OSS数据。下文都是假设“云账号A需要通过DLA访问云账号B的OSS数据”。
步骤一:新建用于跨账号访问的RAM角色
使用云账号B登录访问控制(https://ram.console.aliyun.com),点击RAM角色管理。
然后,在右侧页面点击新建RAM角色。
**
在弹出的新建RAM角色页面中,选择阿里云服务,选择受信服务物联网(这里只是以物联网受信服务为模板,后面进行修改),在RAM角色名称中输入:for-dla-cross-account(名字可以自己定义)。
确定后,显示RAM角色新建成功。
步骤二:修改RAM角色的信任策略
仍然在RAM中,在RAM角色管理页面,输入步骤一中创建好的RAM角色名称for-dla-cross-account(如果您自己定义了名称,输入相应名称),搜索到对应角色。
点击for-dla-cross-account(或者您实际的角色名称),进入后,选择信任策略管理,点击修改信任策略。
在页面中,将Service部分的iot.aliyuncs.com替换成<云账号A>@openanalytics.aliyuncs.com,例如111111111@openanalytics.aliyuncs.com,其中111111111为云账号A的云账号。
点击确认保存。
在如下页面右上角,复制ARN的URL:acs:ram::2222222222:role/for-dla-cross-account(以您实际显示的URL为准,其中2222222222是云账号B的云账号),后面在DLA中建schema时要用到。
步骤三:为RAM角色添加OSS访问权限
点击权限管理,添加权限。
选择AliyunOSSFullAccess,如果只是查询,也可以选择AliyunOSSReadOnlyAccess。因为后续可能在DLA中执行INSERT OVERWRITE操作,建议这里选择AliyunOSSFullAccess。确定保存。
显示授权成功。
步骤四:DLA中建schema和table进行查询
经过上述三步,云账号B中,跨账号访问的RAM角色和权限已经准备好。云账号A可以通过DLA访问云账号B的OSS了。
- 创建指向云账号B OSS bucket的schema,其中为云账号B的OSS bucket,cross_account_accessing_arn指向上述步骤二中的ARN URL。
CREATE DATABASE `schema_of_account_b`
WITH DBPROPERTIES (
catalog = 'oss',
location = 'oss://<account_b_bucket>/',
cross_account_accessing_arn= 'acs:ram::2222222222:role/for-dla-cross-account'
)
COMMENT ''
- 在schema_of_account_b中指向云账号B的目标OSS bucket数据进行建表查询,以下为示例。
CREATE EXTERNAL TABLE `schema_of_account_b`.`nation` (
`n_nationkey` int,
`n_name` string,
`n_regionkey` int,
`n_comment` string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS `TEXTFILE`
LOCATION 'oss://<account_b_bucket>/...'
小结:
本文通过4步骤实现了DLA对跨云账号的OSS数据访问。
- 创建跨账号访问的RAM角色
- 修改RAM角色的信任策略
- 为RAM角色添加OSS访问角色
- DLA中建schema和table查询
Data Lake Analytics首购和流量包优惠
首购用户1元10TB,流量包阶梯折扣优惠:https://et.aliyun.com/bdad/datalake
产品详情:https://www.aliyun.com/product/datalakeanalytics
云栖社区:https://yq.aliyun.com/teams/396
知乎社区:https://zhuanlan.zhihu.com/data-lake-analytics