チュートリアル:Windows VM 上でユーザー割り当てマネージド ID を使用して Azure Resource Manager にアクセスする

このチュートリアルでは、ユーザー割り当て ID を作成して Windows 仮想マシン (VM) に割り当て、その ID を使用して Azure Resource Manager API にアクセスする方法について説明します。 管理対象サービス ID は Azure によって自動的に管理されます。 管理対象サービス ID を使用すると、コード内に資格情報を埋め込む必要なく、Microsoft Entra の認証をサポートするサービスに認証することができます。

以下の方法について説明します。

  • ユーザー割り当てマネージド ID を作成する
  • ユーザー割り当て ID を Windows VM に割り当てる
  • Azure Resource Manager でユーザー割り当て ID にリソース グループへのアクセスを許可する
  • ユーザー割り当て ID を使用してアクセス トークンを取得し、そのアクセス トークンを使用して Azure Resource Manager を呼び出す
  • リソース グループのプロパティを読み取る

注意

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

前提条件

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

  • Windows 仮想マシンを作成する

  • このチュートリアルの必要なリソース作成およびロール管理のステップを実行するために、お使いのアカウントには、適切な範囲 (サブスクリプションまたはリソース グループ) を対象とする "所有者" アクセス許可が必要となります。 ロールの割り当てに関するサポートが必要な場合は、Azure ロールの割り当てによる Azure サブスクリプション リソースへのアクセスの管理に関するページをご覧ください。

  • サンプル スクリプトを実行するには、次の 2 つのオプションがあります。

    • Azure Cloud Shell を使用します。これは、コード ブロックの右上隅にある [試してみる] ボタンを使用して開くことができます。
    • Azure PowerShell を使用して、スクリプトをローカルで実行します。次のセクションの説明を参照してください。

ローカルで Azure PowerShell を構成する

この記事で、(Cloud Shell ではなく) ローカルで Azure PowerShell を使用するには、次の手順を実行します。

  1. 最新バージョンの Azure PowerShell をインストールします (まだインストールしていない場合)。

  2. Azure にサインインします。

    Connect-AzAccount
    
  3. PowerShellGet の最新バージョンをインストールします。

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    次の手順に備えて、このコマンドを実行した後に現在の PowerShell セッションから Exit する必要がある場合があります。

  4. Az.ManagedServiceIdentity モジュールのプレリリース バージョンをインストールして、この記事のユーザー割り当てマネージド ID 操作を実行します。

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

有効化

ユーザー割り当て ID に基づくシナリオの場合は、次の手順を実行する必要があります。

  • ID の作成
  • 新たに作成された ID の割り当て

ID の作成

このセクションでは、ユーザー割り当て ID を作成する方法を説明します。 ユーザー割り当て ID は、スタンドアロン Azure リソースとして作成されます。 New-AzUserAssignedIdentity を使用して、Azure 内の Microsoft Entra テナントで、1 つ以上の Azure サービス インスタンスに割り当てることができるユーザー ID が作成されます。

重要

ユーザー割り当てマネージド ID を作成する場合、名前は文字または数字で始まる必要があり、英数字、ハイフン (-) とアンダースコア (_) の組み合わせを含めることができます。 仮想マシンまたは仮想マシン スケール セットへの割り当てが適切に動作するように、名前は 24 文字に制限されています。 詳細については、FAQ と既知の問題に関するページを参照してください。

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

応答には、次の例のように、作成されたユーザー割り当て ID の詳細が含まれています。 後続の手順で使用するため、ユーザー割り当て ID の IdClientId の値をメモしておきます。

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: 733a8f0e-ec41-4e69-8ad8-971fc4b533f8
PrincipalId: e591178e-b785-43c8-95d2-1397559b2fb9
ClientId: af825a31-b0e0-471f-baea-96de555632f9
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=733a8f0e-ec41-4e69-8ad8-971fc4b533f8&oid=e591178e-b785-43c8-95d2-1397559b2fb9&aid=af825a31-b0e0-471f-baea-96de555632f9
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

ID の割り当て

このセクションでは、ユーザー割り当て ID を Windows VM に割り当てる方法を説明します。 ユーザー割り当て ID は、複数の Azure リソース上のクライアントで使用できます。 単一の VM にユーザー割り当て ID を割り当てるには、次のコマンドを使用します。 -IdentityID パラメーターには、前の手順で返された Id プロパティを使用します。

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

アクセス権の付与

このセクションでは、Azure Resource Manager のリソース グループへのアクセスをユーザー割り当て ID に許可する方法を説明します。 Microsoft Entra 認証をサポートするリソース API に認証するアクセス トークンを要求するためにコードで使用する ID が、Azure リソースのマネージド ID により提供されます。 このチュートリアルでは、コードは Azure Resource Manager API にアクセスします。

コードで API にアクセスできるようにするには、事前に ID に Azure Resource Manager のリソースへのアクセスを許可する必要があります。 このケースでは、VM が含まれているリソース グループが対象になります。 使用する環境に合わせて、<SUBSCRIPTIONID> の値を更新します。

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

応答には、次の例のように、作成されたロールの割り当ての詳細が含まれています。

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/f9cc753d-265e-4434-ae19-0c3e2ead62ac
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId: e591178e-b785-43c8-95d2-1397559b2fb9
ObjectType: ServicePrincipal
CanDelegate: False

データにアクセスする

アクセス トークンを取得する

ヒント

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

チュートリアルの残りの部分では、以前に作成した VM から作業を行います。

  1. Azure portal にサインインします。

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

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

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

  5. PowerShell の Invoke-WebRequest を使用して、Azure リソース エンドポイントのローカル マネージド ID に、Azure Resource Manager のアクセス トークンを取得するよう要求します。 client_id 値は、ユーザー割り当てマネージド ID を作成したときに返された値です。

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=af825a31-b0e0-471f-baea-96de555632f9&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

プロパティの読み取り

前の手順で取得したアクセス トークンを使用して Azure Resource Manager にアクセスし、ユーザー割り当て ID にアクセスを許可したリソース グループのプロパティを読み取ります。 <SUBSCRIPTION ID> は使用している環境内のサブスクリプション ID に置き換えます。

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

応答には、次の例のように、特定のリソース グループの情報が含まれています。

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

次の手順

このチュートリアルでは、Azure Resource Manager API にアクセスするために、ユーザー割り当て ID を作成して、それを Azure 仮想マシンに添付する方法について学習しました。 Azure Resource Manager の詳細については、以下を参照してください。