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

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

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

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

前提条件

  • マネージド ID の知識。 マネージド ID についてよくわからない場合は、この概要の記事を参照してください。
  • Azure アカウント。無料アカウントにサインアップしてください。
  • システム割り当てマネージド ID が有効になっている Linux 仮想マシンも必要です。 VM があるが、システム割り当てマネージド ID を有効にする必要がある場合は、仮想マシンのプロパティの ID セクションで行います。

アクセス権の付与

ヒント

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

Azure リソース用マネージド ID を使うとき、Microsoft Entra 認証をサポートするリソースに対して認証するためのアクセス トークンをコードで取得できます。 Azure Resource Manager API は、Microsoft Entra 認証をサポートします。 最初に、Azure Resource Manager のリソース (ここでは、VM が含まれているリソース グループ) へのアクセスをこの VM の ID に許可する必要があります。

  1. 管理者アカウントで Azure Portal にサインインします。

  2. リソース グループのタブに移動します。

  3. VM のマネージド ID にアクセスを許可する リソース グループ を選択します。

  4. 左側のパネルで [アクセス制御 (IAM)] を選択します。

  5. [追加] を選択し、 [ロール割り当ての追加] を選択します。

  6. [ロール] タブで、[閲覧者] を選択します。 このロールでは、すべてのリソースを表示できますが、変更を加えることはできません

  7. [メンバー] タブの [アクセス権の割り当て先] で、[マネージド ID] を選択します。 次に、[+ メンバーの選択] を選択します。

  8. [サブスクリプション] ドロップダウンに適切なサブスクリプションが表示されていることを確認します。 [リソース グループ][すべてのリソース グループ] を選択します。

  9. [Manage identity] (ID の管理) ボックスの一覧で [仮想マシン] を選択します。

  10. 最後に、[選択] の一覧で使用する Windows 仮想マシンを選択し、[保存] を選択します。

    マネージド ID への閲覧者ロールの追加を示すスクリーンショット。

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

これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Linux 用 Windows サブシステムで SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。

  1. ポータルで Linux VM に移動し、[概要][接続] を選択します。

  2. 任意の SSH クライアントを使用して、VM に接続します。

  3. ターミナル ウィンドウで、curl を使用して、Azure リソース エンドポイントのローカル マネージド ID に、Azure Resource Manager のアクセス トークンを取得するよう要求します。   アクセス トークンの curl 要求を次に示します。

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Note

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

応答には、Azure Resource Manager へのアクセスに必要なアクセス トークンが含まれています。

応答:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

このアクセス トークンを使用して、Azure Resource Manager にアクセスし、たとえば、この VM アクセスを許可した Resource Group の詳細を確認することができます。 <SUBSCRIPTION-ID><RESOURCE-GROUP>、および <ACCESS-TOKEN> の値を先ほど作成したものと置き換えます。

Note

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

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

応答は、特定の Resource Group の情報とともに返されます。

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

次のステップ

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