本文介紹如何通過控制台、CLI和API的方式扮演RAM角色,以臨時擷取該角色的許可權來訪問阿里雲資源。
什麼是RAM角色扮演
與RAM使用者不同,您不能直接用RAM角色登入控制台。您需要先用RAM使用者或SSO登入控制台後,再切換到目標RAM角色,這個過程稱為RAM角色扮演。
角色扮演成功後,原身份所擁有的許可權將暫時失去,轉而獲得被扮演的RAM角色所擁有的許可權。被扮演的RAM角色可以與登入的RAM使用者屬於同一阿里雲帳號,也可以屬於不同帳號(跨帳號角色扮演)。
工作原理
下面以RAM使用者Alice嘗試扮演RAM角色prod-role,並以角色身份訪問OSSObject Storage Service為例,解釋角色扮演工作原理:
請求扮演RAM角色:RAM使用者Alice向阿里雲STS服務要求扮演RAM角色prod-role的臨時安全憑證(STS Token)。RAM會驗證Alice的身份(例如AccessKey),是否具有扮演該角色的許可權(
sts:AssumeRole),以及prod-role的信任策略是否允許Alice扮演(Principal是否匹配Alice)。擷取臨時安全憑證:驗證通過後,Alice獲得由阿里雲STS服務返回的STS Token。
以角色身份訪問雲資源:Alice使用擷取到的STS Token,以prod-role角色身份訪問OSSObject Storage Service等雲資源。此時Alice的原有許可權暫時失效,轉而擁有prod-role角色的許可權。最終資源存取權限由角色prod-role的權限原則(
oss:*)決定。
角色扮演的方式
你可以通過以下四種方式扮演RAM角色:
RAM使用者在登入阿里雲控制台後,使用切換身份功能切換到目標角色。
管理員或開發人員使用阿里雲CLI、SDK或OpenAPI調用
AssumeRole介面(或其他角色扮演相關介面,如AssumeRoleWithSAML),擷取臨時安全憑證(STS Token)。使用者使用角色SSO的方式(基於SAML2.0協議),經由使用者的企業身份供應商(IdP)登入控制台。在這種情境下,使用者在完成控制台登入時已經成功扮演了RAM角色。
將角色綁定或關聯到特定阿里雲資源(如ECS執行個體,Function ComputeFC或ACK/ACS Pod),然後使用阿里雲平台的內建功能來完成角色扮演。具體內容,請參見:阿里雲上的應用訪問阿里雲資源。
對於後兩種情境,本文不作具體描述。關於如何使用,請參見上述相關參考文檔。
角色會話的有效時間
角色會話是指實體身份(如RAM使用者或其他可信實體)在成功扮演角色後,所建立的有時限的訪問會話。角色會話的有效時間控制著您以該角色身份執行操作的可用時間長度。會話到期後,您需要重新通過扮演角色來擷取新的會話。
控制台
決定因素 | 預設值 | 取值範圍 | 說明 |
角色最大會話時間 | 1小時 | 1~12小時 | 可針對每個角色單獨設定。 |
登入工作階段的到期時間 | 6小時 | 1~24小時 | 全域設定,影響所有RAM使用者和RAM角色。 |
會話有效時間取上述兩個因素中的較小值 。例如:登入工作階段的到期時間設定為8小時,角色A的最大會話時間設定為1小時,則切換身份為角色A後,會話有效時間為1小時。會話到期後需要重新切換身份進行角色扮演。
OpenAPI
決定因素 | 預設值 | 取值範圍 | 說明 |
角色最大會話時間 | 1小時 | 1~12小時 | 可針對每個角色單獨設定。 |
| 3600秒(1小時) | 900秒(15分鐘)~角色最大會話時間 | 調用 |
SAML響應/OIDC Token有效時間 | 由IdP決定(通常為1小時) | 由IdP決定 | 僅角色SSO情境,通過 |
會話有效時間取上述相關因素中的較小值 。會話到期後需要重新調用AssumeRole*介面進行角色扮演。
如需瞭解如何設定角色最大會話時間和登入工作階段的到期時間,請參見設定RAM角色最大會話時間、管理RAM使用者安全設定。
扮演RAM角色的操作方式
您可以根據實際情境選擇合適的方式扮演RAM角色:
控制台切換身份:在控制台臨時切換到RAM角色執行操作。
API調用:程式或服務擷取臨時安全憑證(STS Token)訪問阿里雲資源。
CLI命令:通過命令列工具以RAM角色身份執行操作。
切換身份為RAM角色(控制台)
使用RAM使用者或通過角色SSO登入控制台後,可以通過切換身份的方式扮演RAM角色。
角色扮演要求的權限
RAM使用者登入
為RAM使用者指派系統策略
AliyunSTSAssumeRoleAccess或包含許可權操作sts:AssumeRole的自訂策略。具體授權操作,請參見管理RAM使用者的許可權。說明該系統策略(
AliyunSTSAssumeRoleAccess)允許RAM使用者扮演所有RAM角色。角色SSO登入
通過角色SSO登入時,您已經以RAM角色身份登入。如需切換身份到其他角色,必須確保當前角色具有扮演目標角色的許可權。為當前角色指派系統策略
AliyunSTSAssumeRoleAccess或包含許可權操作sts:AssumeRole的自訂策略。例如:假設角色SSO登入後的身份是角色A,如果使用者需要切換身份為角色B,那麼就需要確保角色A具備身份權限原則,以允許扮演角色B。
操作步驟
使用RAM使用者或角色SSO登入RAM控制台。
將滑鼠移至上方在右上方頭像的位置,單擊切換身份。


