全部产品
Search
文档中心

实时计算Flink版:使用 RAM 角色访问云资源(公测)

更新时间:Aug 11, 2026

实时计算 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 身份认证场景。

权限准备

步骤一:创建并配置 RAM 角色

此角色是 Flink 服务访问其他云资源的身份凭证。Flink 将通过扮演该角色获取临时凭证,以该角色身份访问云资源。

1. 创建 RAM 角色

  1. 登录 RAM 控制台 - 角色页面,单击创建角色。保持默认选项(信任主体为当前云账号),并单击确定

  2. 填写一个有辨识度的角色名称,例如 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 用户已关联 AliyunRAMFullAccessAliyunStreamFullAccess 权限策略,则该用户已拥有 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"
        }
      }
    }
  ]
}

权限

说明

ram:ListRoles

允许用户查看账户下的角色列表,以便在 Flink 控制台界面中选择角色。

ram:PassRole

允许用户将指定的角色传递给 Flink 云服务。请将策略中的 <account-id><role-name> 替换为实际信息:

  • <account-id>:替换为阿里云的主账号 UID。

  • <role-name>:替换为步骤一创建的 RAM 角色名称。

可添加 Condition 限制,仅可传递给 stream.aliyuncs.com

单击确定,将权限策略保存,例如命名为 FlinkPassRolePolicy。更多信息,请参见创建自定义权限策略

为 RAM 用户授权

  1. 登录 RAM 控制台 - 用户页面,找到需要授权的 RAM 用户,单击操作列的新增授权

  2. 在新增授权面板中,搜索并选中步骤二创建的权限策略(例如 FlinkPassRolePolicy),单击确认新增授权。更多信息,请参见管理 RAM 用户的权限

步骤三:在 Flink 中引用 RAM 角色

步骤二中已授权的用户,可将步骤一的 RAM 角色传递给 Flink。Flink 将通过扮演该角色获取临时凭证,以该角色身份访问云资源。

添加引用 RAM 角色

  1. 登录实时计算控制台,进入目标工作空间。

  2. 在左侧导航栏,选择安全服务 > 访问安全

  3. 单击RAM 角色页签。

  4. 单击引用 RAM 角色

  5. 在弹窗中配置以下信息。

    配置项

    是否必填

    说明

    RAM 角色

    下拉选择角色。支持按角色名模糊搜索,支持多选(单次至多 5 个)。已引用的角色不可重复选择。

    说明
    • 角色列表为当前项目空间所属阿里云主账号下的普通服务角色列表。

    • 操作者需与当前项目空间同属一个阿里云主账号,且有 ListRoles 权限,才能查看到对应的角色。

    描述

    角色描述,最多 256 个字符。

  6. 单击测试校验,系统会自动进行授权检测以下两项:

    • PassRole 权限检测:当前用户有对所选 RAM 角色执行 ram:PassRole 的权限。

    • 信任策略检测:所选 RAM 角色信任当前 Flink 项目空间对其进行扮演。

  7. 检测通过后,单击确定

在作业中使用 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 角色名称,例如 oss-read。需提前在访问安全 > 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>

参数

说明

<bucketName>

目标文件系统路径参数(path)里填写的 Bucket 名称。

<工作空间关联的 Bucket Name>

在工作空间列表页的存储类型字段中,可查看工作空间的存储是自管 OSS Bucket 还是全托管存储,根据存储类型获取:

  • OSS Bucket:在工作空间详情弹窗中,找到 OSS Bucket 字段,即为当前工作空间关联的 OSS Bucket Name。

  • 全托管flink-fullymanaged-<工作空间ID>,例如 flink-fullymanaged-db12345678。工作空间 ID 可在详情弹窗中获取。

<your-role-name>

RAM 角色名称,使用该角色访问 OSS。

管理 RAM 角色引用

说明

在 Flink 中编辑及移除 RAM 角色,仅影响 Flink 引用 RAM 角色,不直接修改 RAM 角色。

编辑 RAM 角色

  1. 安全服务 > 访问安全 > RAM 角色中,找到目标角色,单击操作列的编辑

  2. 在弹窗中修改描述。角色名称不可修改。

  3. 单击测试校验,检测通过后单击确定

移除 RAM 角色

重要

移除 RAM 角色后,当前项目空间下所有引用该角色的作业将运行失败,请谨慎操作。

  1. 安全服务 > 访问安全 > RAM 角色中,找到目标角色,单击操作列的移除

  2. 在确认弹窗中输入角色名称,单击确定移除

刷新角色状态

单击 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 服务。在此场景中,用户是授权者,云服务是代为执行者。