針對 Azure 自動化的受控識別問題進行疑難排解

本文討論當您使用受控識別搭配 Azure 自動化帳戶時可能會遇到問題的解決方案。 如需使用受控識別搭配自動化帳戶的一般資訊,請參閱 Azure 自動化帳戶驗證概觀

案例:具有系統指派受控識別的 Runbook 失敗,並出現 400 錯誤訊息

問題

具有系統指派受控識別的 Runbook 失敗,錯誤為 unable to acquire for tenant organizations with error ManagedIdentityCredential authentication failed. Managed System Identity not found! Status 400 (Bad Request)

原因

建立系統指派的受控識別之後,您尚未指派許可權。

解決方法

請確定為系統指派的受控識別指派適當的許可權。 針對 Azure 自動化帳戶使用系統指派的受控識別

案例:Runbook 中的受控識別無法向 Azure 驗證

問題

在 Runbook 中使用受控識別時,您會收到下列錯誤:connect-azaccount : ManagedIdentityCredential authentication failed: Failed to get MSI token for account d94c0db6-5540-438c-9eb3-aa20e02e1226 and resource https://management.core.windows.net/. Status: 500 (Internal Server Error)

原因

在以下任一情況中,可能發生此問題:

  • 原因 1:您使用尚未建立的自動化帳戶系統受控識別,且 Code Connect-AzAccount -Identity 嘗試向 Azure 驗證,並在 Azure 中或混合式 Runbook 背景工作角色上執行 Runbook。

  • 原因 2:自動化帳戶已指派使用者受控識別,而不是系統受控識別,且 - Code Connect-AzAccount -Identity 嘗試向 Azure 進行驗證,並使用 Azure VM 系統受控識別在 Azure 虛擬機器混合式 Runbook 背景工作角色上執行 Runbook。

解決方法

  • 解決方案 1:您必須建立自動化帳戶系統受控識別,並為其授與 Azure 資源的存取權。

  • 解決方案 2:根據您的需求,您可以:

    • 建立自動化帳戶系統受控識別,並使用其來驗證。

    • 刪除自動化帳戶使用者指派的受控識別。

案例:找不到使用者指派的受控識別,以將其新增至自動化帳戶

問題

想要將使用者指派的受控識別新增至自動化帳戶。 但卻無法在 [自動化] 刀鋒視窗中找到帳戶。

原因

如果您沒有使用者指派受的控識別的下列權限,在 [自動化] 刀鋒視窗中檢視它時,就會發生此問題。

  • Microsoft.ManagedIdentity/userAssignedIdentities/*/read
  • Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action

注意

上述權限預設會授與受控識別操作員和受控識別參與者。

解決方法

確保您具有身分識別操作員角色權限,可將使用者指派的受控識別新增至您的自動化帳戶。

案例:Runbook 失敗並出現「this.Client.SubscriptionId 不能為 Null。」錯誤訊息

問題

您使用受控識別 Connect-AzAccount -Identity 的 Runbook 嘗試管理 Azure 物件,無法順利運作並記錄下列錯誤 - this.Client.SubscriptionId cannot be null.

get-azvm : 'this.Client.SubscriptionId' cannot be null. At line:5 char:1 + get-azvm + ~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzVM], ValidationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.GetAzureVMCommand

原因

當受控識別 (或 Runbook 中的其他帳戶) 未取得存取訂用帳戶的任何權限時,就會發生這種情況。

解決方法

為受控識別 (或 Runbook 中使用的其他帳戶) 授與訂用帳戶中適當的角色成員資格。 深入了解

 顯示 Azure 角色指派指派的螢幕快照。

顯示如何新增角色指派的螢幕快照。

案例:無法取得帳戶的 MSI 權杖

問題

在自動化帳戶中使用使用者指派的受控識別時,您會收到類似下列的錯誤:Failed to get MSI token for account a123456b-1234-12a3-123a-aa123456aa0b

原因

在為自動化帳戶啟用系統指派的受控識別之前,請先使用使用者指派的受控識別。

解決方法

為您的自動化帳戶啟用系統指派的受控識別。 然後使用使用者指派的受控識別。

案例:嘗試使用受控識別搭配自動化帳戶失敗

問題

當您嘗試在自動化帳戶中使用受控識別時,您會遇到如的錯誤:

Connect-AzureRMAccount : An error occurred while sending the request. At line:2 char:1 + Connect-AzureRMAccount -Identity + 
CategoryInfo : CloseError: (:) [Connect-AzureRmAccount], HttpRequestException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand

原因

最常見的原因是您未在嘗試使用之前啟用身分識別。 若要驗證這一點,請在受影響的自動化帳戶中執行下列 PowerShell Runbook。

$resource= "?resource=https://management.azure.com/"
$url = $env:IDENTITY_ENDPOINT + $resource
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$Headers.Add("Metadata", "True")

try
{
    $Response = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
    $stream = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($stream)
    $responseBody = $reader.ReadToEnd()
    
    Write-Output "Request Failed with Status: $StatusCode, Message: $responseBody"
}

如果問題在於您在嘗試使用之前未啟用身分識別,您應該會看到類似下列的結果:

Request Failed with Status: 400, Message: {"Message":"No managed identity was found for Automation account xxxxxxxxxxxx"}

解決方法

您必須先啟用自動化帳戶的身分識別,然後才能使用受控識別服務。 請參閱為 Azure 自動化帳戶啟用受控識別

下一步

如果本文無法解決您的問題,請嘗試下列其中一個管道以取得其他支援:

  • 透過 Azure 論壇獲得由 Azure 專家所提供的解答。
  • @AzureSupport 連絡。 這是官方 Microsoft Azure 帳戶,可將 Azure 社群連結到正確的資源:解答、支援和專家。
  • 提出 Azure 支援事件。 前往 Azure 支援網站,然後選取 [取得支援]