チュートリアル: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 ロールの割り当てによる Azure サブスクリプション リソースへのアクセスの管理に関するページをご覧ください。
サンプル スクリプトを実行するには、次の 2 つのオプションがあります。
- Azure Cloud Shell を使用します。これは、コード ブロックの右上隅にある [試してみる] ボタンを使用して開くことができます。
- Azure PowerShell を使用して、スクリプトをローカルで実行します。次のセクションの説明を参照してください。
ローカルで Azure PowerShell を構成する
この記事で、(Cloud Shell ではなく) ローカルで Azure PowerShell を使用するには、次の手順を実行します。
最新バージョンの Azure PowerShell をインストールします (まだインストールしていない場合)。
Azure にサインインします。
Connect-AzAccount
PowerShellGet の最新バージョンをインストールします。
Install-Module -Name PowerShellGet -AllowPrerelease
次の手順に備えて、このコマンドを実行した後に現在の PowerShell セッションから
Exit
する必要がある場合があります。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 の Id
と ClientId
の値をメモしておきます。
{
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 から作業を行います。
Azure portal にサインインします。
ポータルで [Virtual Machines] にナビゲートして Windows 仮想マシンに移動し、[概要] の [接続] をクリックします。
Windows VM を作成したときに使用したユーザー名とパスワードを入力します。
これで、仮想マシンを使用するリモート デスクトップ接続が作成されました。リモート セッションで PowerShell を開きます。
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 の詳細については、以下を参照してください。