共用方式為


使用系統指派的託管身分識別來認證 Azure 托管的 Python 應用程式與 Azure 資源。

向其他 Azure 資源驗證 Azure 裝載應用程式的建議方法是使用 受控識別。 此方法 支援大部分的 Azure 服務,包括裝載在 Azure App Service、Azure Container Apps 和 Azure 虛擬機上的應用程式。 在驗證概覽頁面上瞭解更多不同的驗證技術和方法。 在接下來的各節中,您將瞭解:

  • 基本受控識別概念
  • 如何為您的應用程式建立系統指派的受控識別
  • 如何將角色指派給系統指派的受管理身份
  • 如何從應用程式程式代碼使用系統指派的受控識別進行驗證

基本受控識別概念

受控識別可讓您的應用程式安全地連線到其他 Azure 資源,而不需要使用秘密金鑰或其他應用程式秘密。 在內部,Azure 會追蹤身分識別,以及允許其連線的資源。 Azure 會使用這項資訊自動取得應用程式Microsoft Entra 令牌,以允許它連線到其他 Azure 資源。

設定載入的應用程式時,需要考慮兩種類型的受控識別:

  • 系統指派 受控身分識別是在 Azure 資源上直接啟用的,並與其生命周期緊密相連。 刪除資源時,Azure 會自動為您刪除身分識別。 系統指派的身分識別提供使用受控識別的極簡方法。
  • 使用者指派的 管理的身分會建立為獨立的 Azure 資源,並提供更強的彈性與功能。 其適用於涉及多個需要共用相同身分識別和許可權之 Azure 資源的解決方案。 例如,如果多個虛擬機需要存取同一組 Azure 資源,則使用者指派的受控識別可提供重複使用性和優化管理。

小提示

如需如何深入瞭解如何選取和管理系統指派和使用者指派的受控識別,請參閱 受控識別最佳做法建議 一文。

前面的各節說明為 Azure 裝載的應用程式啟用和使用系統指派的受控識別的步驟。 如果您需要使用使用者指派的受控識別,請流覽 用戶指派的受控識別 文章以取得詳細資訊。

在 Azure 裝載資源上啟用系統指派的受控識別

若要開始使用系統指派的受控識別搭配您的應用程式,請在裝載應用程式的 Azure 資源上啟用身分識別,例如 Azure App Service、Azure Container App 或 Azure 虛擬機。

您可以使用 Azure 入口網站或 Azure CLI,為 Azure 資源啟用系統指派的受控識別。

  1. 在 Azure 入口網站中,瀏覽至裝載應用程式程式代碼的資源,例如 Azure App Service 或 Azure Container App 實例。

  2. 從資源的 [概觀] 頁面中,展開 [[設定],然後從導覽中選取 [身分識別]。

  3. 在 [身份] 頁面上,將 [狀態] 滑桿切換到 開啟

  4. 選取 [儲存] 以套用變更

    螢幕擷取畫面,示範如何在容器應用程式上啟用系統指派的受控識別。

將角色指派給管理的身分識別

接下來,判斷您的應用程式需要哪些角色,並將這些角色指派給受控識別。 您可以在下列範圍將角色指派給受控識別:

  • 資源:指派的角色僅適用於該特定資源。
  • 資源群組:指派的角色會套用至資源群組中包含的所有資源。
  • 訂用帳戶:指派的角色會套用至訂用帳戶中包含的所有資源。

下列範例示範如何在資源群組範圍指派角色,因為許多應用程式都會使用單一資源群組來管理其所有相關的 Azure 資源。

  1. 流覽至資源群組的 [概觀] 頁面,其中包含具有系統指派受控識別的應用程式。

  2. 請選取左側導覽列中的 存取控制 (IAM)

  3. 在 [存取控制 (IAM)] 頁面上,選取頂端功能表上的 [+ 新增],然後選擇 [新增角色指派] 導覽至 [新增角色指派] 頁面。

    螢幕擷取畫面,顯示如何存取身分識別角色指派頁面。

  4. [新增角色指派] 頁面會顯示多步驟的索引標籤式工作流程,以將角色指派給身分。 在 [初始 角色] 索引標籤上,使用頂端的搜尋方塊來找出您要指派給身分識別的角色。

  5. 從結果中選取角色,然後選擇 [下一步] 以移至 [成員] 標籤。

  6. 針對 [[指派存取權給] 選項,選取 [受控識別]。

  7. 針對 [成員] 選項,選取 [+ 選取成員] 以開啟 [選取受控識別] 面板。

  8. 在 [選取受控識別 面板上,使用 [訂用帳戶] 和 [受控 識別] 下拉式清單來篩選您身分識別的搜尋結果。 使用 [] 選取 [] 搜尋方塊,找出您為裝載應用程式的 Azure 資源啟用的系統身分識別。

    顯示受控識別指派程式的螢幕擷取畫面。

  9. 選取身分,然後在面板底部選擇[選取]以繼續。

  10. 請在頁面底部點選 ,然後選擇 [檢閱 + 指派]。

  11. 在最後一個 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派],以完成工作流程。

從您的應用程式向 Azure 服務進行驗證

Azure 身分識別程式庫 提供各種 認證的實作,以支援不同的情境和 Microsoft Entra 驗證流程。 由於在本機執行時無法使用受控身分識別,後續步驟會示範應該在什麼情況下使用哪種認證:

  • 本機開發環境只在本機開發時,請使用名為 DefaultAzureCredential 的類別,以便使用預先配置且有意見的認證鏈。 DefaultAzureCredential 從本機工具或 IDE 探索使用者認證,例如 Azure CLI 或 Visual Studio Code。 它也提供重試的彈性和便利性、回應等候時間,以及支援多個驗證選項。 若要了解更多資訊,請瀏覽本機開發期間對 Azure 服務進行驗證的文章。
  • Azure 裝載的應用程式:當您的應用程式在 Azure 中執行時,請使用 ManagedIdentityCredential 安全地探索針對應用程式設定的受控識別。 指定此準確類型的認證可防止意外地選用其他可用的認證。

實作程序代碼

透過前往應用程式專案目錄並執行以下指令,將 azure-identity 套件加入您的應用程式:

pip install azure-identity

Azure 服務是使用來自各種 Azure SDK 用戶端連結庫的特殊客戶端類別來存取。 以下程式碼範例示範如何建立憑證實例並與 Azure SDK 服務客戶端一起使用。 在您的應用程式代碼中,請完成以下步驟以使用管理身份進行認證:

  1. 從模組匯入 ManagedIdentityCredentialazure.identity 類別。
  2. 建立 ManagedIdentityCredential 物件。
  3. 將物件傳給 ManagedIdentityCredential Azure SDK 客戶端建構器。

以下範例展示了使用系統指派的管理身份來驗證 a BlobServiceClient

from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobServiceClient

# Authenticate using system-assigned managed identity
credential = ManagedIdentityCredential()

blob_service_client = BlobServiceClient(
    account_url="https://<account-name>.blob.core.windows.net",
    credential=credential
)

在本地開發時,你可以用 DefaultAzureCredential 它從本地開發工具中發現憑證。 部署到 Azure 時,請切換到用於正式環境的 ManagedIdentityCredential

import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.storage.blob import BlobServiceClient

# Use ManagedIdentityCredential in Azure, DefaultAzureCredential locally
if os.getenv("WEBSITE_HOSTNAME"):
    credential = ManagedIdentityCredential()
else:
    credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
    account_url="https://<account-name>.blob.core.windows.net",
    credential=credential
)