Windows VM のシステム割り当てマネージド ID を使用して Resource Manager にアクセスする

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

このチュートリアルでは、システム割り当てマネージド ID を有効にした Windows 仮想マシンを使用して、Azure Resource Manager API にアクセスする方法について説明します。 Azure リソースのマネージド ID は Azure によって自動的に管理され、資格情報をコードに挿入しなくても、Microsoft Entra 認証をサポートするサービスへの認証を有効にします。 以下の方法について説明します。

  • Azure Resource Manager で VM にリソース グループへのアクセスを許可する
  • VM ID を使用してアクセス トークンを取得し、そのアクセス トークンを使用して Azure Resource Manager を呼び出す

前提条件

有効にする

システム割り当てマネージド ID の有効化は、1 クリックで行うことができます。 VM の作成中に有効にするか、既存の VM のプロパティで有効にすることができます。

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

新しい VM 上でシステム割り当てマネージド ID を有効にするには:

  1. Azure ポータル

  2. システム割り当て ID を有効にして仮想マシンを作成する

Resource Manager で VM にリソース グループへのアクセスを許可する

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

Azure リソースのマネージド ID を使用すると、Microsoft Entra 認証をサポートするリソースに対して認証するためのアクセス トークンをアプリケーションで取得できます。 Azure Resource Manager API は、Microsoft Entra 認証をサポートします。 Azure Resource Manager のリソース (ここではリソース グループ) へのアクセスをこの VM の ID に許可します。 リソース グループのスコープで、閲覧者ロールをマネージド ID に割り当てます。

  1. 管理者アカウントで Azure Portal にサインインします。
  2. リソース グループのタブに移動します。
  3. VM のマネージド ID にアクセスを許可する リソース グループ を選択します。
  4. 左側のパネルで [アクセス制御 (IAM)] を選択します。
  5. [追加] を選択し、 [ロール割り当ての追加] を選択します。
  6. [ロール] タブで、[閲覧者] を選択します。 このロールでは、すべてのリソースを表示できますが、変更を加えることはできません
  7. [メンバー] タブの [アクセス権の割り当て先] で、[マネージド ID] を選択します。 次に、[+ メンバーの選択] を選択します。
  8. [サブスクリプション] ドロップダウンに適切なサブスクリプションが表示されていることを確認します。 [リソース グループ][すべてのリソース グループ] を選択します。
  9. [Manage identity] (ID の管理) ボックスの一覧で [仮想マシン] を選択します。
  10. 最後に、[選択] の一覧で使用する Windows 仮想マシンを選択し、[保存] を選択します。

VM のシステム割り当てマネージド ID を使用してアクセス トークンを取得し、それを使用して Azure Resource Manager を呼び出す

ここでは、PowerShell を使用する必要があります。 PowerShell をインストールしていない場合は、ここからダウンロードします。

  1. ポータルで [Virtual Machines] にナビゲートして Windows 仮想マシンに移動し、[概要][接続] を選択します。

  2. Windows VM を作成したときに追加したユーザー名パスワードを入力します。

  3. これで、仮想マシンを使用するリモート デスクトップ接続が作成されました。リモート セッションで PowerShell を開きます。

  4. Invoke-WebRequest コマンドレットを使用して、Azure リソース エンドポイントのローカル マネージド ID に、Azure Resource Manager のアクセス トークンを取得するよう要求します。

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    

    Note

    "resource"パラメーターの値は、Microsoft Entra ID で予期されるものと完全に一致している必要があります。 Azure Resource Manager のリソース ID を使用する場合は、URI の末尾にスラッシュを含める必要があります。

    次に、$response オブジェクト内で JavaScript オブジェクト表記 (JSON) 形式の文字列として格納されている完全な応答を抽出します。

    $content = $response.Content | ConvertFrom-Json
    

    次に、アクセス トークンを応答から抽出します。

    $ArmToken = $content.access_token
    

    最後に、アクセス トークンを使用して Azure Resource Manager を呼び出します。 さらに、この例では、Invoke-WebRequest コマンドレットを使用して、Azure Resource Manager への呼び出しを行い、Authorization ヘッダーにアクセス トークンを含めます。

    (Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"}).content
    

    注意

    URL では大文字小文字が区別されるため、リソース グループの命名時に以前使用したものと同じ大文字小文字が使用されていること、および "resourceGroups" で大文字の "G" が使用されていることを確認してください。

    次のコマンドは、リソース グループの詳細を返します。

    {"id":"/subscriptions/98f51385-2edc-4b79-bed9-7718de4cb861/resourceGroups/DevTest","name":"DevTest","location":"westus","properties":{"provisioningState":"Succeeded"}}
    

次のステップ

このクイック スタートでは、システム割り当て ID を使用して Azure Resource Manager API にアクセスする方法について説明しました。 Azure Resource Manager の詳細については、以下を参照してください。