全部產品
Search
文件中心

Realtime Compute for Apache Flink:使用 RAM 角色訪問雲資源(公測)

更新時間:Aug 30, 2026

Realtime Compute 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 作業因無許可權訪問雲資源而運行失敗。根據Service Level Agreement for Realtime Compute for Apache 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 角色

  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 使用者已關聯 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。Flink 將通過扮演該角色擷取臨時憑證,以該角色身份訪問雲資源。

添加引用 RAM 角色

  1. 登入Realtime Compute控制台,進入目標工作空間。

  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 服務。在此情境中,使用者是授權者,雲端服務是代為執行者。