Azure Automation のマネージド アイデンティティの問題をトラブルシューティングする

この記事では、Automation アカウントでマネージド ID を使用する際に発生する可能性がある問題の解決方法について説明します。 Automation アカウントでのマネージド ID の使用に関する一般的な情報については、「Azure Automation アカウント認証の概要を参照してください。

シナリオ: システム割り当てマネージド ID を持つ Runbook が 400 エラー メッセージで失敗する

問題点

システム割り当てマネージド ID を持つ Runbook が unable to acquire for tenant organizations with error ManagedIdentityCredential authentication failed. Managed System Identity not found! Status 400 (Bad Request) エラーで失敗する

原因

システム割り当てマネージド ID を作成した後、アクセス許可を割り当てていません。

解決方法

システム割り当てマネージド ID に適切なアクセス許可を割り当てられるようにします。 Azure Automation アカウントのシステム割り当てマネージド ID を使用します

シナリオ: Runbook のマネージド ID がAzureに対して認証できない

問題点

Runbook でマネージド ID を使用すると、"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: まだ作成されていない Automation アカウントのシステム マネージド ID をあなたが使用し、Code Connect-AzAccount -Identity は Azure または Hybrid Runbook Worker で Runbook を実行するために Azure に認証を試みます。

  • 原因 2: オートメーション アカウントには、システム管理 ID ではなくユーザー管理 ID が割り当てられており、Code Connect-AzAccount -Identity は Azure VM システム管理 ID を使用して、Azure への認証と Azure 仮想マシンの Hybrid Runbook Worker での Runbook の実行を試みようとしています。

解決方法

  • Resolution 1: Automation アカウント システムマネージド ID を作成し、Azure リソースへのアクセス権を付与する必要があります。

  • 解決策 2: 要件に応じて次の作業を行います。

    • Automation アカウントのシステム マネージド ID を作成し、それを認証に使用します。
      または
    • Automation アカウントのユーザー割り当てマネージド ID を削除します。

シナリオ: ユーザー割り当てマネージド ID が見つからず、Automation アカウントに追加できない

問題点

ユーザー割り当てマネージド ID を Automation アカウントに追加したいと考えています。 しかし、[Automation] ブレードにアカウントが見つかりません。

原因

この問題は、ユーザー割り当てマネージド ID に、[Automation] ブレードでそれを表示するための次のアクセス許可がない場合に発生します。

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

メモ

マネージド ID オペレーターとマネージド ID 共同作成者には、上記のアクセス許可が既定で付与されます。

解決方法

ユーザー割り当てマネージド ID を Automation アカウントに追加するための ID オペレーター ロールのアクセス許可があることを確認します。

シナリオ: Runbook が失敗し、"this.Client.SubscriptionId cannot be null. (this.Client.SubscriptionId を null にすることはできません。)" というエラー メッセージが表示される

問題点

マネージド ID 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

原因

これは、マネージド ID (または Runbook で使用される他のアカウント) にサブスクリプションへのアクセス許可が付与されていない場合に発生する可能性があります。

解決方法

マネージド ID (または Runbook で使用されているその他のアカウント) に、サブスクリプションの適切なロール メンバーシップを付与してください。 詳細情報

Azureロール割り当ての設定を示すスクリーンショット

ロールの割り当てを追加する方法を示すスクリーンショット。

シナリオ: アカウントの MSI トークンを取得できません

問題点

Automation アカウントでユーザー割り当てマネージド ID を操作すると、Failed to get MSI token for account a123456b-1234-12a3-123a-aa123456aa0b のようなエラーが表示されます。

原因

Automation アカウントのシステム割り当てマネージド ID を有効にする前に、ユーザー割り当てマネージド ID を使用する。

解決方法

自分の Automation アカウント用のシステム割り当てマネージド ID を有効にします。 その後、ユーザー割り当てマネージド ID を使用します。

シナリオ: Automation アカウントでマネージド ID を使用しようとすると失敗する

問題点

Automation アカウントでマネージド ID を使用しようとすると、次のようなエラーが発生します。

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

原因

この問題の最も一般的な原因は、ID を使用する前に有効にしていないことです。 これを確認するには、影響を受ける Automation アカウントで次の 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"
}

問題が ID を使用する前に有効にしなかったことが原因である場合は、次のような結果が表示されます。

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

解決方法

マネージド ID サービスを使用するには、事前に Automation アカウントの ID を有効にする必要があります。 「Azure Automation アカウントのマネージド ID を有効」を参照してください>

次のステップ

この記事で問題を解決できない場合は、追加のサポートを得るために、次のいずれかのチャネルをお試しください。