適用於 Azure 資源的受控識別會在 Microsoft Entra ID 中為 Azure 服務提供識別。 此作業不需要您程式碼中的認證即可運作。 Azure 服務使用此身分識別,向支援 Microsoft Entra 驗證的服務進行驗證。 應用程式角色提供一種以角色為基礎的存取控制形式,並允許服務實作授權規則。
備註
應用程式收到的權杖會由基礎結構進行快取。 這表示受控識別角色的任何變更都可能需要相當長的時間來處理。 如需詳細資訊,請參閱 使用受控識別進行授權的限制。
在本文中,您將瞭解如何使用 Microsoft Graph PowerShell SDK 或 Azure CLI,將受控識別指派給另一個應用程式所公開的應用程式角色。
先決條件
- 如果您不熟悉 Azure 資源的受控識別,請參閱 Azure 資源的受控識別概觀。
- 檢查 系統指派和使用者指派的管理識別之間的差異。
- 如果您還沒有 Azure 帳戶, 請先註冊免費帳戶 ,再繼續進行。
使用 CLI 將受控識別存取權指派給另一個應用程式的應用程式角色
使用 Azure Cloud Shell 中的 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱 如何在 Docker 容器中執行 Azure CLI。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
在 Azure 資源上啟用受控識別, 例如 Azure 虛擬機。
尋找受控識別之服務主體的物件識別碼。
針對系統指派的受控識別,您可以在 Azure 入口網站的資源 [身分識別] 頁面上找到物件 識別碼。 您也可以使用下列指令碼來尋找物件識別碼。 您將需要在上一個步驟建立之資源的資源識別碼,您可以在 Azure 入口網站中資源的 [屬性] 頁面上取得該資源識別碼。
resourceIdWithManagedIdentity="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}" oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"針對使用者指派的受控識別,您可以在 Azure 入口網站上的資源「概觀」頁面找到該受控識別的物件識別碼。 您也可以使用下列指令碼來尋找物件識別碼。 您需要使用者指派的受控身份識別的資源識別碼。
userManagedIdentityResourceId="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}" oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
建立新的應用程式註冊 ,以代表受控識別傳送要求的服務。
- 如果公開應用程式角色授與受控識別的 API 或服務,在您的 Microsoft Entra 租用戶中已有服務主體,請跳過此步驟。
尋找服務應用程式服務主體的物件識別碼。 您可以使用 Microsoft Entra 系統管理中心來找到此專案。
在左側導覽面板中,選取Entra ID>企業應用程式。 然後尋找應用程式並尋找 物件識別碼。
您也可以使用下列指令碼,依據其顯示名稱來尋找服務主體的物件識別碼:
appName="{name for your application}" serverSPOID=$(az ad sp list --filter "displayName eq '$appName'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"備註
應用程式的顯示名稱不是唯一的,因此,您應該確認是否取得正確的應用程式服務主體。
或者,您可以根據應用程式註冊的唯一應用程式識別碼來尋找物件識別碼:
appID="{application id for your application}" serverSPOID=$(az ad sp list --filter "appId eq '$appID'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
將 應用程式角色 新增至您在上一個步驟中建立的應用程式。 您可以使用 Azure 入口網站或使用 Microsoft Graph 來建立角色。 例如,您可以新增應用程式角色,如下所示:
{ "allowedMemberTypes": [ "Application" ], "displayName": "Read data from MyApi", "id": "00001111-aaaa-2222-bbbb-3333cccc4444", "isEnabled": true, "description": "Allow the application to read data as itself.", "value": "MyApi.Read.All" }將應用程式角色指派給已管理的識別。 您需要下列資訊來指派應用程式角色:
-
managedIdentityObjectId:受控識別服務主體的物件識別碼,您可以在步驟 2 中找到。 -
serverServicePrincipalObjectId:伺服器應用程式服務主體的物件識別碼,您可以在步驟 4 中找到。 -
appRoleId:由伺服器應用程式公開的應用程式角色識別碼,這是您在步驟 5 中產生的識別碼 - 在此範例中,應用程式角色識別碼為00000000-0000-0000-0000-000000000000。
-
執行下列指令碼以新增角色指派。 此功能不會直接在 Azure CLI 上公開,這裡使用的是 REST 命令:
roleguid="00000000-0000-0000-0000-000000000000" az rest -m POST -u https://graph.microsoft.com/v1.0/servicePrincipals/$oidForMI/appRoleAssignments -b "{\"principalId\": \"$oidForMI\", \"resourceId\": \"$serverSPOID\",\"appRoleId\": \"$roleguid\"}"