Hologres从V3.0版本开始,支持给实例内账号配置RAMRole的映射关系,登录账号通过扮演一个RAMRole来实现跨账号访问外部系统,当前仅支持使用RAMRole的方式访问DLF2.0数据源和其他Hologres实例。本文为您介绍CREATE USER MAPPING的用法及限制条件。
背景信息
User Mapping定义了Hologres登录用户和阿里云账号的映射关系,允许Hologres当前用户(包括BASIC用户)通过User Mapping的方式跨账号访问外部服务,如MaxCompute、DLF、OSS以及Hologres跨库查询。详情请参见PostgreSQL CREATE USER MAPPING。
使用限制
授予权限给普通用户需要是Hologres实例的SuperUser或者Foreign Server的Owner权限,以及拥有Foreign Server Usage权限的用户也可以为自己创建User Mapping。
MaxCompute数据源和DLF1.0不支持以RAMRole方式配置User Mapping。
语法说明
External Database配置方式
MaxCompute数据源
CREATE USER MAPPING FOR "<user_name>"
EXTERNAL DATABASE <ext_db_name>
OPTIONS
(
access_id '<Access_id>',
access_key '<Access_key>'
);
DLF数据源
CREATE USER MAPPING FOR "<user_name>"
EXTERNAL DATABASE <ext_db_name>
OPTIONS
(
-- For DLF1.0
[dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx',
oss_access_id 'LTxxxxxxxxxx',
oss_access_key 'y8xxxxxxxxxxxxx']
-- For DLF2.0
[dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx'] |
[rolearn 'RoleARN']
);
当使用RoleARN方式配置User Mapping时,需要在RAM侧配置权限策略hologram::GrantAssumeRole
,Hologres通过该策略判断当前用户是否有创建到对应RoleARN的User Mapping的权限。通过该权限检查的用户,可以为holo中任意用户创建到对应RoleARN的User Mapping。示例如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "hologram:GrantAssumeRole",
"Resource": "<Role_ARN>"
}
]
}
参数说明
参数名称 | 功能说明 |
user_name | 待授权的账号,比如其他RAM子账号、Hologres内部账号(BASIC账号)、public(面向所有用户公开访问,请谨慎操作)。 |
ext_db_name | 使用CREATE EXTERNAL DATABASE在Hologres实例中创建的外部数据库,用来加载外部数据源的元数据到Hologres,详见CREATE EXTERNAL DATABASE。 |
access_id | 当前访问账号的AccessKey ID,您可以单击RAM控制台,获取AccessKey ID。 |
access_key | 当前访问账号的AccessKey Secret。 |
dlf_access_id | 拥有读写DLF权限的阿里云账号或RAM账号的AccessKey ID。 |
dlf_access_key | 拥有读写DLF权限的阿里云账号或RAM账号的AccessKey Secret。 |
oss_access_id | 拥有读写OSS权限的阿里云账号或RAM账号的AccessKey ID。 |
oss_access_key | 拥有读写OSS权限的阿里云账号或RAM账号的AccessKey Secret。 |
rolearn | 角色ARN是角色的全局资源描述符,用来指定具体的角色,格式为 |
Foreign Server配置方式
MaxCompute数据源
CREATE USER MAPPING FOR "<user_name>"
SERVER odps_server -- 固定server
OPTIONS
(
access_id '<Access_id>',access_key '<Access_key>'
);
DLF数据源
CREATE USER MAPPING FOR "<user_name>"
SERVER <server_name>
OPTIONS
(
-- For DLF1.0
[dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx',
oss_access_id 'LTxxxxxxxxxx',
oss_access_key 'y8xxxxxxxxxxxxx']
-- For DLF2.0
[dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx'] |
[rolearn 'RoleARN']
);
Hologres数据源
CREATE USER MAPPING FOR "<user_name>"
SERVER <server_name>
OPTIONS (
access_id '<access_id>',
access_key '<access_key>'
);
参数说明
参数名称 | 功能说明 |
user_name | 待授权的账号,比如其他RAM子账号、Hologres内部账号(BASIC账号)、public(面向所有用户公开访问,请谨慎操作)。 |
server_name | Foriegn Server的名称,上一步骤自定义设置的名称,MaxCompute数据源是固定的内置server: odps_server。 |
access_id | 当前访问账号的AccessKey ID,您可以单击RAM控制台,获取AccessKey ID。 |
access_key | 当前访问账号的AccessKey Secret。 |
dlf_access_id | 拥有读写DLF权限的阿里云账号或RAM账号的Accesskey ID。 |
dlf_access_key | 拥有读写DLF权限的阿里云账号或RAM账号的Accesskey Secret。 |
oss_access_id | 拥有读写OSS权限的阿里云账号或RAM账号的Accesskey ID。 |
oss_access_key | 拥有读写OSS权限的阿里云账号或RAM账号的Accesskey Secret。 |
rolearn | 角色ARN是角色的全局资源描述符,用来指定具体的角色,格式为 |
使用示例
EXTERNAL DATABASE(推荐)
以DLF2.0数据源为例,首先创建一个External Database来关联DLF上的Paimon Catalog。
CREATE EXTERNAL DATABASE ext_db_dlf WITH metastore_type 'dlf-paimon' catalog_type 'paimon' dlf_region 'cn-hangzhou' dlf_endpoint 'dlfnext-share.cn-hangzhou.aliyuncs.com' dlf_catalog 'clg-paimon-d241aee***********';
创建完成后,该外部Database仅实例Superuser和DB Owner可访问,其他账号无法访问,接下来通过在RAM控制台创建RAMRole和Hologres侧CREATE USER MAPPING来给一个RAM子账号授权。
RAM侧新建角色并完成策略配置。
登录RAM控制台,单击角色>创建角色,可信实体类型选择阿里云服务,角色类型选择普通服务角色,输入角色名称,选择受信服务为交互式分析,单击完成。
进入权限策略页面,单击创建权限策略>脚本编辑,分别创建用于Hologres和DLF做权限检查的策略,策略内容如下。
Hologres需要的权限检查策略。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "hologram:GrantAssumeRole", "Resource": "acs:ram::xxx:role/testramrole" } ] }
DLF需要的权限检查策略。
{ "Version": "1", "Statement": [ { "Action": "dlf:CheckPermissions", "Resource": "*", "Effect": "Allow" } ] }
进入角色页面,单击新增授权,添加上述两个权限策略。
Hologres侧通过CREATE USER MAPPING将
ext_db_dlf
数据库的权限授予RAM子账号。CREATE USER MAPPING FOR "p4_203535926287167253" EXTERNAL DATABASE ext_db_dlf OPTIONS ( rolearn 'acs:ram::xxx:role/testramrole' );
使用子账号登录Hologres控制台,使用SQL编辑器进行查询。
SELECT * FROM ext_db_dlf.dlf_db.paimon_table;
Foreign Server
以MaxCompute数据源为例,给一个Hologres BASIC账号授予访问MC外部表的权限。
在Hologres中创建BASIC账号。
CREATE USER basicuser;
给BASIC账号授予
odps_server
的访问权限。CREATE USER MAPPING FOR "basicuser" SERVER odps_server OPTIONS ( access_id 'LTxxxxxxxxxx', access_key 'y8xxxxxxxxxxxxx' );