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 を呼び出す
前提条件
- マネージド ID の基礎知識。 Azure リソースのマネージド ID 機能に慣れていない場合は、こちらの概要を参照してください。
- Azure アカウント。無料アカウントにサインアップしてください。
- 必要なリソース作成とロール管理の手順を実行するための、適切なスコープ (サブスクリプションまたはリソース グループ) の "所有者" アクセス許可。 ロールの割り当てに関するサポートが必要な場合は、Azure ロールの割り当てによる Azure サブスクリプション リソースへのアクセスの管理に関するページをご覧ください。
- システム割り当てマネージド ID が有効になっている Windows 仮想マシンも必要です。
- このチュートリアル用に仮想マシンを作成する必要がある場合は、システム割り当てマネージド ID を有効にした仮想マシンの作成に関する記事に従ってください
有効にする
システム割り当てマネージド ID の有効化は、1 クリックで行うことができます。 VM の作成中に有効にするか、既存の VM のプロパティで有効にすることができます。
新しい VM 上でシステム割り当てマネージド ID を有効にするには:
Resource Manager で VM にリソース グループへのアクセスを許可する
Azure リソースのマネージド ID を使用すると、Azure AD 認証をサポートするリソースに対して認証するためのアクセス トークンをアプリケーションで取得できます。 Azure Resource Manager API は、Azure AD の認証をサポートします。 Azure Resource Manager のリソース (ここではリソース グループ) へのアクセスをこの VM の ID に許可します。 リソース グループのスコープで、閲覧者ロールをマネージド ID に割り当てます。
- 管理者アカウントで Azure Portal にサインインします。
- リソース グループのタブに移動します。
- VM のマネージド ID にアクセスを許可する リソース グループ を選択します。
- 左側のパネルで [アクセス制御 (IAM)] を選択します。
- [追加] を選択し、 [ロール割り当ての追加] を選択します。
- [ロール] タブで、[閲覧者] を選択します。 このロールでは、すべてのリソースを表示できますが、変更を加えることはできません
- [メンバー] タブの [アクセス権の割り当て先] で、[マネージド ID] を選択します。 次に、[+ メンバーの選択] を選択します。
- [サブスクリプション] ドロップダウンに適切なサブスクリプションが表示されていることを確認します。 [リソース グループ] で [すべてのリソース グループ] を選択します。
- [Manage identity] (ID の管理) ボックスの一覧で [仮想マシン] を選択します。
- 最後に、[選択] の一覧で使用する Windows 仮想マシンを選択し、[保存] を選択します。
VM のシステム割り当てマネージド ID を使用してアクセス トークンを取得し、それを使用して Azure Resource Manager を呼び出す
ここでは、PowerShell を使用する必要があります。 PowerShell をインストールしていない場合は、ここからダウンロードします。
ポータルで [Virtual Machines] にナビゲートして Windows 仮想マシンに移動し、[概要] の [接続] を選択します。
Windows VM を作成したときに追加したユーザー名とパスワードを入力します。
これで、仮想マシンを使用するリモート デスクトップ接続が作成されました。リモート セッションで PowerShell を開きます。
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 の詳細については、以下を参照してください。