全部產品
Search
文件中心

Realtime Compute for Apache Flink:KMS 憑據管理整合(公測)

更新時間:Sep 24, 2026

Realtime Compute Flink 版支援在作業中引用阿里雲Key Management Service(KMS)託管的憑據,替代明文使用者名稱/密碼(user-pwd)訪問資料來源,實現敏感憑據加密託管、免明文暴露和憑據免營運。

功能介紹

通過整合 KMS 憑據管理,可在 Flink 作業中引用 KMS 託管的憑據(如資料庫帳號密碼等),無需在作業代碼中暴露明文憑據。Flink 運行時通過 RAM 角色擷取臨時憑證(STS Token),調用 KMS 擷取真實憑據值後串連目標資料來源。

核心優勢:

  • 敏感資訊保護:作業中不再暴露明文 user-pwd,憑據加密託管在 KMS 中。

  • 憑據免營運:配合 KMS 憑據輪轉能力,憑據更新後 Flink 自動擷取最新值,無需修改作業代碼。

注意事項

在 KMS 中錯誤刪除憑據、在 RAM 中錯誤刪除或修改 RAM 角色的許可權與信任策略,可能導致 Flink 作業因無法擷取 KMS 憑據而運行失敗。根據Service Level Agreement for Realtime Compute for Apache Flink,因客戶不正確使用資源導致的不可用不納入 SLA。

使用限制

  • 僅 VVR 11.8 及以上版本引擎的 Postgres CDC Connector、VVR 11.9 及以上版本引擎的 Kafka Connector 支援使用 KMS 憑據訪問雲資源。

  • 使用 RAM 角色訪問 KMS 有添加引用角色數限制,詳情請參見使用 RAM 角色訪問雲資源。

許可權準備

  • 步驟一(建立 KMS 憑據):操作者需具備 KMS 憑據系統管理權限。

  • 步驟二、步驟三:操作者需被授予 AliyunRAMFullAccess 權限原則,或單獨被授予 RAM 角色管理及許可權系統管理權限。更多資訊請參見建立自訂權限原則。

  • 步驟四、步驟五(在 Flink 中引用角色、開發作業):操作者需有 Flink 專案空間的 editor 及以上許可權,或被授予引用 RAM 角色、檔案管理、開發作業的細粒度許可權。詳情請參見開發控制台授權。

步驟一:建立 KMS 憑據

KMS 提供多種類型憑據,以 RDS 憑據為例:

  1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊資源 > 憑據管理。

  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 權限原則來授權。

若期望細粒度控制到密鑰及憑據粒度,可自訂權限原則,授予 GetSecretValue、Decrypt 許可權,並將資源限制為指定資源。詳情請參見 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 使用者已關聯 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"
        }
      }
    }
  ]
}

許可權

說明

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. 登入Realtime Compute控制台,進入目標工作空間。

  2. 在左側導覽列,選擇安全服務 > 訪問安全。

  3. 單擊 RAM 角色頁簽。

  4. 單擊引用 RAM 角色。

  5. 在彈窗中選擇步驟二建立的 RAM 角色(例如 FlinkRoleForKMSRead),支援按角色名稱模糊搜尋。

    說明

    角色列表為當前專案空間所屬阿里雲主帳號下的普通服務角色列表。操作者需與當前專案空間同屬一個阿里雲主帳號,且有 ram:ListRoles 許可權,才能查看到對應的角色。

  6. 單擊測試校正,系統會自動進行以下兩項授權檢測:

    • PassRole 許可權檢測:目前使用者有對所選 RAM 角色執行 ram:PassRole 的許可權。

    • 信任策略檢測:所選 RAM 角色信任當前 Flink 專案空間對其進行扮演。

  7. 檢測通過後,單擊確定。

更多資訊,請參見使用 RAM 角色訪問雲資源。

步驟五:在作業中使用 KMS 憑據

完成上述配置後,在作業代碼中通過 secret:// 引用格式指定憑據,並配置 KMS 串連參數,Flink 即可在運行時自動擷取憑據值訪問資料來源。

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 專屬網關的 CA 憑證路徑
  'kms.ca' = 'oss://flink-fullymanaged-<工作空間ID>/artifacts/namespaces/<專案空間名稱>/<檔案名稱>',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

Postgres CDC 連接器的參數說明、前提條件與類型映射,請參見Postgres CDC 連接器。

