您好,登錄后才能下訂單哦!
生成云應用程序時需要應對的常見挑戰是,如何管理代碼中用于云服務身份驗證的憑據。 保護這些憑據是一項重要任務。 理想情況下,這些憑據永遠不會出現在開發者工作站上,也不會被簽入源代碼管理系統中。雖然 Azure Key Vault 可用于安全存儲憑據、機密以及其他密鑰,但代碼需要通過 Key Vault 的身份驗證才能檢索它們。
Azure Active Directory (Azure AD) 中的 Azure 資源托管標識功能可以解決此問題。 此功能為 Azure 服務提供了 Azure AD 中的自動托管標識。 可以使用此標識向支持 Azure AD 身份驗證的任何服務(包括 Key Vault)證明身份,無需在代碼中放入任何憑據。
Azure 資源托管標識的工作原理:
托管標識分為兩種類型:
系統分配托管標識 直接在 Azure 服務實例上啟用。 啟用標識后,Azure 將在實例的訂閱信任的 Azure AD 租戶中創建實例的標識。創建標識后,系統會將憑據預配到實例。 系統分配標識的生命周期直接綁定到啟用它的 Azure 服務實例。 如果實例遭刪除,Azure 會自動清理 Azure AD 中的憑據和標識。
用戶分配托管標識 是作為獨立的 Azure 資源創建的。 在創建過程中,Azure 會在由所用訂閱信任的 Azure AD 租戶中創建一個標識。 在創建標識后,可以將標識分配到一個或多個 Azure 服務實例。 用戶分配標識的生命周期與它所分配到的 Azure 服務實例的生命周期是分開管理的。
下圖演示了托管服務標識如何與 Azure 虛擬機 (VM) 協同工作:
系統分配托管標識如何與 Azure VM 協同工作:
1. Azure 資源管理器收到請求,要求在 VM 上啟用系統分配托管標識。
2. Azure 資源管理器在 Azure AD 中創建與 VM 標識相對應的服務主體。 服務主體在此訂閱信任的 Azure AD 租戶中創建。
3. Azure 資源管理器在 VM 上配置標識:使用服務主體客戶端 ID 和證書更新 Azure 實例元數據服務標識終結點。
4. VM 有了標識以后,請根據服務主體信息向 VM 授予對 Azure 資源的訪問權限。 若要調用 Azure 資源管理器,請在 Azure AD 中使用基于角色的訪問控制 (RBAC) 向 VM 服務主體分配相應的角色。 若要調用 Key Vault,請授予代碼對 Key Vault 中特定機密或密鑰的訪問權限。
5. 在 VM 上運行的代碼可以從只能從 VM 中訪問的一個終結點請求令牌(另一個已經棄用):
Azure 實例元數據服務標識終結點(推薦):http://169.254.169.254/metadata/identity/oauth3/token
resource 參數指定了要向其發送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用 resource=https://management.azure.com/。
API 版本參數指定 IMDS 版本,請使用 api-version=2018-02-01 或更高版本。
6. 調用了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。
7. 代碼在調用支持 Azure AD 身份驗證的服務時發送訪問令牌。
用戶分配托管標識如何與 Azure VM 協同工作:
1. Azure 資源管理器收到請求,要求創建用戶分配托管標識。
2. Azure 資源管理器在 Azure AD 中創建與用戶分配托管標識相對應的服務主體。服務主體在此訂閱信任的 Azure AD 租戶中創建。
3. Azure 資源管理器收到請求,要求在 VM 上配置用戶分配托管標識:使用用戶分配托管標識服務主體客戶端 ID 和證書更新 Azure 實例元數據服務標識終結點。
4. 創建用戶分配托管標識以后,請根據服務主體信息向標識授予對 Azure 資源的訪問權限。 若要調用 Azure 資源管理器,請在 Azure AD 中使用 RBAC 向用戶分配標識的服務主體分配相應的角色。若要調用 Key Vault,請授予代碼對 Key Vault 中特定機密或密鑰的訪問權限。
5. 在 VM 上運行的代碼可以從只能從 VM 中訪問的一個終結點請求令牌(另一個已經棄用):
Azure 實例元數據服務標識終結點(推薦):http://169.254.169.254/metadata/identity/oauth3/token
resource 參數指定了要向其發送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用 resource=https://management.azure.com/。
API 版本參數指定 IMDS 版本,請使用 api-version=2018-02-01 或更高版本。
6. 調用了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。
7. 代碼在調用支持 Azure AD 身份驗證的服務時發送訪問令牌。
=============================================================================================
下面簡單介紹下如何使用啟用了系統分配的托管標識的 Windows 虛擬機來訪問 Azure 資源管理器 API
在資源組下面點擊訪問控制,然后添加角色分配
選擇角色并將訪問權限分配到虛擬機
然后登錄該虛擬機,打開powershell,執行如下命令。使用 Invoke-WebRequest cmdlet,向 Azure 資源終結點的本地托管標識發出請求以獲取 Azure 資源管理器的訪問令牌。
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth3/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
接下來,提取完整響應,響應以 JavaScript 對象表示法 (JSON) 格式字符串的形式存儲在 $response 對象中。
1. $content = $response.Content | ConvertFrom-Json
然后從響應中提取訪問令牌。
1. $ArmToken = $content.access_token
最后,使用訪問令牌調用 Azure 資源管理器。 在此示例中,我們還使用 Invoke-WebRequest cmdlet 調用 Azure 資源管理器,并將訪問令牌包含在授權標頭中。
(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"}).content
執行命令后將顯示資源組的相關信息。
為了驗證權限,我們去請求別的資源組的信息,結果會提示你沒有權限去讀取。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。