在角色切換頁面,輸入要扮演的RAM角色資訊。
企業別名/預設網域名稱/主帳號UID:RAM角色所屬的企業別名(帳號別名)、預設網域名稱或歸屬的阿里雲帳號(主帳號)ID,三者任選其一。如需跨帳號切換,填寫目標帳號的阿里雲帳號ID。
角色名稱:要扮演的RAM角色名稱。向管理員諮詢,或在RAM控制台頁面查看。
單擊提交。
身份切換成功後,您將以RAM角色身份Operations 主控台。控制台右上方頭像位置將顯示當前身份和登入身份(原身份)。

登入身份和當前身份的顯示格式如下表所示:
登入情境
登入身份
當前身份
RAM使用者登入
<RAM使用者名稱><RoleName>/<RAM使用者名稱>角色SSO登入(首次)
不顯示
<RoleName>/<RoleSessionName>角色SSO登入後切換身份
<SSO角色名稱>/<RoleSessionName><切換后角色名>/<RoleSessionName>欄位說明
RoleName:當前扮演的角色名稱。
RoleSessionName:會話名稱。RAM使用者登入時為RAM使用者名稱;角色SSO登入時由IdP提供,切換身份後保持不變。
樣本
使用者Tom(UPN:
tom@example.local)通過角色SSO以角色test-saml-role1登入控制台,然後切換身份為角色alice-testrole。假設RoleSessionName為使用者的UPN。則登入身份與當前身份分別為:登入身份:
test-saml-role1/tom@example.local當前身份:
alice-testrole/tom@example.local
(可選)切換回原身份。將滑鼠移至上方在控制台右上方頭像位置,單擊返回登入身份。切換後,RAM角色的許可權將失效,原身份的許可權將恢複。
如管理員針對目標角色設定了特殊條件規則(sts:ExternalId或sts:SourceIdentity),或目標角色僅信任某些特定實體身份(如特定RAM使用者)時,身份切換可能失敗。
如遇到身份切換失敗問題,您需要檢查原身份被授與權限策略,以及目標角色的信任策略。
通過API扮演RAM角色
您可以通過調用STS服務的API來扮演RAM角色,並擷取所扮演角色的臨時安全憑證(STS Token)。當程式或服務隨後通過擷取的STS Token訪問阿里雲資源時,將可執行所扮演角色許可權範圍內的操作。
角色扮演API
API | 說明 |
擷取扮演RAM角色的臨時安全憑證,適用於使用AccessKey或STS Token等憑證進行角色扮演的情境。 | |
通過SAML斷言擷取臨時安全憑證,適用於SAML 角色SSO情境。 | |
通過OIDC Token擷取臨時安全憑證,適用於OIDC 角色SSO情境。 |
在調用上述API時,您需要通過 RoleArn 參數明確指定希望扮演的RAM角色(Arn格式為 acs:ram::<主帳號ID>:role/<角色名稱>)。
此外,您還可以通過傳遞 Policy 參數(會話策略),在本次角色會話中對所扮演角色的許可權做進一步限制。
調用API要求的權限
通過不同API進行角色扮演,所需要的許可權不同:
如果使用 AssumeRole 介面,調用者必須被授予
sts:AssumeRole操作許可權(如附加AliyunSTSAssumeRoleAccess系統策略)。如果使用 AssumeRoleWithSAML 或 AssumeRoleWithOIDC 介面,只需在目標RAM角色的信任策略中正確配置受信任的SAML或OIDC身份供應商,無需為外部身份單獨分配RAM身份權限原則。
您可以使用阿里雲SDK調用AssumeRole相關介面扮演RAM角色,關於具體範例程式碼,請參見相關SDK文檔,如:使用AK及RamRoleArn擷取STS Token(Python SDK)。
如管理員針對目標角色設定了特殊條件規則(sts:ExternalId或sts:SourceIdentity),或目標角色僅信任某些特定實體身份(如特定RAM使用者)時,通過API的角色扮演可能失敗。
如遇到API調用返回許可權不足相關問題,您需要檢查原身份被授與權限策略,以及目標角色的信任策略。
使用CLI扮演RAM角色
假設您希望通過CLI扮演RAM角色admin-role,來完成相關管理工作。操作步驟如下:
為阿里雲CLI配置身份憑證。這裡使用RamRoleArn模式為例,也即通過RAM使用者的AccessKey作為身份認證方式來完成角色扮演。
aliyun configure --profile RamRoleArnProfile --mode RamRoleArn按照提示輸入AccessKey ID,AccessKey Secret,要扮演的角色Arn,角色會話名等資訊。具體參數說明和用法請參考阿里雲CLI憑證配置。
Configuring profile 'RamRoleArnProfile' in 'RamRoleArn' authenticate mode... Access Key Id []: <yourAccessKeyID> Access Key Secret []: <yourAccessKeySecret> Sts Region []: cn-shanghai Ram Role Arn []: acs:ram::012345678910****:role/admin-role Role Session Name []: user-name External ID []: abcd1234 Expired Seconds [900]: 900 Default Region Id []: cn-shanghai Default Output Format [json]: json (Only support json) Default Language [zh|en] en: en Saving profile[RamRoleArnProfile] ...Done.完成認證後,執行具體命令。此時執行命令所使用的身份為所扮演的目標RAM角色,而非持有AccessKey的RAM使用者。
aliyun ram ListUsers --profile RamRoleArnProfile
詳細操作步驟,請參見為程式或服務建立AccessKey並使用。
跨帳號角色扮演
跨帳號角色扮演允許您以一個阿里雲帳號下的身份(RAM使用者或RAM角色),扮演另一個阿里雲帳號下的RAM角色,從而訪問該帳號下的資源。
實現跨帳號角色扮演需要滿足以下條件:
目標角色需要信任源帳號或源帳號下的RAM使用者、RAM角色(在目標角色的信任策略中通過
Principal關鍵字定義)。原身份具有
sts:AssumeRole操作許可權。
更多資訊,請參見跨阿里雲帳號訪問資源。
角色鏈
角色鏈指的是 RAM 身份(或角色SSO)成功扮演一個角色後,繼續以這個角色的身份扮演其他角色的過程。
要使得角色A可以繼續扮演角色B,角色A必須被授予sts:AssumeRole操作許可權,且角色B必須信任角色A。
下面使用CLI示範如何使用角色鏈:
按照上述使用CLI扮演RAM角色案例配置CLI並扮演角色
admin-role(源角色)。為角色
admin-role添加系統策略AliyunSTSAssumeRoleAccess。建立目標RAM角色,例如名稱為
target-role。修改目標角色的信任策略,在Principal關鍵字中指定身份為admin-role:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<ACCOUNT_ID>:role/admin-role" ] } } ], "Version": "1" }使用ChainableProfile模式來配置阿里雲CLI。
aliyun configure --profile ChainableProfile --mode ChainableRamRoleArn按照提示輸入源配置(Source Profile)名,希望繼續扮演的角色Arn等資訊。
Configuring profile 'ChainableProfile' in 'ChainableRamRoleArn' authenticate mode... Source Profile []: RamRoleArnProfile Sts Region []: cn-shanghai Ram Role Arn []: acs:ram::012345678910****:role/target-role Role Session Name []: user-name External ID []: abcd1234 Expired Seconds [900]: 900 Default Region Id []: cn-shanghai Default Output Format [json]: json (Only support json) Default Language [zh|en] zh: en Saving profile[ChainableProfile] ...Done.完成認證後,執行如下命令來查看當前調用者的身份資訊。返回結果中將包含目標角色Arn。
aliyun sts GetCallerIdentity您現在可以使用角色鏈中目標角色的身份執行CLI命令。
在使用角色鏈的情境下,通過審計日誌追溯初始角色調用者身份資訊將變得困難。此時,建議用SourceIdentity實現角色扮演溯源與許可權控制。
常見問題
如何限制使用者只能扮演某些特定RAM角色
系統權限原則AliyunSTSAssumeRoleAccess允許扮演所有RAM角色。如您需要限制扮演指定RAM角色,需要為原身份配置自訂權限原則並修改目標角色的信任策略。更多內容,請參見如何限制指定RAM使用者扮演指定RAM角色。
阿里雲主帳號是否可以扮演RAM角色
不可以。阿里雲帳號(主帳號)無法通過控制台切換身份為RAM角色,也無法通過調用AssumeRole介面扮演RAM角色。
如果通過角色扮演擷取的STS Token發生泄露該如何處理
如果您通過扮演角色擷取的STS Token發生泄露,您可以回收所有已經頒發的STS Token。具體操作,請參見STS Token發生泄露時如何處理。