本文為您介紹ExternalId的應用情境、使用流程和操作步驟。
應用情境
企業有時需要使用第三方供應商提供的服務來管理其雲環境,例如:日誌審計、成本管理、安全監控等情境。在這些情境下,企業會給予第三方供應商訪問其雲上資源的許可權,這裡就涉及到跨帳號訪問。阿里雲RAM提供了角色扮演(AssumeRole)的能力,用於解決跨帳號訪問的問題。
由於第三方供應商可能需要同時訪問多個客戶的多個阿里雲帳號,如果處理不當容易被攻擊者利用,騙過供應商偽裝成其他客戶,即發生混淆代理人問題。混淆代理人問題是一個安全問題,是指一個受信任的實體被惡意實體欺騙或誤導,執行了未經授權的操作。這個惡意實體就是一個“混淆代理”,通過欺騙受信任的實體來實施自己的目的。阿里雲RAM提供ExternalId防止混淆代理人問題。更多資訊,請參見AssumeRole。
使用流程
第三方供應商應該為他的每個客戶產生唯一的ExternalId,並確保ExternalId是一個隨機字串,即不容易被猜測出來。
客戶擷取到第三方供應商提供的ExternalId後,將該ExternalId加入到提供給該供應商使用的角色的信任策略中。
第三方供應商通過調用AssumeRole介面扮演角色的時候,需要提供頒發給這個客戶的ExternalId,不提供或者提供錯誤都會失敗。
操作步驟
本樣本中,第三方供應商Deputy需要使用自己的阿里雲帳號Deputy_Account訪問客戶的阿里雲帳號Customer_Account的資源,為確保安全性,第三方供應商Deputy為客戶提供唯一的ExternalId為abcd1234。
客戶在阿里雲帳號Customer_Account中建立一個可信實體為阿里雲帳號Deputy_Account的RAM角色,並按需為RAM角色授予相應的權限原則。
具體操作,請參見建立可信實體為阿里雲帳號的RAM角色和為RAM角色授權。
修改RAM角色信任策略,指定扮演角色的可信實體必須滿足
ExternalId
為abcd1234
這個條件。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<deputy-accountId>:root" ] }, "Condition": { "StringEquals": { "sts:ExternalId": "abcd1234" } } } ], "Version": "1" }
具體操作,請參見修改RAM角色的信任策略。
當第三方供應商需要扮演角色訪問客戶帳號時,需要提供匹配的ExternalId。
本樣本中,調用AssumeRole介面的請求參數中必須指定
ExternalId
為abcd1234
。第三方供應商Deputy通過產生的STS Token訪問客戶帳號Customer_Account中的資源。