本文介紹RAM角色的定義、與RAM使用者的區別、應用情境、核心概念和使用流程。
什麼是RAM角色
RAM角色是一種RAM身份類型,可以被授予一組權限原則。與RAM使用者不同,RAM角色沒有長期身份憑證(登入密碼或存取金鑰),需要被一個可信實體扮演後才能使用。扮演成功後,可信實體將獲得RAM角色的臨時身份憑證,即安全性權杖(STS Token),使用該安全性權杖就能以RAM角色身份訪問被授權的資源。
每個RAM角色都有一個全域唯一的資源描述符(ARN),格式為acs:ram::<account-id>:role/<role-name>,用於在策略和API調用中指定具體角色。關於如何查看角色ARN,請參見查看RAM角色。
為什麼使用RAM角色
相比直接使用RAM使用者身份訪問雲資源,扮演RAM角色具備更高的靈活性與安全性:
動態許可權提升:日常以許可權受限的RAM使用者登入控制台,需要執行特定操作時臨時切換到具備要求的權限的角色,操作完成後切回原身份。
跨帳號資源訪問:扮演其他阿里雲帳號下的RAM角色,訪問該帳號的資源。
臨時憑證擷取:通過調用API扮演角色擷取STS Token,用於程式或服務訪問阿里雲資源,避免在代碼中寫入程式碼長期AccessKey。
核心概念
在使用RAM角色前,需要瞭解以下核心概念。這些概念有助於理解角色的工作機制和配置方式。
可信實體
可信實體是指被允許扮演該角色的實體身份,通過角色信任策略指定。主要包括以下三類:
雲帳號:允許雲帳號本身,或阿里雲帳號下的RAM身份(RAM使用者或RAM角色)扮演該角色,可以是當前帳號或其他帳號。
適用情境:
RAM使用者在控制台切換身份扮演角色。
通過CLI/SDK調用
AssumeRole介面扮演角色。
說明建立可信實體為雲帳號類型的RAM角色時,預設信任該雲帳號本身,也即帳號下的所有身份均可扮演該角色。可通過修改角色信任策略,限定該RAM角色只能被帳號(當前或其他特定帳號)下的指定RAM身份扮演,具體請參見修改RAM角色的信任策略。
雲端服務:允許指定的雲端服務扮演該角色。這種角色稱之為服務角色。
適用情境:
委託雲端服務代表使用者完成指定操作。如使用者可通過執行個體RAM角色,在ECS執行個體中訪問OSS bucket中的資料。
大多數雲端服務會自動建立服務關聯角色(一種特殊的RAM角色,由雲端服務預定義),用於解決雲端服務間的授權訪問問題。
身份供應商:允許來自指定身份供應商(支援SAML2.0或OIDC協議)的使用者扮演該角色。
適用情境:
IdP使用者使用角色SSO的方式登入控制台。
調用
AssumeRoleWithSAML或AssumeRoleWithOIDC介面,傳入從IdP處獲得的令牌(SAML響應或ID Token)扮演角色。
角色扮演
角色扮演是指RAM使用者或其他實體身份切換到目標RAM角色的過程。角色扮演依賴於阿里雲Security Token Service(Security Token Service, STS),扮演成功後調用者獲得由STS服務頒發的STS Token,並建立角色會話。在角色會話持續期間,原身份的許可權暫時失效,獲得RAM角色的許可權,以RAM角色的身份訪問資源。被扮演的RAM角色可與原身份屬於同一帳號,也可屬於不同帳號(跨帳號角色扮演)。
可登入控制台後切換身份,也可通過調用AssumeRole 或 AssumeRoleWithSAML/AssumeRoleWithOIDC等介面扮演角色。具體請參見扮演RAM角色。
信任策略
角色信任策略(Trust Policy)是為RAM角色配置的JSON格式策略文檔,定義了哪些身份主體(即可信實體)可以扮演該角色。角色信任策略本質上是一種附加在角色上的基於資源的權限原則。
核心作用:
控制身份信任邊界:決定哪些主體可以扮演該角色。
支撐跨帳號和跨服務訪問:是實現多帳號協同、跨服務授權訪問的基礎機制。
配合權限原則:信任策略決定“誰能扮演”,權限原則決定“能做什麼”,二者協同工作。
策略樣本:
以下信任策略允許帳號 123456789012**** 下的所有身份(RAM使用者、RAM角色)扮演該角色:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::123456789012****:root"
]
}
}
],
"Version": "1"
}RAM角色與RAM使用者的區別
RAM角色和RAM使用者都是RAM身份類型,但它們的使用方式和適用情境有顯著差異。下表對比了兩者的主要區別:
對比項 | RAM使用者 | RAM角色 |
使用方式 | 可直接使用(如使用使用者名稱和密碼登入控制台) | 需被可信實體扮演後才能使用 |
身份憑證 | 擁有長期憑證(登入密碼或AccessKey) | 無長期憑證,扮演成功後獲得臨時安全憑證(STS Token) |
憑證有效期間 | 長期有效 | STS Token有時效性,到期後需重新扮演角色擷取 |
信任策略 | 無 | 擁有信任策略,定義誰可以扮演該角色 |
角色會話
角色會話是指實體身份(如RAM使用者、雲端服務或其他可信實體)在成功扮演角色後,所建立的臨時訪問會話。在會話有效期間,調用者以該角色身份執行操作,原身份所擁有的許可權將暫時失去。
一個完整的角色會話通常由以下要素構成:
會話名稱(RoleSessionName): 這是一個由調用方自訂的標識符(一般設定為使用者名稱、服務名或任務名),用於在審計日誌(如Action Trail ActionTrail)中區分同一角色下不同的會話執行個體,實現操作的可追溯性。
有效時間:角色會話具有明確的生命週期,到期後憑證自動失效。具體請參見:角色會話的有效時間。
在建立會話時,可以額外指定一個權限原則,稱之為會話策略。最終角色會話的許可權是角色本身許可權與會話策略許可權的交集,實現了許可權的二次精細化管控。具體使用方式請參見AssumeRole - 擷取扮演角色的臨時身份憑證中的請求參數Policy描述。
角色鏈
角色鏈是指一個身份(如RAM使用者)首先扮演第一個角色,然後利用該角色的臨時安全憑證去扮演第二個(甚至更多)角色的過程。簡單來說,就是:A 扮演 B,B 再扮演 C。角色鏈中的RAM角色可以屬於同一個阿里雲帳號,也可以屬於不同帳號。
角色鏈適用於需要跨多個帳號進行資源訪問的情境,例如:
企業採用多帳號架構管理雲資源(如管理帳號、開發帳號、測試帳號、生產帳號),營運人員通過企業IdP以角色SSO方式登入阿里雲後,獲得一個基礎營運角色(僅具備查看許可權)。當需要在生產帳號執行變更操作時,營運人員切換身份扮演生產帳號下的“生產變更角色”,完成操作後切回基礎角色。 角色鏈路徑:企業IdP → 基礎營運角色(管理帳號)→ 生產變更角色(生產帳號)。
可以使用阿里雲控制台(切換身份)、阿里雲CLI或API來進行鏈式角色扮演。具體請參見角色鏈使用方式。
使用限制
關於RAM角色的使用限制,請參見使用限制。
使用流程
建立RAM角色
您可以根據不同的用途,選擇建立不同可信實體類型的RAM角色。
為RAM角色授權
為RAM角色添加系統策略或自訂策略。具體操作,請參見管理RAM角色的許可權。
扮演RAM角色
身份主體(如RAM使用者、RAM角色、雲端服務等)通過控制台或API扮演角色並擷取安全性權杖。具體操作,請參見扮演RAM角色的操作方式。
應用情境
臨時授權訪問
開發人員日常使用許可權受限的RAM使用者帳號工作,當需要執行敏感操作(如修改生產環境配置)時,需要臨時擷取更高許可權。此時,您可以建立可信實體為雲帳號的RAM角色。開發人員通過控制台切換身份臨時扮演該角色執行操作,完成後切回原身份。這種方式既保證了日常工作的安全性,又滿足了臨時許可權需求。
更多資訊,請參見扮演RAM角色的操作方式。
跨帳號訪問
當擁有多個阿里雲帳號時(如帳號A和帳號B),希望帳號B訪問帳號A的資源:
在帳號A下建立可信實體為帳號B的RAM角色
授權帳號B下的RAM使用者或RAM角色可以扮演該角色
帳號B通過扮演該角色訪問帳號A的指定資源
更多資訊,請參見跨阿里雲帳號訪問資源。
委託服務訪問
ECS執行個體上啟動並執行應用程式需要訪問OSS等雲資源時,通常需要在代碼中配置AccessKey,存在憑證泄露風險。此時,您可以建立可信實體為雲端服務(ECS)的RAM角色,並為ECS執行個體綁定該RAM角色,執行個體會自動擷取並使用安全憑證訪問雲資源,無需在代碼中配置AccessKey。
更多資訊,請參見執行個體RAM角色。
單點登入(角色SSO)
阿里雲與企業進行角色SSO時,阿里雲是服務提供者(SP),而企業自有的身份管理系統則是身份供應商(IdP)。通過角色SSO,企業可以在本地IdP中管理員工資訊,無需進行阿里雲和企業IdP間的使用者同步,企業員工將使用指定的RAM角色登入阿里雲。此時,您可以建立可信實體為身份供應商的RAM角色解決該問題。
更多資訊,請參見SAML角色SSO概覽和OIDC角色SSO概覽。