全部产品
Search
文档中心

实时计算Flink版:KMS 凭据管理集成(公测)

更新时间:Jul 31, 2026

实时计算 Flink 版支持在作业中引用阿里云密钥管理服务(KMS)托管的凭据,替代明文用户名/密码(user-pwd)访问数据源,实现敏感凭据加密托管、免明文暴露和凭据免运维。

功能介绍

通过集成 KMS 凭据管理,可在 Flink 作业中引用 KMS 托管的凭据(如数据库账号密码等),无需在作业代码中暴露明文凭据。Flink 运行时通过 RAM 角色获取临时凭证(STS Token),调用 KMS 获取真实凭据值后连接目标数据源。

核心优势:

  • 敏感信息保护:作业中不再暴露明文 user-pwd,凭据加密托管在 KMS 中。

  • 凭据免运维:配合 KMS 凭据轮转能力,凭据更新后 Flink 自动获取最新值,无需修改作业代码。

注意事项

在 KMS 中错误删除凭据、在 RAM 中错误删除或修改 RAM 角色的权限与信任策略,可能导致 Flink 作业因无法获取 KMS 凭据而运行失败。根据《实时计算 Flink 版服务等级协议》,因客户不正确使用资源导致的不可用不纳入 SLA。

使用限制

  • 仅 VVR 11.8 及以上版本引擎的 Postgres CDC Connector 支持使用 KMS 凭据访问云资源。

  • 使用 RAM 角色访问 KMS 有添加引用角色数限制,详情请参见使用 RAM 角色访问云资源

权限准备

  • 步骤一(创建 KMS 凭据):操作者需具备 KMS 凭据管理权限。

  • 步骤二、步骤三:操作者需被授予 AliyunRAMFullAccess 权限策略,或单独被授予 RAM 角色管理及权限管理权限。更多信息请参见创建自定义权限策略

  • 步骤四、步骤五(在 Flink 中引用角色、开发作业):操作者需有 Flink 项目空间的 editor 及以上权限,或被授予引用 RAM 角色、文件管理、开发作业的细粒度权限。详情请参见开发控制台授权

步骤一:创建 KMS 凭据

KMS 提供多种类型凭据,以 RDS 凭据为例:

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 凭据管理

  2. 自管凭据页签凭据类型区域,单击数据库凭据

  3. 在右侧列表上方,单击创建数据库凭据下的创建单个凭据,完成相关配置后,单击确定

更多信息,请参见凭据管理快速入门管理及使用 RDS 凭据

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

此角色是 Flink 服务访问 KMS 的身份凭证。Flink 将通过扮演该角色获取临时凭证,以该角色身份调用 KMS 获取凭据值。免 AK 访问 KMS 的详细原理说明,请参见使用 RAM 角色访问云资源的附录。

创建 RAM 角色

  1. 登录 RAM 控制台 - 角色页面,单击创建角色。保持默认选项,并单击确定

  2. 填写一个有辨识度的角色名称,例如 FlinkRoleForKMSRead,单击确定

添加信任策略

角色创建成功后,在角色详情页的信任策略页签下,单击编辑信任策略,在 Principal 中添加 "Service": ["stream.aliyuncs.com"],信任 Flink 扮演该角色。更多信息,请参见修改 RAM 角色的信任策略

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "stream.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

为 RAM 角色授予 KMS 访问权限

扮演该角色后,Flink 将以角色身份调用 KMS,需提前在角色权限策略中授予 KMS 相关权限。

在角色详情页的权限管理页签下,单击新增授权,添加 AliyunKMSSecretUserAccess(获取 KMS 中凭据的权限)权限策略。若凭据使用了用户指定的密钥(CMK)加密,还需有密钥的 kms:Decrypt 权限,可通过添加 AliyunKMSCryptoUserAccess 权限策略来授权。

若期望细粒度控制到密钥及凭据粒度,可自定义权限策略,授予 GetSecretValueDecrypt 权限,并将资源限制为指定资源。详情请参见 KMS 自定义权限策略参考创建自定义权限策略

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:GetSecretValue",
      "Resource": "acs:kms:<region>:<account-id>:secret/<secret-name>"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "acs:kms:<region>:<account-id>:key/<key-id>"
    }
  ]
}

步骤三:为 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 项目空间,使作业可以使用该角色访问 KMS。

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

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

  3. 单击 RAM 角色页签。

  4. 单击引用 RAM 角色

  5. 在弹窗中选择步骤二创建的 RAM 角色(例如 FlinkRoleForKMSRead),支持按角色名模糊搜索。

    说明

    角色列表为当前项目空间所属阿里云主账号下的普通服务角色列表。操作者需与当前项目空间同属一个阿里云主账号,且有 ram:ListRoles 权限,才能查看到对应的角色。

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

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

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

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

更多信息,请参见使用 RAM 角色访问云资源

步骤五:在作业中使用 KMS 凭据

完成上述配置后,在作业代码中通过 secret:// 引用格式指定凭据,并配置 KMS 连接参数,Flink 即可在运行时自动获取凭据值访问数据源。

说明

当前仅 VVR 11.8 及以上版本引擎的 Postgres CDC Connector 支持。

Postgres CDC Connector 示例

SQL 作业:以下示例以 Postgres CDC 源表为例,使用 KMS 凭据托管数据库账号密码。KMS 中已创建数据库凭据 my-db-secret,其 SecretData 为 {"AccountName":"alice","AccountPassword":"xxx"}

CREATE TEMPORARY TABLE postgrescdc_source (
    id INT NOT NULL,
    name STRING,
    description STRING,
    weight DECIMAL(10,3)
) WITH (
  'connector' = 'postgres-cdc',
  'hostname' = '<host name>',
  'port' = '<port>',
  'username' = 'secret://kms.my-db-secret.AccountName',
  'password' = 'secret://kms.my-db-secret.AccountPassword',
  'database-name' = '<database name>',
  'schema-name' = '<schema name>',
  'table-name' = '<table name>',
  'slot.name' = '<slot name>',
  'decoding.plugin.name' = 'pgoutput',
  'kms.endpoint' = '<YOUR-KMS-INSTANCE-VPC-ENDPOINT>',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

Postgres CDC 连接器的参数说明、前提条件与类型映射,请参见Postgres CDC 连接器

参数说明

凭据引用格式

KMS 凭据引用格式为:secret://<provider>.<secret-name>.<key>

字段

说明

<provider>

凭据源类型标识,当前仅支持 kms

<secret-name>

KMS 中的凭据名称,例如 my-db-secret

<key>

凭据值 SecretData JSON 中的字段名,例如 AccountNameAccountPassword

示例:secret://kms.my-db-secret.AccountPassword

KMS 参数

参数

类型

是否必填

说明

kms.endpoint

String

KMS 网关地址。Endpoint 按地域固定,可通过服务接入点获取。

kms.akless.assume-role.role-name

String

访问 KMS 使用的 RAM 角色名称。需提前在访问安全 > RAM 角色中添加引用。