Azure VM 上の Azure リソースのマネージド ID を使用してサインインする方法

Azure リソースのマネージドID は、Azure Active Directory の機能です。 Azure リソースのマネージド ID をサポートする各 Azure サービスは、それぞれ固有のタイムラインの下で提供されます。 ご利用のリソースに対するマネージド ID の提供状態と既知の問題をあらかじめ確認しておいてください。

この記事では、Azure リソース サービス プリンシパルのマネージド ID を使用してサインインするための PowerShell と CLI スクリプトの例と、エラー処理などの重要なトピックに関するガイダンスを提供します。

Note

Azure を操作するには、Azure Az PowerShell モジュールをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

前提条件

  • Azure リソースのマネージド ID 機能に慣れていない場合は、こちらの概要を参照してください。 Azure アカウントをお持ちでない場合は、無料のアカウントにサインアップしてから先に進んでください。

この記事に含まれている Azure PowerShell または Azure CLI の例を使用するには、最新バージョンの Azure PowerShell または Azure CLI をインストールする必要があります。

重要

  • この記事のすべてのサンプル スクリプトは、Azure リソースのマネージド ID が有効になっている VM 上でコマンドライン クライアントが実行されていることを前提としています。 お使いの VM にリモート接続するには、Azure ポータルで VM への "接続" 機能を使用します。 VM で Azure リソースのマネージド ID を有効にする方法の詳細については、「Azure Portal を使用して VM 上に Azure リソースのマネージド ID を構成する」、または関連する記事 (PowerShell、CLI、テンプレート、または Azure SDK の使用) のいずれかを参照してください。
  • リソースへのアクセス中のエラーを回避するには、VM での Azure Resource Manager の操作を許可する適切なスコープ (VM 以上) の "読み取り" アクセス以上のアクセス権が VM のマネージド ID に付与されている必要があります。 Azure portal を使用したリソースにアクセスするための Azure リソースのマネージド ID の割り当てに関する記事を参照してください。

概要

Azure リソースのマネージド ID は、サービス プリンシパル オブジェクトを提供します。これは、VM 上で Azure リソースのマネージド ID を有効にしたときに作成されます。 サービス プリンシパルに Azure のリソースへのアクセス権を付与し、スクリプトまたはコマンドライン クライアントがサインインおよびリソースにアクセスするための ID として使用できます。 従来では、独自の ID でセキュリティで保護されたリソースにアクセスするには、スクリプト クライアントは以下を実行する必要がありました。

  • Azure AD で機密/Web クライアント アプリケーションとして登録し合意されている
  • (多くの場合、スクリプトに埋め込まれている) アプリの資格情報を使用して、そのサービス プリンシパルを使ってサインインする。

Azure リソースのマネージド ID では、スクリプト クライアントはこれを行う必要がなくなります。理由は、Azure リソース サービス プリンシパルのマネージド ID でサインインできるためです。

Azure CLI

次のスクリプトは、以下を行う方法を示しています。

  1. VM の Azure リソース サービス プリンシパルのマネージド ID で Azure AD にサインインします。

  2. Azure Resource Manager を呼び出して VM のサービス プリンシパルの ID を取得します。 CLI がトークンの取得や使用を自動的に管理します。 <VM-NAME> を必ずお使いの仮想マシン名に置き換えてください。

    az login --identity
    
    $spID=$(az resource list -n <VM-NAME> --query [*].identity.principalId --out tsv)
    echo The managed identity for Azure resources service principal ID is $spID
    

Azure PowerShell

次のスクリプトは、以下を行う方法を示しています。

  1. VM の Azure リソース サービス プリンシパルのマネージド ID で Azure AD にサインインします。

  2. VM に関する情報を取得するには、Azure Resource Manager コマンドレットを呼び出します。 PowerShell が自動的にトークンの使用を管理します。

    Add-AzAccount -identity
    
    # Call Azure Resource Manager to get the service principal ID for the VM's managed identity for Azure resources. 
    $vmInfoPs = Get-AzVM -ResourceGroupName <RESOURCE-GROUP> -Name <VM-NAME>
    $spID = $vmInfoPs.Identity.PrincipalId
    echo "The managed identity for Azure resources service principal ID is $spID"
    

Azure サービスのリソース ID

Azure AD をサポートするリソースで、Azure リソースのマネージド ID をテスト済みのリソースとそれぞれのリソース ID の一覧については、「Azure AD 認証をサポートしている Azure サービス」を参照してください。

エラー処理に関するガイダンス

次のような応答が返ってきた場合は、VM の Azure リソースのマネージド ID が正しく構成されていない可能性があります。

  • PowerShell:Invoke-WebRequest: リモート サーバーに接続できません
  • CLI:MSI: http://localhost:50342/oauth2/token からトークンを取得できませんでした。'HTTPConnectionPool(host='localhost', port=50342) エラーが発生しました

これらのいずれかのエラーが発生した場合は、Azure portal の Azure VM に戻り、 [ID] ページにアクセスし [システム割り当て済み] が [はい] に設定されていることを確認します。

次のステップ