本文介绍如何在阿里云各计算引擎(Serverless StarRocks、Serverless Spark、实时计算 Flink 版等)中,结合数据湖构建(DLF)的数据权限体系,实现端到端的精细化访问控制。
使用场景
根据您使用的计算引擎,直接跳转到对应的配置指南:
场景 | 支持的访问协议 | 适用场景 |
Paimon/Iceberg REST | 流式数据处理、实时 ETL | |
Paimon/Iceberg REST | 交互式分析、即席查询 | |
Paimon/Iceberg REST | 批处理、ETL、交互式分析 | |
PVFS | 非结构化数据处理 | |
Paimon/Iceberg REST | 自建集群批处理、ETL |
前提条件
在开始配置权限之前,请确保满足以下条件:
实时计算 Flink 版访问 DLF
适用场景
使用阿里云实时计算 Flink 版,通过 Flink SQL 以 Paimon REST 或 Iceberg REST 协议访问 DLF Catalog 中的数据,适用于流式数据处理、实时 ETL、Flink CDC 数据入湖等场景。
使用限制
Paimon REST:实时计算引擎 VVR 11.1及以上版本。
Iceberg REST:实时计算引擎 VVR 11.2及以上版本。
网络:Flink 工作空间与 DLF 位于同一地域,且 Flink 所在 VPC 已添加至 DLF 可信 VPC 列表。
权限配置流程
Flink 访问 DLF 时,通过服务角色 AliyunStreamAsiDefaultRole 代理用户身份进行 DLF 鉴权。
步骤一:为 Flink 服务角色授予 DLF 权限
使用阿里云账号或 RAM 管理员登录 RAM 控制台。
单击,查询 AliyunStreamAsiDefaultRole 角色。
单击操作列的新增授权,查询并勾选
AliyunDLFFullAccess,单击确认新增授权。
如果创建 Catalog 时遇到 ForbiddenException: You are not authorized to do this operation. Action: dlf:GetConfig 错误,说明该角色缺少 DLF 权限,需按上述步骤授权。
步骤二:在 DLF 中授予数据权限
登录数据湖构建控制台。
进入目标 Catalog,切换到权限页签,单击授权。
选择 RAM 用户/RAM 角色,在下拉列表中选择 AliyunStreamAsiDefaultRole。
根据需求授予相应的数据权限(如 Data Reader、Data Editor 或自定义权限)。
阿里云主账户默认拥有数据权限。如需精细化权限控制,请使用RAM用户。
步骤三:将 Flink 所在 VPC 添加至 DLF 可信列表
在左侧导航栏中,单击。
在弹出的对话框中,选择一个或多个需要设为可信的 VPC,然后单击确定。
详情请参见可信VPC配置。
步骤四:在 Flink 中创建 DLF Catalog
方式一:通过 UI 创建
登录 实时计算控制台,进入目标工作空间。
在左侧导航栏,单击数据管理。
在 Catalog 列表页,单击创建 Catalog,选择对应的类型。
方式二:通过 SQL 创建
在数据查询文本编辑区域,输入以下 SQL 并执行:
Paimon REST
CREATE CATALOG `flink_catalog_name`
WITH (
'type' = 'paimon',
'metastore' = 'rest',
'token.provider' = 'dlf',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com',
'warehouse' = 'dlf_test'
);参数 | 说明 | 是否必填 | 示例 |
type | Catalog 类型,固定为 | 是 | paimon |
metastore | metastore 类型,固定为 | 是 | rest |
token.provider | Token 提供方,固定为 | 是 | dlf |
uri | 访问 DLF REST Catalog Server 的 URI,格式为 | 是 | http://cn-hangzhou-vpc.dlf.aliyuncs.com |
warehouse | DLF Catalog 名称。 | 是 | dlf_test |
更多使用方式,详情请参见Flink CDC访问DLF,Flink DataStream访问DLF。
Iceberg REST
CREATE CATALOG `flink_catalog_name`
WITH (
'type' = 'iceberg',
'catalog-type' = 'rest',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg',
'warehouse' = 'iceberg_test',
'rest.signing-region' = 'cn-hangzhou',
'io-impl' = 'org.apache.iceberg.rest.DlfFileIO'
);参数 | 说明 | 是否必填 | 示例 |
type | Catalog 类型,固定为 | 是 | iceberg |
catalog-type | Catalog 实现类型,固定为 | 是 | rest |
uri | 访问 DLF REST Catalog Server 的 URI,格式为 | 是 |
|
warehouse | DLF Catalog 名称。 | 是 | iceberg_test |
rest.signing-region | DLF 所在地域的 Region ID。 | 是 | cn-hangzhou |
io-impl | IO 实现类,固定为 | 是 | org.apache.iceberg.rest.DlfFileI |
Serverless StarRocks 访问 DLF
适用场景
使用 Serverless StarRocks 作为查询引擎,通过访问 DLF Catalog 中的数据,实现交互式分析。
使用限制
Serverless StarRocks 3.3.8 及以上版本。
Serverless StarRocks 服务与 DLF 位于同一 VPC 下。
权限配置流程
访问 DLF 数据需要配置以下三个层面的权限:
RAM 权限 — 为 RAM 用户授予 EMR 控制台权限和 DLF API 权限
DLF 数据权限 — 控制 RAM 用户能访问 DLF 中的哪些数据
StarRocks 用户映射 — 在 StarRocks 中创建 RAM 同名用户,并授予 External Catalog 的 USAGE 权限
其核心机制是通过 RAM 用户名映射将 StarRocks 用户与 DLF 权限关联。
步骤一:为 RAM 用户授予控制台权限
使用阿里云账号或 RAM 管理员登录 RAM 控制台。
创建一个新的 RAM 用户或选择已有 RAM 用户。
注意:该 RAM 用户的名称需符合 StarRocks 的用户命名规则,即只包含字母、数字、下划线,不能包含短横线、句号。
为该 RAM 用户添加以下权限策略:
EMR 控制台权限:添加
AliyunEMRStarRocksFullAccess(管理员)或AliyunEMRStarRocksReadOnlyAccess(只读),使其可以访问 EMR StarRocks 控制台。DLF API 权限:添加
AliyunDLFFullAccess或自定义的 DLF 权限策略,使其可以调用 DLF 接口。
步骤二:在 DLF 中授予数据权限
登录数据湖构建控制台。
进入目标 Catalog,切换到权限页签,单击授权。
选择上一步的 RAM 用户,根据需求授予相应的数据权限(如 Data Reader、Data Editor 或自定义权限)。
步骤三:在 StarRocks 中创建 RAM 同名用户
登录 EMR Serverless StarRocks 控制台,连接 StarRocks 实例。
在 安全中心 > 用户管理 中,单击添加用户:
用户来源:选择 RAM 用户。
用户名:选择步骤一中授权的 RAM 用户。
密码:自定义(长度 8~30 个字符,须同时包含大写字母、小写字母、数字及特殊符号)。
角色:默认
public即可。
为该用户授予 External Catalog 的 USAGE 权限。在用户管理页面,单击目标用户操作列的授权,在添加权限面板中选择数据目录(外部),授予
USAGE权限。
DLF 对 StarRocks 来说是 External Catalog(外表),StarRocks 内部 RBAC 的其他权限(如 SELECT、INSERT 等)仅控制内表,不影响 DLF 外表的数据访问。DLF 外表的数据读写权限完全由步骤二中配置的 DLF 数据权限决定。
详情请参见Serverless StarRocks用户管理。
步骤四:创建 External Catalog 连接 DLF
使用该 RAM 用户登录 StarRocks Manager,执行以下 SQL 创建 External Catalog:
Paimon
CREATE EXTERNAL CATALOG `paimon_catalog`
PROPERTIES (
'type' = 'paimon',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com',
'paimon.catalog.type' = 'rest',
'paimon.catalog.warehouse' = 'my_catalog',
'token.provider' = 'dlf'
);参数 | 说明 | 示例 |
type | StarRocks 的 Catalog 类型,固定值 | paimon |
uri | 访问DLF Rest Catalog的URI,详见Paimon REST。 | http://cn-hangzhou-vpc.dlf.aliyuncs.com |
paimon.catalog.type | Paimon 的 Catalog 类型,固定值 | rest |
paimon.catalog.warehouse | DLF 中的 Catalog 名称 | my_catalog |
token.provider | REST 服务提供者,固定填 | dlf |
Iceberg
CREATE EXTERNAL CATALOG iceberg_catalog
PROPERTIES (
'type' = 'iceberg',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg',
'iceberg.catalog.type' = 'dlf_rest',
'warehouse' = 'iceberg_test',
'rest.signing-region' = 'cn-hangzhou'
);参数 | 说明 | 示例 |
type | StarRocks的Catalog类型,固定值 | iceberg |
uri | 访问DLF Rest Catalog的URI,详见Iceberg REST。 | http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg |
iceberg.catalog.type | DLF场景填写固定值 | dlf_rest |
warehouse | DLF Catalog名称。 | iceberg_test |
rest.signing-region | DLF服务的Region ID。 | cn-hangzhou |
Iceberg REST 当前仅支持只读查询,无法通过 StarRocks 写入数据。如需读写能力,请使用 Paimon REST。
Serverless Spark 访问 DLF
适用场景
使用 Serverless Spark 进行批处理、ETL 或交互式分析,通过 Paimon/Iceberg REST 协议访问 DLF Catalog 中的数据。
使用限制
Paimon:Serverless Spark 版本 esr-4.3.0、esr-3.3.0、esr-2.7.0 及以上。
Iceberg:Serverless Spark 版本 esr-4.7.0、esr-3.6.0 及以上。
权限配置流程
访问 DLF 数据需要配置以下两个层面的权限:
RAM 权限 — 为 RAM 用户授予 EMR 控制台权限和 DLF API 权限
DLF 数据权限 — 控制 RAM 用户能访问 DLF 中的哪些数据
Spark 访问 DLF 时,通过执行角色(AliyunEMRSparkJobRunDefaultRole)代理提交任务的 RAM 用户身份进行 DLF 鉴权。
Spark 工作空间角色(Guest、DataScience、DataEngineering、Owner)控制的是 EMR 控制台操作(如创建工作流、管理队列),不影响 DLF 数据访问。工作空间角色的配置请参见 管理用户和角色。
步骤一:为 RAM 用户授予控制台权限
使用阿里云账号或 RAM 管理员登录 RAM 控制台。
为 RAM 用户添加以下权限策略:
EMR 控制台权限:添加
AliyunEMRServerlessSparkFullAccess(管理员)、AliyunEMRServerlessSparkDeveloperAccess(开发者)或AliyunEMRServerlessSparkReadOnlyAccess(只读)。DLF API 权限:添加
AliyunDLFFullAccess或自定义的 DLF 权限策略。
详情请参见 RAM用户授权。
步骤二:在 DLF 中授予数据权限
登录数据湖构建控制台。
进入目标 Catalog,为 RAM 用户或工作空间关联的 RAM 角色授予相应的数据权限(如 Data Reader、Data Editor 或自定义权限)。
步骤三:绑定 DLF Catalog 到 Spark 工作空间
方式一:新建工作空间时绑定
创建 Serverless Spark 工作空间时,开启 DLF 作为元数据服务,并选择目标 DLF Catalog。
方式二:在已有工作空间中绑定
进入 Serverless Spark 工作空间的数据目录页面,添加目标 DLF Catalog。详情请参见管理数据目录。
绑定 DLF Catalog 后,Livy Gateway 和 Kyuubi Gateway 原生支持其默认数据目录。
多租户场景:通过 Kyuubi Token 实现用户级 DLF 权限隔离
在默认配置下,Serverless Spark 工作空间中的所有用户共享同一个 RAM 身份访问 DLF 数据。如果需要实现不同用户访问不同数据的多租户权限隔离,可以通过 Kyuubi Gateway 的 Token 机制实现。
工作原理
令牌生成:为指定的 RAM 用户在 Kyuubi Gateway 中生成一个有时效性的 Token,该 Token 与 RAM 用户身份唯一绑定。
客户端认证:客户端(如 Beeline)在 JDBC 连接中携带 Token 和 RAM 用户名,向 Kyuubi Gateway 发起连接。
身份代理:Kyuubi Gateway 验证 Token 后,Spark 引擎将代理(Impersonate)该 RAM 用户的身份。
DLF 鉴权:Spark 引擎以代理的 RAM 用户身份向 DLF 发起请求,DLF 根据该用户的权限策略进行鉴权。
配置步骤
为每个需要独立权限的 RAM 用户在 DLF 中授予对应的表级/列级数据权限。
在 Kyuubi Gateway 的 Token 管理页面,为每个 RAM 用户创建 Token。
客户端使用对应的 Token 连接 Kyuubi Gateway:
beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<RAM用户名>;httpPath=cliservice/token/<Token>"验证权限隔离效果
查询已授权的表:
SELECT * FROM db.authorized_table LIMIT 10;— 成功返回数据。查询未授权的表:
SELECT * FROM db.unauthorized_table LIMIT 10;— 返回权限错误,如emr_test doesn't have privilege SELECT on TABLE。
EMR Serverless Spark 默认启用 DLF 元数据缓存,重新授权后默认需等待 10 分钟生效。如需立即生效,可在 Spark 配置中添加
spark.sql.catalog.lakehouse.cache-enabled false。所有连接 Kyuubi Gateway 的 RAM 用户都必须预先获得对
default数据库的 Describe 权限,否则会话初始化将失败。
详情请参见 通过Kyuubi Token对DLF数据的权限管控。
Spark 中的 DLF 权限控制说明
在 Serverless Spark 中访问 DLF 数据时,DLF 会根据用户关联的 RAM 身份进行数据权限校验。DLF 数据权限支持以下操作类型:
DLF 数据权限 | 控制范围 | 说明 |
Select | 表级别 / 列级别 | 控制对表数据的查询访问,支持列级别的精细化控制 |
Update | 表级别 | 控制对表数据的写入操作(INSERT、INSERT OVERWRITE、MERGE INTO 等) |
Alter | Catalog / 数据库 / 表级别 | 控制对元数据的修改操作(CREATE TABLE、ALTER TABLE 等) |
Drop | Catalog / 数据库 / 表级别 | 控制对资源的删除操作 |
Grant | Catalog / 数据库 / 表级别 | 控制是否可以将权限授予其他用户 |
ALL | Catalog / 数据库 / 表级别 | 拥有以上所有权限 |
您可以使用 DLF 提供的预置权限模板快速授权:
Data Reader:只读权限,适合仅需查询数据的场景。
Data Editor:读写权限,适合需要读写数据的 ETL 场景。
Serverless Spark 访问 DLF(文件访问 / PVFS)
适用场景
使用 Serverless Spark 通过 Paimon 虚拟文件系统(PVFS)直接访问 DLF 管理的文件数据,适用于非结构化数据处理场景。
使用限制
Serverless Spark 版本 esr-3.5.0、esr-2.9.0、esr-4.6.0 及以上。
权限配置流程
与 Paimon REST 方式类似,绑定 DLF Catalog 后,通过 pvfs:// 协议访问文件。
步骤一至步骤三
与场景二相同,完成 RAM 权限配置、DLF 数据权限授予和 Catalog 绑定。
步骤四:通过 PVFS 访问文件
在 Notebook 或 PySpark 中使用 pvfs:// 路径访问 DLF 管理的文件:
df = spark.read.option("delimiter", ",").option("header", True) \
.csv("pvfs://<catalog_name>/default/object_table/employee.csv")
df.show(5)EMR on ECS Spark 访问 DLF
适用场景
使用 EMR on ECS 集群中的 Spark 引擎,通过 Paimon REST 协议访问 DLF Catalog。
版本要求
EMR 集群版本 >= 5.12.0,组件选择 Spark3 和 Paimon。
权限配置流程
EMR on ECS 场景下,权限通过 AliyunECSInstanceForEMRRole 这一 RAM 角色来传递。
步骤一:为 ECS 角色授予 RAM 权限
登录 RAM 控制台。
查询 AliyunECSInstanceForEMRRole 角色。
为该角色添加
AliyunDLFFullAccess权限策略。
步骤二:在 DLF 中为 ECS 角色授予数据权限
登录数据湖构建控制台。
进入目标 Catalog 的权限页签,单击授权。
选择 RAM 用户/RAM 角色,在下拉列表中选择 AliyunECSInstanceForEMRRole。
选择预置权限类型(Data Reader / Data Editor)或自定义权限。
如果下拉列表中未找到 AliyunECSInstanceForEMRRole,可在用户管理页面单击同步。
步骤三:依赖升级
需升级 Paimon 依赖到 1.1+ 版本,下载升级包及部署操作详情请参见
权限架构说明
当计算引擎访问 DLF 数据时,请求会依次经过以下四层权限校验:
权限层级 | 作用 | 配置位置 |
① RAM 权限 | 控制用户能否访问引擎控制台和调用 DLF API | RAM 控制台 |
② 引擎身份层 | 将引擎用户映射到 RAM 身份,用于 DLF 鉴权 | 各引擎控制台 |
③ DLF 数据权限 | 细粒度控制用户对 Catalog、数据库、表、列的访问权限 | DLF控制台 |
④ 网络安全 | 通过可信 VPC 配置限制网络访问来源 | DLF控制台 |
各引擎的身份映射方式:
StarRocks:通过创建 RAM 同名用户实现身份映射,每个用户独立鉴权。
Spark:通过执行角色(
AliyunEMRSparkJobRunDefaultRole)代理提交者的 RAM 身份。多租户场景可通过 Kyuubi Token 实现用户级隔离。Flink:通过服务角色(
AliyunStreamAsiDefaultRole)统一代理。
DLF 数据权限说明
DLF 数据权限支持以下操作类型:
DLF 数据权限 | 控制范围 | 说明 |
Select | 表级别 / 列级别 | 控制对表数据的查询访问,支持列级别的精细化控制 |
Update | 表级别 | 控制对表数据的写入操作(INSERT、INSERT OVERWRITE、MERGE INTO 等) |
Alter | Catalog / 数据库 / 表级别 | 控制对元数据的修改操作(CREATE TABLE、ALTER TABLE 等) |
Drop | Catalog / 数据库 / 表级别 | 控制对资源的删除操作 |
Grant | Catalog / 数据库 / 表级别 | 控制是否可以将权限授予其他用户 |
ALL | Catalog / 数据库 / 表级别 | 拥有以上所有权限 |
您可以使用 DLF 提供的预置权限模板快速授权:
Data Reader:只读权限,适合仅需查询数据的场景。
Data Editor:读写权限,适合需要读写数据的 ETL 场景。
引擎内部权限与 DLF 权限的关系
StarRocks 内部 RBAC 权限(如
db_admin、user_admin角色)仅控制 StarRocks 内表的操作权限。DLF 对 StarRocks 来说是 External Catalog(外表),其数据读写权限完全由 DLF 数据权限控制。用户只需拥有 External Catalog 的USAGE权限即可使用 DLF Catalog。Spark 工作空间角色(如 Guest、DataEngineering、Owner)控制的是 EMR 控制台操作(如创建工作流、管理队列),不影响 DLF 数据访问。
Flink 工作空间权限控制的是 Flink 控制台操作(如管理作业、部署),不影响 DLF 数据访问。Flink 访问 DLF 时的身份由服务角色决定。
注意事项和限制
列级权限:仅内部 Paimon 表支持列级权限管理,需要引擎侧 Paimon 版本 1.2(1-ali-12.0)及以上。
权限交集规则:如果某用户及其所属角色同时被授予 Column Select 权限,系统将取两者所授列权限的交集作为最终可访问的列范围。
External Catalog 映射:创建或删除 External Catalog 仅影响映射关系,不会对 DLF 中的实际数据产生影响。
StarRocks 与 DLF 权限分离:StarRocks 内部 RBAC 仅控制内表权限,DLF 外表的数据访问权限只能在数据湖构建控制台配置。StarRocks 用户只需拥有 External Catalog 的 USAGE 权限即可使用 DLF Catalog。
无权限问题排查
当遇到权限错误时,可根据错误信息判断类型:
错误类型 | 错误信息示例 | 解决方法 |
无 API 权限 |
| 联系 RAM 管理员为用户/角色添加对应的 DLF Action 权限 |
无 DLF 数据权限 |
| 联系 DLF super_administrator 或 admin 授予对应资源的数据权限 |
VPC 不可信 |
| 在 DLF 控制台将 VPC 添加至可信列表 |
Flink 角色无权限 |
| 为 |