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 角色
登入 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 角色
登入Realtime Compute控制台,進入目標工作空間。
在左側導覽列,選擇。
單擊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,完成使用者委託的任務。