チュートリアル: Linux VM/VMSS を使用して Azure リソースにアクセスする
Azure リソース用マネージド ID は、Microsoft Entra ID の機能です。 Azure リソースのマネージド ID をサポートする各 Azure サービスは、それぞれ固有のタイムラインの下で提供されます。 ご利用のリソースに対するマネージド ID の提供状態と既知の問題をあらかじめ確認しておいてください。
前提条件
- マネージド ID の知識。 Azure リソースのマネージド ID 機能に慣れていない場合は、こちらの概要を参照してください。
- Azure アカウント。無料アカウントにサインアップしてください。
- 必要なリソース作成とロール管理の手順を実行するための、適切なスコープ (サブスクリプションまたはリソース グループ) の所有者アクセス許可。 ロールの割り当てに関するサポートが必要な場合は、Azure ロールの割り当てによる Azure サブスクリプション リソースへのアクセスの管理に関するページをご覧ください。
- システム割り当てマネージド ID が有効になっている Linux 仮想マシン (VM)。
- このチュートリアル用に VM を作成する必要がある場合は、システム割り当て ID が有効な仮想マシンの作成に関する記事をご覧ください。
Linux VM のシステム割り当てマネージド ID を使用して Azure Data Lake Store にアクセスする
このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用して Azure Data Lake Store にアクセスする方法について説明します。
学習内容は次のとおりです。
- VM に Azure Data Lake Store へのアクセスを許可する
- VM のシステム割り当てマネージド ID を使用して Azure Data Lake Store にアクセスするためのアクセス トークンを取得する
アクセス権の付与
このセクションでは、Azure Data Lake Store 内のファイルとフォルダーへのアクセス権を VM に付与する方法を示します。 この手順では、既存の Data Lake Store インスタンスを使用することも、新しいものを作成することもできます。 Azure Portal を使用して Data Lake Store インスタンスを作成するには、Azure Data Lake Store のクイック スタートの手順を実行します。 Azure Data Lake Store のドキュメントに、Azure CLI と Azure PowerShell を使用するクイック スタートも用意されています。
Data Lake Store で新しいフォルダーを作成し、Linux VM のシステム割り当てマネージド ID にそのフォルダー内のファイルに対して読み取り、書き込み、実行を行うためのアクセス許可を付与します。
- Azure Portal の左側のウィンドウで [Data Lake Store] を選択します。
- 使用する Data Lake Store インスタンスを選択します。
- コマンド バーの [データ エクスプローラー] を選択します。
- Data Lake Store インスタンスのルート フォルダーが選択されます。 コマンド バーの [アクセス] を選択します。
- [追加] を選択します。 [選択] ボックスにお使いの VM の名前 (例: DevTestVM) を入力します。 検索結果からお使いの VM を選び、[選択] を選びます。
- [アクセス許可の選択] を選びます。 [読み取り] と [実行] を選択して [このフォルダー] に追加し、[アクセス許可のみ] として追加してから、[OK] を選択します。 アクセス許可が正常に追加されます。
- [アクセス] ウィンドウを閉じます。
- 新しいフォルダーを作成し、コマンド バーで [新しいフォルダー] を選択し、新しいフォルダーに名前 (例: TestFolder) を付けてから、[OK] を選択します。
- 作成したフォルダーを選択し、コマンド バーの [アクセス] を選択します。
- [追加] を選択し、[選択] ボックスに VM の名前を入力します。
- 検索結果からお使いの VM を選び、[選択] を選びます。
- [アクセス許可の選択] を選択し、[読み取り]、[書き込み]、[実行] の順に選択します。
- [このフォルダー] に追加することを選択してから、[アクセス許可エントリと既定のアクセス許可エントリ] として追加し、[OK] を選択します。 アクセス許可が正常に追加されます。
この時点で Azure リソースのマネージド ID は、作成したフォルダーのファイルに対してすべての操作を実行できます。 Data Lake Store のアクセス管理の詳細については、Data Lake Store のアクセスの制御に関するページをご覧ください。
アクセス トークンを取得する
このセクションでは、アクセス トークンを取得し、Data Lake Store ファイル システムを呼び出す方法を示します。 Azure Data Lake Store は Microsoft Entra 認証をネイティブにサポートするため、Azure リソース用マネージド ID を使って取得されたアクセス トークンを直接受け入れることができます。
Data Lake Store のファイルシステムに対する認証を行うために、お使いの Data Lake Store ファイルシステムのエンドポイントに Microsoft Entra ID によって発行されたアクセス トークンを送信します。 アクセス トークンは、Authorization ヘッダーに Bearer \<ACCESS_TOKEN_VALUE\>
という形式で指定します。 Microsoft Entra 認証に対する Data Lake Store のサポートの詳細については、Microsoft Entra ID を使った Data Lake Store での認証に関するページを参照してください。
次に、cURL を使用して REST 要求を実行して、Data Lake Store ファイル システムの REST API に対する認証を行います。
Note
Data Lake Store ファイル システムのクライアント SDK では、Azure リソースのマネージド ID はまだサポートされていません。
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
ポータルで Linux VM を参照し、[概要] セクションで [接続] を選択します。
任意の SSH クライアントを使用して、VM に接続します。
ターミナル ウィンドウで、cURL を使用して、Azure リソース エンドポイントのローカル マネージド ID に、Data Lake Store ファイル システムのアクセス トークンを取得するよう要求します。 Data Lake Store のリソース識別子は
https://datalake.azure.net/
です。 リソース識別子の末尾にスラッシュが含まれることが重要です。curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -H Metadata:true
成功応答では、次のように Data Lake Store への認証に使用するアクセス トークンが返されます。
{"access_token":"eyJ0eXAiOiJ...", "refresh_token":"", "expires_in":"3599", "expires_on":"1508119757", "not_before":"1508115857", "resource":"https://datalake.azure.net/", "token_type":"Bearer"}
cURL を使用してルート フォルダー内のフォルダーを一覧表示するには、お使いの Data Lake Store ファイルシステムの REST エンドポイントに要求を行います。 これは、すべてが正しく構成されていることを確認する最適な方法です。 前の手順で入手したアクセス トークンの値をコピーします。 Authorization ヘッダーの文字列
Bearer
に、大文字の "B" があることが重要です。Azure Portal の [Data Lake Store] ウィンドウの [概要] セクションで、ご利用の Data Lake Store インスタンスの名前を確認できます。curl https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -H "Authorization: Bearer <ACCESS_TOKEN>"
成功した応答は次のようになります:
{"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY","blockSize":0,"accessTime":1507934941392,"modificationTime":1508105430590,"replication":0,"permission":"770","owner":"bd0e76d8-ad45-4fe1-8941-04a7bf27f071","group":"bd0e76d8-ad45-4fe1-8941-04a7bf27f071"}]}}
次に、Data Lake Store インスタンスにファイルをアップロードします。 まず、アップロードするファイルを作成します。
echo "Test file." > Test1.txt
cURL を使用して先ほど作成したフォルダーにファイルをアップロードするには、Data Lake Store ファイルシステムの REST エンドポイントに要求を行います。 アップロードではリダイレクトが必要ですが、cURL が自動的にリダイレクトします。
curl -i -X PUT -L -T Test1.txt -H "Authorization: Bearer <ACCESS_TOKEN>" 'https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/<FOLDER_NAME>/Test1.txt?op=CREATE'
成功応答は次のようになります。
HTTP/1.1 100 Continue HTTP/1.1 307 Temporary Redirect Cache-Control: no-cache, no-cache, no-store, max-age=0 Pragma: no-cache Expires: -1 Location: https://mytestadls.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE&write=true x-ms-request-id: 756f6b24-0cca-47ef-aa12-52c3b45b954c ContentLength: 0 x-ms-webhdfs-version: 17.04.22.00 Status: 0x0 X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=15724800; includeSubDomains Date: Sun, 15 Oct 2017 22:10:30 GMT Content-Length: 0 HTTP/1.1 100 Continue HTTP/1.1 201 Created Cache-Control: no-cache, no-cache, no-store, max-age=0 Pragma: no-cache Expires: -1 Location: https://mytestadls.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE&write=true x-ms-request-id: af5baa07-3c79-43af-a01a-71d63d53e6c4 ContentLength: 0 x-ms-webhdfs-version: 17.04.22.00 Status: 0x0 X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=15724800; includeSubDomains Date: Sun, 15 Oct 2017 22:10:30 GMT Content-Length: 0
ついに、Data Lake Store ファイル システムに他の API を使用して、ファイルへの追加、ファイルのダウンロードなどを実行できるようになりました。
Linux VM のシステム割り当てマネージド ID を使用して Azure Storage にアクセスする
このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用して Azure Storage にアクセスする方法について説明します。
学習内容は次のとおりです。
- ストレージ アカウントの作成
- ストレージ アカウントに BLOB コンテナーを作成する
- Linux VM のマネージド ID に Azure Storage コンテナーへのアクセス権を付与します
- アクセス トークン取得し、それを使用して Azure Storage を呼び出す
ストレージ アカウントの作成
この例の CLI スクリプトを実行するには、次の 2 つのオプションがあります。
- Azure portal から、または各コード ブロックの右上隅にある [試してみる] ボタンを使用して、Azure Cloud Shell を使用します。
- ローカル CLI コンソールを使用する場合は、CLI 2.0 の最新バージョン (2.0.23 以降) をインストールします。
まず、ストレージ アカウントを作成します。
Azure portal の左上隅にある [リソースの作成] ボタンを選択します。
[ストレージ]、[ストレージ アカウント - Blob、File、Table、Queue] の順に選択します。
[名前] で、ストレージ アカウントの名前を入力します。
[デプロイ モデル] と [アカウントの種類] がそれぞれ [Resource manager] と [ストレージ (汎用 v1)] に設定されている必要があります。
[サブスクリプション] と [リソース グループ] が、前の手順で VM を作成したときに指定したものと一致していることを確認します。
[作成] を選択します
BLOB コンテナーを作成し、ファイルをストレージ アカウントにアップロードする
ファイルには Blob Storage が必要であるため、ファイルを格納する BLOB コンテナーを作成する必要があります。 次に、新しいストレージ アカウントで、BLOB コンテナーにファイルをアップロードします。
新しく作成したストレージ アカウントに移動します。
[Blob Service]、[コンテナー] の順に選択します。
ページの上部にある [+ コンテナー] を選択します。
[新しいコンテナー] を選択し、コンテナーの名前を入力します。
[パブリック アクセス レベル] が既定値であることを確認します。
任意のエディターを使用して、ローカル コンピューターに hello world.txt という名前のファイルを作成します。 ファイルを開き、「Hello world!」というテキストを追加して保存します。
コンテナー名を選択し、[アップロード] を選択します。 これにより、新しく作成されたコンテナーにファイルがアップロードされます。
[BLOB のアップロード] ペインの [ファイル] セクションで、フォルダー アイコンを選択し、ローカル コンピューター上の hello_world.txt ファイルを参照します。
ファイルを選択し、[アップロード] を選択します。
VM に Azure Storage コンテナーへのアクセスを許可する
VM のマネージド ID を使用して、Azure Storage Blob のデータを取得できます。 Azure リソースのマネージド ID は、Microsoft Entra 認証をサポートするリソースの認証に使用することができます。 お使いのストレージ アカウントを含むリソース グループのスコープで、マネージド ID に storage-blob-data-reader ロールを割り当てることによって、アクセス権を付与します。
詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Note
ストレージの確認にアクセス許可を付与するために使用できるさまざまなロールの詳細については、「Microsoft Entra ID を使用した BLOB とキューへのアクセスの承認」を参照してください
アクセス トークン取得し、それを使用して Azure Storage を呼び出す
Azure Storage は Microsoft Entra 認証をネイティブにサポートするため、マネージド ID を使用して取得したアクセス トークンを直接受け入れることができます。 これは Azure Storage の Microsoft Entra ID との統合の一部であり、接続文字列に資格情報を提供することとは異なります。
次の手順を完了するには、前に作成した VM から行う必要があり、それに接続するには SSH クライアントが必要です。
Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
Azure portal で [Virtual Machines] に移動し、Linux 仮想マシンに移動して、[概要] ページにある [接続] を選びます。 VM に接続する文字列をコピーします。
任意の SSH クライアントを使用して、VM に接続します。
ターミナル ウィンドウで、CURL を使用して、ローカルのマネージド ID エンドポイントに対して Azure Storage のアクセス トークンを取得するよう要求します。
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true
アクセス トークンを使用して Azure Storage にアクセスします。 たとえば、以前にコンテナーにアップロードしたサンプル ファイルの内容を読み取る場合は、
<STORAGE ACCOUNT>
、<CONTAINER NAME>
、<FILE NAME>
の値を前に指定した値に、<ACCESS TOKEN>
を前の手順で返されたトークンに置き換えます。curl https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME> -H "x-ms-version: 2017-11-09" -H "Authorization: Bearer <ACCESS TOKEN>"
応答には、次のようなファイルの内容が含まれています。
Hello world! :)
最後に、次に示すように、トークンを変数に保存して、2 番目のコマンドに渡すこともできます。
# Run the first curl command and capture its output in a variable
access_token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true | jq -r '.access_token')
# Run the second curl command with the access token
curl "https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME>" \
-H "x-ms-version: 2017-11-09" \
-H "Authorization: Bearer $access_token"
Linux VM のシステム割り当てマネージド ID を使用して SAS 資格情報で Azure Storage にアクセスする
このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用して、ストレージの Shared Access Signature (SAS) 資格情報 (具体的には サービス SAS 資格情報) を取得する方法について説明します。
Note
このチュートリアルで生成された SAS キーは、この VM に制限またはバインドされません。
サービス SAS は、アカウント アクセス キーを公開することなく、ストレージ アカウント内のオブジェクトへの制限付きアクセスを許可します。 期間を限定し、特定のサービスについて、アクセス権を付与することができます。 ストレージ SDK の使用時など、ストレージ操作を実行するときに、SAS 資格情報を通常どおりに使用できます。 このチュートリアルでは、Azure Storage CLI を使用して BLOB をアップロードしてダウンロードします。
学習内容は次のとおりです。
- ストレージ アカウントの作成
- ストレージ アカウントに BLOB コンテナーを作成する
- Resource Manager で VM にストレージ アカウント SAS へのアクセス権を付与する
- VM の ID を使用してアクセス トークンを取得し、それを使用して Resource Manager から SAS を取得する
ストレージ アカウントの作成
まだお持ちでない場合は、ストレージ アカウントを作成する必要があります。 この手順をスキップし、既存のストレージ アカウントのキーへのアクセスを、VM のシステム割り当てマネージド ID に付与することができます。
Azure portal の左上隅にある [+/新しいサービスの作成] ボタンを選択します。
[ストレージ]、[ストレージ アカウント] の順に選択すると、[ストレージ アカウントの作成] パネルが表示されます。
ストレージ アカウントの [名前] を入力します。 後で必要になるので、この名前を覚えておいてください。
[デプロイ モデル] が [Resource Manager] に設定され、[アカウントの種類] が [汎用] に設定されていることを確認します。
[サブスクリプション] と [リソース グループ] が、VM を作成したときに指定したものと一致していることを確認します。
[作成] を選択してストレージ アカウントの作成を完了します。
ストレージ アカウントに BLOB コンテナーを作成する
チュートリアルの後半で、新しいストレージ アカウントにファイルをアップロードしてダウンロードします。 ファイルには Blob Storage が必要であるため、ファイルを格納する Blob コンテナーを作成する必要があります。
新しく作成したストレージ アカウントに移動します。
左側のパネルで、[Blob service] の下の [コンテナー] リンクを選択します。
ページの上部にある [+ コンテナー] を選択すると、[新しいコンテナー] パネルが表示されます。
コンテナーに名前を付け、アクセス レベルを選択して、[OK] を選択します。 このチュートリアルの後半で指定した名前が必要になります。
VM のシステム割り当てマネージド ID にストレージ SAS を使用するためのアクセス権を付与する
Azure Storage では Microsoft Entra 認証がネイティブでサポートされます。そのため、VM のシステム割り当てマネージド ID を使用して Resource Manager からストレージ SAS を取得できます。 その後、その SAS を使ってストレージにアクセスできます。
このセクションでは、ストレージ アカウントの SAS へのアクセスを VM のシステム割り当てマネージド ID に付与します。 お使いのストレージ アカウントを含むリソース グループのスコープで、マネージド ID に [ストレージ アカウント共同作成者] ロールを割り当てます。
詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Note
ストレージの確認にアクセス許可を付与するために使用できるさまざまなロールの詳細については、Microsoft Entra ID を使用した BLOB とキューへのアクセスの承認に関するページを参照してください。
VM ID を使用してアクセス トークンを取得し、そのアクセス トークンを使用して Azure Resource Manager を呼び出す
このチュートリアルの残りの部分では、以前に作成した VM から作業を行います。
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Linux 用 Windows サブシステムで SSH クライアントを使用することができます。 SSH クライアントのキーの構成についてサポートが必要な場合は、以下を参照してください。
SSH クライアントを取得したら、次の手順に従います。
- Azure portal で [Virtual Machines] に移動し、Linux 仮想マシンに移動します。
- [概要] ページで、画面の上部にある [接続] を選択します。
- VM に接続する文字列をコピーします。
- SSH クライアントを使用して VM に接続します。
- Linux VM の作成時に追加した [パスワード] を入力します。 パスワードを入力すると、正常にサインインできます。
- CURL を使用して Azure Resource Manager のアクセス トークンを取得します。
アクセス トークンの CURL 要求と応答を次に示します。
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true
Note
前述の要求では、resource
パラメーターの値は、Microsoft Entra ID で予期されるものと完全に一致している必要があります。 Azure Resource Manager のリソース ID を使用する場合は、URI の末尾にスラッシュを含める必要があります。
次の応答では、簡潔にするため access_token 要素が短縮されています。
{
"access_token":"eyJ0eXAiOiJ...",
"refresh_token":"",
"expires_in":"3599",
"expires_on":"1504130527",
"not_before":"1504126627",
"resource":"https://management.azure.com",
"token_type":"Bearer"
}
ストレージ呼び出しを行うために Azure Resource Manager から SAS 資格情報を取得する
次に、CURL を使用して、前のセクションで取得したアクセス トークンを使用して Resource Manager を呼び出します。 これを使用して、ストレージ SAS 資格情報を作成します。 SAS 資格情報を取得したら、ストレージのアップロード/ダウンロード操作を呼び出すことができます。
この要求のために、次の HTTP 要求のパラメーターを使用して SAS 資格情報を作成します。
{
"canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
"signedResource":"c", // The kind of resource accessible with the SAS, in this case a container (c).
"signedPermission":"rcw", // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
"signedProtocol":"https", // Require the SAS be used on https protocol.
"signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}
これらのパラメーターを SAS 資格情報の POST 要求の本文に含めます。 SAS 資格情報を作成するためのパラメーターの詳細については、List Service SAS REST リファレンスに関する記事を参照してください。
次の CURL 要求を使用して、SAS 資格情報を取得できます。 <SUBSCRIPTION ID>
、<RESOURCE GROUP>
、<STORAGE ACCOUNT NAME>
、<CONTAINER NAME>
、および <EXPIRATION TIME>
の各パラメーターの値は、必ず実際の値に置き換えてください。 <ACCESS TOKEN>
の値は、以前に取得したアクセス トークンに置き換えます。
curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"signedExpiry\":\"<EXPIRATION TIME>\"}" -H "Authorization: Bearer <ACCESS TOKEN>"
注意
前述の URL のテキストでは大文字小文字が区別されるので、リソース グループに使用されている大文字小文字が正しく反映されていることを確認してください。 また、これは POST 要求であり、GET 要求ではないことを知っておくことが重要です。
CURL 応答は、SAS 資格情報を返します。
{"serviceSasToken":"sv=2015-04-05&sr=c&spr=https&st=2017-09-22T00%3A10%3A00Z&se=2017-09-22T02%3A00%3A00Z&sp=rcw&sig=QcVwljccgWcNMbe9roAJbD8J5oEkYoq%2F0cUPlgriBn0%3D"}
Linux VM で、次のコマンドを使用して、BLOB ストレージ コンテナーにアップロードするサンプル BLOB ファイルを作成します。
echo "This is a test file." > test.txt
次に、SAS 資格情報を使用して CLI az storage
コマンドで認証を行い、ファイルを BLOB コンテナーにアップロードします。 この手順では、VM に最新の Azure CLI をインストールする必要があります (まだインストールされていない場合)。
az storage blob upload --container-name
--file
--name
--account-name
--sas-token
応答:
Finished[#############################################################] 100.0000%
{
"etag": "\"0x8D4F9929765C139\"",
"lastModified": "2017-09-21T03:58:56+00:00"
}
また、Azure CLI を使用してファイルをダウンロードし、SAS 資格情報を使用して認証することもできます。
要求:
az storage blob download --container-name
--file
--name
--account-name
--sas-token
応答:
{
"content": null,
"metadata": {},
"name": "testblob",
"properties": {
"appendBlobCommittedBlockCount": null,
"blobType": "BlockBlob",
"contentLength": 16,
"contentRange": "bytes 0-15/16",
"contentSettings": {
"cacheControl": null,
"contentDisposition": null,
"contentEncoding": null,
"contentLanguage": null,
"contentMd5": "Aryr///Rb+D8JQ8IytleDA==",
"contentType": "text/plain"
},
"copy": {
"completionTime": null,
"id": null,
"progress": null,
"source": null,
"status": null,
"statusDescription": null
},
"etag": "\"0x8D4F9929765C139\"",
"lastModified": "2017-09-21T03:58:56+00:00",
"lease": {
"duration": null,
"state": "available",
"status": "unlocked"
},
"pageBlobSequenceNumber": null,
"serverEncrypted": false
},
"snapshot": null
}
Linux VM のシステム割り当てマネージド ID を使用してアクセス キーで Azure Storage にアクセスする
このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用してストレージ アカウント アクセス キーを取得する方法について説明します。 ストレージ SDK の使用時など、ストレージ操作を実行するときに、ストレージ アクセス キーを通常どおりに使用できます。 このチュートリアルでは、Azure CLI を使用して BLOB をアップロードおよびダウンロードします。
学習内容は次のとおりです。
- Resource Manager で VM にストレージ アカウント アクセス キーへのアクセス権を付与する
- VM の ID を使用してアクセス トークンを取得し、それを使用して Resource Manager からストレージ アクセス キーを取得する
ストレージ アカウントの作成
このチュートリアルを開始する前に既存のストレージ アカウントがない場合は、作成する必要があります。 既存のストレージ アカウントがある場合は、次の手順に従って、VM システム割り当てマネージド ID に既存のストレージ アカウントのキーへのアクセスを付与します。
Azure portal の左上隅にある [+/新しいサービスの作成] ボタンを選択します。
[ストレージ]、[ストレージ アカウント] の順に選択すると、[ストレージ アカウントの作成] パネルが表示されます。
ストレージ アカウントの [名前] を入力します。 後で必要になるので、この名前を覚えておいてください。
[デプロイ モデル] が [Resource Manager] に設定され、[アカウントの種類] が [汎用] に設定されていることを確認します。
[サブスクリプション] と [リソース グループ] が、VM を作成したときに指定したものと一致していることを確認します。
[作成] を選択してストレージ アカウントの作成を完了します。
ストレージ アカウントに BLOB コンテナーを作成する
チュートリアルの後半で、新しいストレージ アカウントにファイルをアップロードしてダウンロードします。 ファイルには Blob Storage が必要であるため、ファイルを格納する Blob コンテナーを作成する必要があります。
新しく作成したストレージ アカウントに移動します。
左側のパネルで、[Blob service] の下の [コンテナー] リンクを選択します。
ページの上部にある [+ コンテナー] を選択すると、[新しいコンテナー] パネルが表示されます。
コンテナーに名前を付け、アクセス レベルを選択して、[OK] を選択します。 このチュートリアルの後半で指定した名前が必要になります。
VM のシステム割り当てマネージド ID にストレージ アカウント アクセス キーを使用するためのアクセス権を付与する
Azure Storage では、ネイティブで Microsoft Entra 認証がサポートされていません。 ただし、VM のシステム割り当てマネージド ID を使用して Resource Manager からストレージ SAS を取得し、その SAS を使用してストレージにアクセスできます。 この手順では、ストレージ アカウントの SAS へのアクセス権を VM のシステム割り当てマネージド ID に付与します。 お使いのストレージ アカウントを含むリソース グループのスコープで、マネージド ID に [ストレージ アカウント共同作成者] ロールを割り当てることによってアクセス権を付与します。
詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Note
ストレージの確認にアクセス許可を付与するために使用できるさまざまなロールの詳細については、Microsoft Entra ID を使用した BLOB とキューへのアクセスの承認に関するページを参照してください。
VM ID を使用してアクセス トークンを取得し、そのアクセス トークンを使用して Azure Resource Manager を呼び出す
チュートリアルの残りの部分では、先ほど作成した VM から作業します。
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
Azure portal で [Virtual Machines] に移動し、Linux 仮想マシンを選び、[概要] ページの上部にある [接続] を選びます。 VM に接続する文字列をコピーします。
SSH クライアントを使用して VM に接続します。
次に、Linux VM の作成時に追加した [パスワード] を入力する必要があります。
CURL を使用して Azure Resource Manager のアクセス トークンを取得します。
アクセス トークンの CURL 要求と応答を次に示します。
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true
Note
前述の要求では、"resource" パラメーターの値は、Microsoft Entra ID で予期されるものと完全に一致している必要があります。 Azure Resource Manager のリソース ID を使用する場合は、URI の末尾にスラッシュを含める必要があります。 次の応答では、簡潔にするため access_token 要素が短縮されています。
{ "access_token": "eyJ0eXAiOiJ...", "refresh_token": "", "expires_in": "3599", "expires_on": "1504130527", "not_before": "1504126627", "resource": "https://management.azure.com", "token_type": "Bearer" }
ストレージ呼び出しを行うために Azure Resource Manager からストレージ アカウント アクセス キーを取得する
ここで、CURL を使用して、前のセクションで取得したアクセス トークンで Resource Manager を呼び出し、ストレージ アクセス キーを取得します。 ストレージ アクセス キーを取得したら、ストレージのアップロード/ダウンロード操作を呼び出すことができます。 <SUBSCRIPTION ID>
、<RESOURCE GROUP>
、および <STORAGE ACCOUNT NAME>
の各パラメーターの値は、必ず実際の値に置き換えてください。 <ACCESS TOKEN>
の値は、以前に取得したアクセス トークンに置き換えます。
curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listKeys?api-version=2016-12-01 --request POST -d "" -H "Authorization: Bearer <ACCESS TOKEN>"
注意
前述の URL のテキストでは大文字小文字が区別されるので、リソース グループに使用されている大文字小文字が正しく反映されていることを確認してください。 また、これは GET 要求ではなく POST 要求であることを認識し、-d (NULL を指定可能) を指定して長さの制限を取得するための値を渡すことが重要です。
CURL 応答では、キーのリストが返されます。
{"keys":[{"keyName":"key1","permissions":"Full","value":"iqDPNt..."},{"keyName":"key2","permissions":"Full","value":"U+uI0B..."}]}
BLOB ストレージ コンテナーにアップロードするサンプル BLOB ファイルを作成します。 Linux VM でこれを行うには、次のコマンドを使用します。
echo "This is a test file." > test.txt
次に、ストレージ アクセス キーを使用して CLI az storage
コマンドで認証を行い、ファイルを BLOB コンテナーにアップロードします。 この手順では、VM に最新の Azure CLI をインストールする必要があります (まだインストールされていない場合)。
az storage blob upload -c <CONTAINER NAME> -n test.txt -f test.txt --account-name <STORAGE ACCOUNT NAME> --account-key <STORAGE ACCOUNT KEY>
応答:
Finished[#############################################################] 100.0000%
{
"etag": "\"0x8D4F9929765C139\"",
"lastModified": "2017-09-12T03:58:56+00:00"
}
さらに、Azure CLI を使用してファイルをダウンロードし、ストレージ アクセス キーを使用して認証することもできます。
要求:
az storage blob download -c <CONTAINER NAME> -n test.txt -f test-download.txt --account-name <STORAGE ACCOUNT NAME> --account-key <STORAGE ACCOUNT KEY>
応答:
{
"content": null,
"metadata": {},
"name": "test.txt",
"properties": {
"appendBlobCommittedBlockCount": null,
"blobType": "BlockBlob",
"contentLength": 21,
"contentRange": "bytes 0-20/21",
"contentSettings": {
"cacheControl": null,
"contentDisposition": null,
"contentEncoding": null,
"contentLanguage": null,
"contentMd5": "LSghAvpnElYyfUdn7CO8aw==",
"contentType": "text/plain"
},
"copy": {
"completionTime": null,
"id": null,
"progress": null,
"source": null,
"status": null,
"statusDescription": null
},
"etag": "\"0x8D5067F30D0C283\"",
"lastModified": "2017-09-28T14:42:49+00:00",
"lease": {
"duration": null,
"state": "available",
"status": "unlocked"
},
"pageBlobSequenceNumber": null,
"serverEncrypted": false
},
"snapshot": null
}
Linux VM のシステム割り当てマネージド ID を使用して Azure Key Vault にアクセスする
このチュートリアルでは、Linux 仮想マシン (VM) でシステム割り当てマネージド ID を使用して Azure Key Vault にアクセスする方法について説明します。 Key Vault により、クライアント アプリケーションは、Microsoft Entra ID で保護されていないリソースにシークレットを使ってアクセスできます。 マネージド サービス ID は Azure によって自動的に管理され、認証情報をコードに含めなくても、Microsoft Entra 認証をサポートするサービスに対して認証を行うことができます。
学習内容は次のとおりです。
- Key Vault に格納されているシークレットへ VM のアクセスを許可する
- VM の ID を使用してアクセス トークンを取得して、Key Vault からシークレットを取得する
Key Vault の作成
システム割り当てマネージド ID が有効になっている Linux 仮想マシンも必要です。
- このチュートリアル用に仮想マシンを作成する必要がある場合は、Azure portal での Linux 仮想マシンの作成に関する記事に従ってください。
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
このセクションでは、Key Vault に格納されているシークレットへのアクセスを VM に許可する方法を説明します。 Azure リソースのマネージド ID を使用すると、Microsoft Entra 認証をサポートするリソースに対して認証するためのアクセス トークンをコードで取得できます。
ただし、すべての Azure サービスで Microsoft Entra 認証がサポートされているわけではありません。 Azure リソースのマネージド ID をこれらのサービスと共に使用するには、Azure Key Vault にサービス資格情報を保存し、VM のマネージド ID を使用して Key Vault にアクセスして、資格情報を取得します。
まず、Key Vault を作成し、VM のシステム割り当てマネージド ID に Key Vault へのアクセスを付与する必要があります。
Azure portal にサインインします。
左側のナビゲーション バーの上部で、[リソースの作成] を選びます。
[Marketplace を検索] ボックスに「Key Vault」と入力し、Enter キーを押します。
結果から [Key Vault] を選択します。
[作成] を選択します
新しい Key Vault の [名前] を入力します。
このチュートリアルで使用する仮想マシンを作成したサブスクリプションとリソース グループを必ず選択して、必要なすべての情報を入力します。
[確認および作成] を選択し、[作成] を選択します。
シークレットを作成します
次に、Key Vault にシークレットを追加し、VM で実行されているコードを使用して後で取得できるようにする必要があります。 このセクションでは、PowerShell を使用します。 ただし、この仮想マシンで実行されるコードに同じ概念が適用されます。
新しく作成した Key Vault に移動します。
[シークレット] を選択してから、[追加] を選択します。
[Generate/Import](生成/インポート) を選択します。
[シークレットを作成します] セクションで、[アップロード オプション] に移動し、[手動] が選択されていることを確認します。
シークレットの名前と値を指定します。 値は任意のものを指定できます。
アクティブ化の日付と有効期限はオフのままにし、[有効] が [はい] に設定されていることを確認します。
[作成] を選択して、シークレットを作成します。
アクセス権の付与
仮想マシンで使われるマネージド ID には、Key Vault に格納されているシークレットを読み取るアクセス権が必要です。
新しく作成した Key Vault に移動します。
左側のナビゲーションから [アクセス ポリシー] を選択します。
[アクセス ポリシーの追加] を選択します。
[アクセス ポリシーの追加] セクションで、[テンプレートからの構成 (省略可能)] のドロップダウン メニューから [シークレットの管理] を選択します。
[プリンシパルの選択] を選択し、以前に作成した VM の名前を検索フィールドに入力します。 結果一覧で VM を選択し、[選択] を選択します。
[追加] を選択します。
[保存] を選択します。
データにアクセスする
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
重要
目標のサービスにアクセスするための Microsoft Entra トークンを容易に取得できる Azure.Identity ライブラリは、すべての Azure SDK でサポートされます。 Azure SDK の詳細を確認し、Azure.Identity ライブラリにアクセスしてください。
- ポータルで Linux VM に移動し、[概要] の [接続] を選択します。
- 任意の SSH クライアントを使用して、VM に接続します。
- ターミナル ウィンドウで、cURL を使用して、Azure リソース エンドポイントのローカル マネージド ID に、Azure Key Vault のアクセス トークンを取得するよう要求します。 アクセス トークンの CURL 要求を次に示します。
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
```
The response includes the access token you need to access Resource Manager.
Response:
```bash
{"access_token":"eyJ0eXAi...",
"refresh_token":"",
"expires_in":"3599",
"expires_on":"1504130527",
"not_before":"1504126627",
"resource":"https://vault.azure.net",
"token_type":"Bearer"}
このアクセス トークンを使用して Azure Key Vault に認証することができます。 次の CURL 要求は、CURL と Key Vault REST API を使用して Key Vault からシークレットを読み取る方法を示しています。 Key Vault の URL が必要です。これは、Key Vault の [概要] ページの [Essentials] セクションにあります。 前の呼び出しで取得したアクセス トークンも必要になります。
curl 'https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01' -H "Authorization: Bearer <ACCESS TOKEN>"
応答は次のようになります。
{"value":"p@ssw0rd!","id":"https://mytestkeyvault.vault.azure.net/secrets/MyTestSecret/7c2204c6093c4d859bc5b9eff8f29050","attributes":{"enabled":true,"created":1505088747,"updated":1505088747,"recoveryLevel":"Purgeable"}}
Key Vault からシークレットを取得した後は、名前とパスワードを必要とするサービスへの認証にそのシークレットを使用できます。
リソースをクリーンアップする
リソースをクリーンアップする準備ができたら、Azure portal にサインインし、[リソース グループ] を選択し、このチュートリアルのプロセスで作成されたリソース グループ (mi-test
など) を見つけて選択します。 [リソース グループの削除] コマンドを使用するか、PowerShell または CLI を使用できます。
Linux VM のシステム割り当てマネージド ID を使用して、リソース マネージャーのリソース グループにアクセスする
ヒント
この記事の手順は、開始するポータルに応じて若干異なる場合があります。
このチュートリアルでは、システム割り当て ID を作成し、それを Linux 仮想マシン (VM) に割り当ててから、その ID を使って Azure Resource Manager API にアクセスする方法について説明します。 管理対象サービス ID は Azure によって自動的に管理されます。 管理対象サービス ID を使用すると、コード内に資格情報を埋め込む必要なく、Microsoft Entra の認証をサポートするサービスに認証することができます。
学習内容は次のとおりです。
- VM に Azure Resource Manager へのアクセスを許可します。
- VM のシステム割り当てマネージド ID を使って、Resource Manager にアクセスするためのアクセス トークンを取得します。
管理者アカウントで Azure Portal にサインインします。
[リソース グループ] タブに移動します。
VM のマネージド ID にアクセスを許可するリソース グループを選びます。
左側のパネルで [アクセス制御 (IAM)] を選択します。
[追加] を選択し、 [ロールの割り当ての追加] を選択します。
[ロール] タブで、[閲覧者] を選択します。 このロールでは、すべてのリソースを表示できますが、変更を加えることはできません
[メンバー] タブの [アクセスの割り当て先] オプションで [マネージド ID] を選んでから、[+ メンバーの選択] を選びます。
[サブスクリプション] ドロップダウンに適切なサブスクリプションが表示されていることを確認します。 [リソース グループ] で [すべてのリソース グループ] を選びます。
[ID の管理] ドロップダウンで [仮想マシン] を選びます。
[選択] オプションのドロップダウンで VM を選んでから、[保存] を選びます。
アクセス トークンを取得する
VM のシステム割り当てマネージド ID を使ってリソース マネージャーを呼び出し、アクセス トークンを取得します。
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Linux 用 Windows サブシステムで SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
- Azure portal で Linux VM に移動します。
- [概要] で [接続] を選びます。
- 任意の SSH クライアントを使用して、VM に接続します。
- ターミナル ウィンドウで、
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 にアクセスを許可したリソース グループの詳細を読み取ります。 <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>"
特定のリソース グループの情報を含む応答が返されます。
{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
"provisioningState":"Succeeded"
}
}
Linux VM のユーザー割り当てマネージド ID を使用して Resource Manager のリソース グループにアクセスする
ヒント
この記事の手順は、開始するポータルに応じて若干異なる場合があります。
このチュートリアルでは、ユーザー割り当て ID を作成して Linux 仮想マシン (VM) に割り当て、その ID を使用して Azure Resource Manager API にアクセスする方法について説明します。 管理対象サービス ID は Azure によって自動的に管理されます。 管理対象サービス ID を使用すると、コード内に資格情報を埋め込む必要なく、Microsoft Entra の認証をサポートするサービスに認証することができます。
学習内容は次のとおりです。
- VM に Azure Resource Manager へのアクセスを許可します。
- VM のシステム割り当てマネージド ID を使って、Resource Manager にアクセスするためのアクセス トークンを取得します。
az identity create を使用して、ユーザー割り当てマネージド ID を作成します。 -g
パラメーターにはユーザー割り当てマネージド ID を作成するリソース グループを指定し、-n
パラメーターにはその名前を指定します。 <RESOURCE GROUP>
と <UAMI NAME>
のパラメーターの値は、必ず実際の値に置き換えてください。
重要
ユーザー割り当てマネージド ID を作成する場合、名前は文字または数字で始まる必要があり、英数字、ハイフン (-) とアンダースコア (_) の組み合わせを含めることができます。 仮想マシンまたは仮想マシン スケール セットへの割り当てが適切に動作するように、名前は 24 文字に制限されています。 詳細については、FAQ と既知の問題に関するページを参照してください。
az identity create -g <RESOURCE GROUP> -n <UAMI NAME>
応答には、次の例のように、作成されたユーザー割り当てマネージド ID の詳細が含まれています。 次の手順でユーザー割り当てマネージド ID に id
の値を使用するため、この値をメモしておきます。
{
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"clientSecretUrl": "https://control-westcentralus.identity.azure.net/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>/credentials?tid=5678&oid=9012&aid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"id": "/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>",
"location": "westcentralus",
"name": "<UAMI NAME>",
"principalId": "9012",
"resourceGroup": "<RESOURCE GROUP>",
"tags": {},
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Linux VM に ID を割り当てる
ユーザー割り当てマネージド ID は、複数の Azure リソース上のクライアントで使用できます。 単一の VM にユーザー割り当てマネージド ID を割り当てるには、次のコマンドを使用します。 -IdentityID
パラメーターには、前の手順で返された Id
プロパティを使用します。
az vm assign-identity を使用して、ユーザー割り当てマネージド ID を Linux VM に割り当てます。 <RESOURCE GROUP>
と <VM NAME>
のパラメーターの値は、必ず実際の値に置き換えてください。 --identities
パラメーターの値には、前の手順で返された id
プロパティを使用します。
az vm identity assign -g <RESOURCE GROUP> -n <VM NAME> --identities "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>"
Azure Resource Manager でリソース グループへのアクセスを許可する
マネージド ID は、Microsoft Entra 認証をサポートするリソース API を認証するアクセス トークンを要求するためにコードで使用できる ID です。 このチュートリアルでは、コードは Azure Resource Manager API にアクセスします。
コードで API にアクセスできるようにするには、事前に ID に Azure Resource Manager のリソースへのアクセスを許可する必要があります。 このケースでは、VM が含まれているリソース グループです。 使用する環境に合わせて、<SUBSCRIPTION ID>
および <RESOURCE GROUP>
の値を更新します。 さらに、<UAMI PRINCIPALID>
を、「ユーザー割り当てマネージド ID を作成する」の az identity create
コマンドによって返された principalId
プロパティで置き換えます。
az role assignment create --assignee <UAMI PRINCIPALID> --role 'Reader' --scope "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP> "
応答には、次の例のように、作成されたロールの割り当ての詳細が含まれています。
{
"id": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
"name": "00000000-0000-0000-0000-000000000000",
"properties": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"roleDefinitionId": "/subscriptions/<SUBSCRIPTION ID>/providers/Microsoft.Authorization/roleDefinitions/00000000-0000-0000-0000-000000000000",
"scope": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>"
},
"resourceGroup": "<RESOURCE GROUP>",
"type": "Microsoft.Authorization/roleAssignments"
}
VM の ID を使用してアクセス トークンを取得し、このトークンを使用して Resource Manager を呼び出す
ヒント
この記事の手順は、開始するポータルに応じて若干異なる場合があります。
チュートリアルの残りの部分では、以前に作成した VM から作業を行います。
これらの手順を完了するには、SSH クライアントが必要です。 Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。
Azure Portal にサインインします。
Portal で [仮想マシン] に移動し、Linux 仮想マシンに移動して、[概要] の [接続] をクリックします。 VM に接続する文字列をコピーします。
任意の SSH クライアントを使用して、VM に接続します。 Windows を使用している場合は、Windows Subsystem for Linux で SSH クライアントを使用することができます。 SSH クライアント キーの構成について支援が必要な場合は、「Azure 上の Windows で SSH キーを使用する方法」または「Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。
ターミナル ウィンドウで、CURL を使用して、Azure Instance Metadata Service (IMDS) の ID エンドポイントに対して Azure Resource Manager のアクセス トークンを取得するよう要求します。
アクセス トークンを取得するための CURL 要求を次の例に示します。
<CLIENT ID>
を、「ユーザー割り当てマネージド ID を作成する」のaz identity create
コマンドによって返されたclientId
プロパティで置き換えてください。curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com/&client_id=<UAMI CLIENT ID>"
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 にアクセスし、以前にユーザー割り当てマネージド ID にアクセスを許可したリソース グループのプロパティを読み取ります。
<SUBSCRIPTION ID>
と<RESOURCE GROUP>
は、以前に指定した値で必ず置き換えてください。<ACCESS TOKEN>
は、前の手順で返されたトークンで置き換えてください。注意
URL では大文字小文字が区別されるため、リソース グループの命名時に以前使用したものと同じ大文字と小文字の使い分けが使用されていること、および
resourceGroups
の "G" が大文字であることを確認してください。curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS TOKEN>"
応答には、次の例のように、特定のリソース グループの情報が含まれています。
{ "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/DevTest", "name":"DevTest", "location":"westus", "properties":{"provisioningState":"Succeeded"} }