Azure Container Apps 中的受控識別

來自 Microsoft Entra 識別碼的受控識別可讓您的容器應用程式存取其他受 Microsoft Entra 保護的資源。 如需 Microsoft Entra ID 中受控識別的詳細資訊,請參閱 Azure 資源的受控識別。

您的容器應用程式可以被授與兩種類型的識別:

  • 系統指派的身分識別會系結至您的容器應用程式,並在刪除容器應用程式時刪除。 應用程式只能有一個系統指派的身分識別。
  • 使用者指派的身分識別是獨立的 Azure 資源,可指派給您的容器應用程式和其他資源。 容器應用程式可以具有多個使用者指派的識別。 該識別會持續存在直到您將其刪除為止。

為什麼要使用受控識別?

您可以在執行中的容器應用程式中使用受控識別,向任何 支援 Microsoft Entra 驗證的服務進行驗證

使用受控識別:

  • 您的應用程式會使用受控識別來連線到資源。 您不需要在您的容器應用程式中管理認證。
  • 您可以使用角色型存取控制,將特定的許可權授與給受控識別。
  • 系統指派的識別會自動建立和管理。 當您的容器應用程式被刪除時,它們也會被刪除。
  • 您可以新增和刪除使用者指派的識別,以及將其指派給多個資源。 它們與您的容器應用程式的生命週期無關。
  • 您可以使用受控識別向 私人 Azure Container Registry 進行驗證,而不需要使用者名稱和密碼即可提取容器應用程式的容器。
  • 您可以使用 受控識別,透過 Dapr 元件建立已啟用 Dapr 的應用程式連線

常見使用案例

系統指派的識別最適合下列類型的工作負載:

  • 包含在單一資源內
  • 需要獨立的識別

使用者指派的識別非常適合下列類型的工作負載:

  • 在多個資源上執行且可共用單一識別
  • 需要對安全資源進行預先授權

限制

不支援在調整規則中使用受控識別。 您仍然需要在調整規則的 中包含 secretRef 連接字串 或索引鍵。

Init 容器 無法存取受控識別。

設定受控識別

您可以透過下列方式來設定您的受控識別:

  • Azure 入口網站
  • Azure CLI
  • 您的 Azure Resource Manager (ARM) 樣本

在執行中的容器應用程式上新增、刪除或修改受控識別時,應用程式不會自動重新啟動,也不會建立新的修訂版本。

注意

將受控識別新增至 2022 年 4 月 11 日之前部署的容器應用程式時,您必須建立新的修訂。

新增系統指派的身分識別

  1. 在容器應用程式頁面的左側導覽中,向下捲動至 設定 群組。

  2. 選取 [身分識別]。

  3. 在 [系統指派] 索引標籤內,將 [狀態] 切換為 [開啟]。 選取 [儲存]。

Screenshot of system-assigned identities.

新增使用者指派的身分識別

透過使用者指派的識別來設定容器應用程式時會要求您先建立識別,然後再將其資源識別碼新增至您的容器應用程式的組態。 您可以透過 Azure 入口網站 或 Azure CLI 建立使用者指派的身分識別。 如需建立和管理使用者指派身分識別的資訊,請參閱 管理使用者指派的受控識別

首先,您必須建立使用者指派的身分識別資源。

  1. 根據管理使用者指派的受控識別中的 步驟,建立使用者指派的受控識別資源。

  2. 在容器應用程式頁面的左側導覽中,向下捲動至 設定 群組。

  3. 選取 [身分識別]。

  4. 在 [ 使用者指派] 索引 標籤內,選取 [ 新增]。

  5. 搜尋您稍早建立的身分識別,然後加以選取。 選取新增

Screenshot of user-assigned identities.

設定目標資源

針對某些資源,您必須為應用程式的受控識別設定角色指派,以授與存取權。 否則,即使您針對該身分識別使用有效的令牌,仍會拒絕從您的應用程式呼叫服務,例如 Azure 金鑰保存庫 和 Azure SQL 資料庫。 若要深入瞭解 Azure 角色型訪問控制(Azure RBAC),請參閱 什麼是 RBAC?。 若要深入瞭解哪些資源支援 Microsoft Entra 令牌,請參閱 支援 Microsoft Entra 驗證的 Azure 服務。

重要

受控識別的後端服務大約 24 小時會維護每個資源 URI 的快取。 如果您更新特定目標資源的存取原則,並立即擷取該資源的令牌,您可以繼續取得具有過期許可權的快取令牌,直到該令牌到期為止。 目前無法強制重新整理令牌。

在應用程式程式代碼中 連線 至 Azure 服務

透過受控識別,應用程式可以取得令牌來存取使用 Microsoft Entra 識別碼的 Azure 資源,例如 Azure SQL 資料庫、Azure 金鑰保存庫 和 Azure 儲存體。 這些令牌代表存取資源的應用程式,而不是應用程式的任何特定使用者。

Container Apps 提供可內部存取 的 REST 端點 來擷取令牌。 您可以使用標準 HTTP GET 從應用程式記憶體取 REST 端點,此端點可以使用每種語言的一般 HTTP 用戶端來實作。 針對 .NET、JavaScript、Java 和 Python,Azure 身分識別客戶端連結庫會針對此 REST 端點提供抽象概念。 連線 至其他 Azure 服務,就像將認證物件新增至服務特定客戶端一樣簡單。

注意

使用 Azure 身分識別用戶端連結庫時,必須指定使用者指派的受控識別用戶端識別碼。

注意

使用 Entity Framework Core 連線到 Azure SQL 數據源時,請考慮使用 Microsoft.Data.SqlClient,以提供特殊 連接字串 來進行受控識別連線。

針對 .NET 應用程式,使用受控識別最簡單的方式是透過適用於 .NETAzure 身分識別客戶端連結庫。 如需詳細資訊,請參閱客戶端連結庫的個別文件標題:

連結的範例會使用 DefaultAzureCredential。 這適用於大部分案例,因為相同的模式適用於 Azure(使用受控識別)和本機計算機上(不含受控識別)。

檢視受控識別

您可以使用下列 Azure CLI 命令來顯示系統指派和使用者指派的受控識別。 輸出會顯示指派給容器應用程式之所有受控識別的受控識別類型、租用戶標識碼和主體標識碼。

az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>

拿掉受控識別

當您移除系統指派的身分識別時,會從 Microsoft Entra ID 中刪除。 當您刪除容器應用程式資源本身時,系統指派的身分識別也會從 Microsoft Entra ID 自動移除。 從容器應用程式移除使用者指派的受控識別並不會從 Microsoft Entra 識別碼中移除它們。

  1. 在應用程式的頁面左側導覽中,向下捲動至 設定 群組。

  2. 選取 [身分識別]。 然後根據身分識別類型遵循步驟:

    • 系統指派的身分識別:在 [系統指派] 索引標籤內,將 [狀態] 切換為 [關閉]。 選取 [儲存]。
    • 使用者指派的身分識別:選取 [ 使用者指派 ] 索引卷標,選取身分識別的複選框,然後選取 [ 移除]。 選取以確認。

下一步