Kafka Connector 樣本

Kafka 的憑據寫在 SASL JAAS 配置中。將 properties.sasl.jaas.config 內的 username 和 password 替換為 secret:// 引用,其餘 Kafka 參數保持不變。KMS 中已建立憑據 my-kafka-secret,其 SecretData 為 {"AccountName":"<SASL 使用者名稱>","AccountPassword":"<SASL 密碼>"}。

SQL 作業:以下樣本以 Kafka 源表為例,結果表的配置方式相同。

CREATE TEMPORARY TABLE kafka_source (
  order_id BIGINT,
  user_id BIGINT,
  amount INT,
  payload STRING
) WITH (
  'connector' = 'kafka',
  'topic' = '<topic name>',
  'properties.bootstrap.servers' = '<broker 1>,<broker 2>,<broker 3>',
  'properties.group.id' = '<group id>',
  'scan.startup.mode' = 'earliest-offset',
  'format' = 'csv',
  'properties.security.protocol' = 'SASL_PLAINTEXT',
  'properties.sasl.mechanism' = 'PLAIN',
  /* 使用者名稱與密碼引用 KMS 憑據 */
  'properties.sasl.jaas.config' = 'org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";',
  'kms.endpoint' = 'kms.cn-beijing.aliyuncs.com',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

資料攝入 YAML 作業:源端與目標端分別配置 KMS 參數。樣本中源端使用共用網關,目標端使用專屬網關,一次展示兩種配置形態。

source:
  type: kafka
  name: Kafka Source
  topic: <topic name>
  value.format: json
  scan.startup.mode: earliest-offset
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  properties.group.id: <group id>
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # 共用網關:Endpoint 按地區固定,無需配置 kms.ca
  kms.endpoint: kms.cn-beijing.aliyuncs.com
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead

sink:
  type: kafka
  name: Kafka Sink
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  # 阿里雲 Kafka 不支援等冪寫入,VVR 8.0.0 及以上版本需顯式關閉
  properties.enable.idempotence: false
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # 專屬網關:需同時配置 kms.ca
  kms.endpoint: <KMS 執行個體的 VPC 端點>
  kms.ca: oss://flink-fullymanaged-<工作空間ID>/artifacts/namespaces/<專案空間名稱>/PrivateKmsCA_kst-******.pem
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead
說明
  • YAML 中 properties.sasl.jaas.config 的值內含雙引號,可直接書寫,無需轉義。

  • SASL 存取點的地址與連接埠以雲訊息佇列 Kafka 版控制台擷取的存取點資訊為準。

Kafka 連接器的完整參數與安全認證說明,請參見Kafka SQL 連接器和Kafka 資料攝入連接器。

參數說明

憑據引用格式

KMS 憑據引用格式為:secret://<provider>.<secret-name>.<key>

欄位

說明

<provider>

憑據源類型標識,當前僅支援 kms。

<secret-name>

KMS 中的憑據名稱,例如 my-db-secret。

<key>

憑據值 SecretData JSON 中的欄位名,例如 AccountName、AccountPassword。

樣本:secret://kms.my-db-secret.AccountPassword

KMS 參數

參數

類型

是否必填

說明

kms.endpoint

String

是

KMS 網關地址(專屬網關或共用網關)。

  • 專屬網關:

    • 在 KMS 執行個體管理頁面,單擊軟體密鑰管理或硬體密鑰管理頁簽後,選擇目標 KMS 執行個體。

    • 單擊執行個體 ID 進入到詳情頁,查看執行個體 VPC 地址,即為 Endpoint。詳情請參見服務存取點。

  • 共用網關:Endpoint 按地區固定,可通過服務存取點擷取。

kms.ca

String

專屬網關必填

CA 憑證的 OSS 路徑。

  1. 通過 KMS 執行個體詳情下載 CA 憑證,下載後的檔案預設命名為 PrivateKmsCA_kst-******.pem。

  2. 通過 Flink 檔案管理上傳,複製 OSS 路徑,格式為 oss://flink-fullymanaged-<工作空間ID>/artifacts/namespaces/<專案空間名稱>/<檔案名稱>。

kms.akless.assume-role.role-name

String

否

訪問 KMS 使用的 RAM 角色名稱。需提前在訪問安全 > RAM 角色中添加引用。