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

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

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

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

前提条件

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

Azure リソースのマネージド ID を使用すると、Azure AD 認証をサポートするリソースに対して認証するためのアクセス トークンをコードで取得でき、Azure Resource Manager で Azure AD 認証がサポートされます。 Resource Manager のリソース (ここでは、VM を作成したリソース グループ) へのアクセスをこの VM のシステム割り当てマネージド ID に許可する必要があります。 Windows VM 用に作成したリソース グループのスコープで、閲覧者ロールをマネージド ID に割り当てます。

詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

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"}
    

    注意

    "resource"パラメーターの値は、Azure AD で予期される値と完全に一致している必要があります。 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 の詳細については、以下を参照してください。