实时计算 Flink 版支持在项目空间中引用 RAM 角色,通过扮演 RAM 角色使用临时凭证 STS Token 替代明文 AK/SK 访问阿里云资源,实现免密访问、细粒度权限控制和凭据免运维。
功能介绍
通过引用 RAM 角色,可在 Flink 作业中使用 RAM 角色访问其他阿里云产品(如 OSS、KMS 等),无需在作业代码中暴露 AK/SK 明文。
核心优势:
敏感信息保护:作业中不再暴露 AK/SK 明文,通过 RAM 角色 STS Token 替代固定凭据。
细粒度权限控制:可自定义 RAM 角色的权限策略,不同连接器可使用不同角色,实现最小权限原则。
免运维凭据:STS Token 由系统自动获取和续期,无需管理凭据轮转。
详细原理说明,请参见附录:STS 调用流程说明。
注意事项
在 RAM 中错误删除或修改 RAM 角色的权限与信任策略,可能导致 Flink 作业因无权限访问云资源而运行失败。根据《实时计算 Flink 版服务等级协议》,因客户不正确使用资源导致的不可用不纳入 SLA。
使用限制
仅 vvr 11.8 及以上版本引擎支持。OSS Connector、Postgres CDC Connector 支持使用 RAM 角色访问云资源。
单个工作空间累计限引用 10 个 RAM 角色。
单次添加至多选择 5 个角色。
仅支持引用普通服务角色(SR),不支持服务关联角色(SLR)。
PyFlink 和 Flink JAR 作业本地调试时不支持使用 STS Token,需部署至集群后使用。
仅限阿里云产品的 RAM 身份认证场景。
权限准备
步骤一、步骤二:操作者被授予
AliyunRAMFullAccess权限策略,或单独被授予 RAM 角色管理及权限管理权限。更多信息,请参见创建自定义权限策略、RAM 角色管理及权限管理 API。步骤三:操作者需有 Flink 项目空间的 editor 及以上权限,或被授予引用 RAM 角色、开发作业的细粒度权限。详情请参见开发控制台授权。
步骤一:创建并配置 RAM 角色
此角色是 Flink 服务访问其他云资源的身份凭证。Flink 将通过扮演该角色获取临时凭证,以该角色身份访问云资源。
1. 创建 RAM 角色
登录 RAM 控制台 - 角色页面,单击创建角色。保持默认选项(信任主体为当前云账号),并单击确定。
填写一个有辨识度的角色名称,例如
FlinkRoleForOSSRead,单击确定。
2. 添加信任策略
Flink 将通过扮演 RAM 角色获取临时凭证,RAM 角色需信任 Flink 对其进行扮演。
角色创建成功后,在角色详情页的信任策略页签下,单击编辑信任策略,在 Principal 中添加 "Service": ["stream.aliyuncs.com"],信任 Flink 扮演该角色。更多信息,请参见修改 RAM 角色的信任策略。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"stream.aliyuncs.com"
]
}
}
],
"Version": "1"
}3. 授予云资源访问权限
Flink 将使用 RAM 角色身份来访问云资源,需提前为 RAM 角色授予相关权限,否则访问报错。
在角色详情页的权限管理页签下,单击新增授权,按需为该角色授予访问目标云资源的权限。
例如,如果需要访问 OSS,可授予 AliyunOSSReadOnlyAccess(只读)或 AliyunOSSFullAccess(完全)权限。更多信息,请参见管理 RAM 角色的权限。
步骤二:为 RAM 用户授予权限
创建一个权限策略并授权给 RAM 用户,允许用户将步骤一创建的 RAM 角色传递给 Flink 服务进行扮演。
若操作步骤三的 RAM 用户已关联 AliyunRAMFullAccess 或 AliyunStreamFullAccess 权限策略,则该用户已拥有 PassRole 权限,可跳过此步骤。
创建权限策略
登录 RAM 控制台 - 权限策略页面,单击创建权限策略。切换至脚本编辑,编辑权限策略内容。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:ListRoles"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:PassRole",
"Resource": "acs:ram::<account-id>:role/<role-name>",
"Condition": {
"StringEquals": {
"acs:Service": "stream.aliyuncs.com"
}
}
}
]
}权限 | 说明 |
| 允许用户查看账户下的角色列表,以便在 Flink 控制台界面中选择角色。 |
| 允许用户将指定的角色传递给 Flink 云服务。请将策略中的
可添加 |
单击确定,将权限策略保存,例如命名为 FlinkPassRolePolicy。更多信息,请参见创建自定义权限策略。
为 RAM 用户授权
登录 RAM 控制台 - 用户页面,找到需要授权的 RAM 用户,单击操作列的新增授权。
在新增授权面板中,搜索并选中步骤二创建的权限策略(例如
FlinkPassRolePolicy),单击确认新增授权。更多信息,请参见管理 RAM 用户的权限。
步骤三:在 Flink 中引用 RAM 角色
步骤二中已授权的用户,可将步骤一的 RAM 角色传递给 Flink。Flink 将通过扮演该角色获取临时凭证,以该角色身份访问云资源。
添加引用 RAM 角色
登录实时计算控制台,进入目标工作空间。
在左侧导航栏,选择。
单击RAM 角色页签。
单击引用 RAM 角色。
在弹窗中配置以下信息。
配置项
是否必填
说明
RAM 角色
是
下拉选择角色。支持按角色名模糊搜索,支持多选(单次至多 5 个)。已引用的角色不可重复选择。
说明角色列表为当前项目空间所属阿里云主账号下的普通服务角色列表。
操作者需与当前项目空间同属一个阿里云主账号,且有
ListRoles权限,才能查看到对应的角色。
描述
否
角色描述,最多 256 个字符。
单击测试校验,系统会自动进行授权检测以下两项:
PassRole 权限检测:当前用户有对所选 RAM 角色执行
ram:PassRole的权限。信任策略检测:所选 RAM 角色信任当前 Flink 项目空间对其进行扮演。
检测通过后,单击确定。
在作业中使用 RAM 角色
引用 RAM 角色后,在作业代码中通过 akless.assume-role.role-name 参数指定角色名称,Flink 将通过扮演该角色获取临时凭证 STS Token,以该角色身份访问云资源。
仅 vvr 11.8 及以上版本引擎的 OSS Connector、Postgres CDC Connector 支持。
参数说明
参数 | 类型 | 是否必填 | 说明 |
akless.assume-role.role-name | String | 否 | RAM 角色名称,例如 |
优先级规则
若显式指定了 AK/SK(accessKeyId + accessKeySecret),以 AK/SK 为最高优先级。
若未指定 AK/SK 但指定了
akless.assume-role.role-name,使用该角色的 STS Token。一个作业中不同连接器可使用不同角色,分别指定
akless.assume-role.role-name即可。
OSS 示例
需要在部署详情页签运行参数配置区域的其他配置中添加如下配置:
# OSS
fs.oss.bucket.<bucketName>.akless.assume-role.role-name: <your-role-name>
fs.oss.inner.bucket: <工作空间关联的bucketName>
# OSS-HDFS
fs.oss.jindo.akless.assume-role.role-name: <your-role-name>参数 | 说明 |
| 目标文件系统路径参数( |
| 在工作空间列表页的存储类型字段中,可查看工作空间的存储是自管 OSS Bucket 还是全托管存储,根据存储类型获取:
|
| RAM 角色名称,使用该角色访问 OSS。 |
管理 RAM 角色引用
在 Flink 中编辑及移除 RAM 角色,仅影响 Flink 引用 RAM 角色,不直接修改 RAM 角色。
编辑 RAM 角色
在安全服务 > 访问安全 > RAM 角色中,找到目标角色,单击操作列的编辑。
在弹窗中修改描述。角色名称不可修改。
单击测试校验,检测通过后单击确定。
移除 RAM 角色
移除 RAM 角色后,当前项目空间下所有引用该角色的作业将运行失败,请谨慎操作。
在安全服务 > 访问安全 > RAM 角色中,找到目标角色,单击操作列的移除。
在确认弹窗中输入角色名称,单击确定移除。
刷新角色状态
单击 RAM 角色列表右上角的刷新按钮,可批量检测所有已引用角色的状态。
状态 | 含义 |
正常 | 角色在 RAM 中存在且 STS Token 有效。 |
异常 | 角色在 RAM 中已被删除,或信任策略不再允许 Flink 扮演。引用该角色的作业可能运行异常。 |
附录:STS 调用流程说明
阿里云 RAM 提供两种核心的、与角色相关的授权模型:直接扮演(AssumeRole)和委托授权(PassRole)。
模型一:直接扮演(sts:AssumeRole)
核心动作:一个受信实体(如 RAM 用户、应用程序)主动调用 STS 的
AssumeRole接口,以获取一个 RAM 角色的临时凭证,从而"变身"为该角色。授权链路:
实体A→调用 sts:AssumeRole→扮演角色R→获得角色R的权限。权限需求:实体 A 本身必须被授予
sts:AssumeRole权限。典型场景:一个应用程序(运行在 ECS 或本地服务器上)需要临时访问 OSS。该程序使用自身的 AK 调用
AssumeRole,获取临时凭证后,再用该凭证访问 OSS。在此场景中,实体 A 是主动的执行者。
模型二:委托授权(ram:PassRole)
核心动作:一个实体(如 RAM 用户)将一个 RAM 角色"传递"给一个云服务(如 Flink),授权该服务去扮演这个角色。用户本身并不扮演角色。
授权链路:用户 User_B → 传递角色 Role_A → 给云服务 → 云服务调用
sts:AssumeRole扮演角色 Role_A → 云服务获得角色 Role_A 的权限。权限需求:用户 B 必须被授予
ram:PassRole权限,角色 A 必须信任云服务对其进行扮演。典型场景:开发者(用户 User_B)在 Flink 控制台开发作业,并指定一个角色 Role_A。为让 Flink 服务能够代表用户去访问云资源,用户必须有权将角色 Role_A"传递"给 Flink 服务。在此场景中,用户是授权者,云服务是代为执行者。
以 Flink 访问 OSS 为例
委托授权(PassRole)模型的交互流程分为配置和运行阶段:
配置阶段:
RAM 管理员完成基础设置,包括创建角色、配置其权限和信任关系、为用户授予
PassRole权限。用户在 Flink 中添加引用 RAM 角色,Flink 平台校验用户是否有权"传递"这个角色,以及这个角色是否信任 Flink 对其进行扮演。
运行阶段:
服务扮演角色:Flink 服务(
stream.aliyuncs.com)作为真正的扮演者,向 STS 发起AssumeRole请求。STS 授权与服务执行:STS 在确认 Flink 是角色 A 所信任的服务后,向其颁发临时凭证。Flink 服务使用此凭证访问 OSS,完成用户委托的任务。