チュートリアル: Windows VM のシステム割り当てマネージド ID を使用して Azure Data Lake Store にアクセスする方法
Azure リソース用マネージド ID は、Microsoft Entra ID の機能です。 Azure リソースのマネージド ID をサポートする各 Azure サービスは、それぞれ固有のタイムラインの下で提供されます。 ご利用のリソースに対するマネージド ID の提供状態と既知の問題をあらかじめ確認しておいてください。
このチュートリアルでは、Windows 仮想マシン (VM) のシステム割り当てマネージド ID を使用して Azure Data Lake Store にアクセスする方法について説明します。 マネージド ID は Azure によって自動的に管理されます。 これにより、コードに資格情報を埋め込まなくても、アプリケーションが Microsoft Entra 認証対応のサービスに対して認証できるようになります。
この記事では、次の方法について説明します。
- VM に Azure Data Lake Store へのアクセスを許可する
- VM ID を使用してアクセス トークンを取得し、それを使用して Azure Data Lake Store にアクセスする
前提条件
- マネージド ID の知識。 Azure リソースのマネージド ID 機能に慣れていない場合は、こちらの概要を参照してください。
- Azure アカウント。無料アカウントにサインアップしてください。
- 必要なリソース作成とロール管理の手順を実行するための、適切なスコープ (サブスクリプションまたはリソース グループ) の "所有者" アクセス許可。 ロールの割り当てに関するサポートが必要な場合は、Azure ロールの割り当てによる Azure サブスクリプション リソースへのアクセスの管理に関するページをご覧ください。
- システム割り当てマネージド ID が有効になっている Windows 仮想マシンも必要です。
- このチュートリアル用に仮想マシンを作成する必要がある場合は、システム割り当てマネージド ID を有効にした仮想マシンの作成に関する記事に従ってください
有効にする
システム割り当てマネージド ID の有効化は、1 クリックで行うことができます。 VM の作成中に有効にするか、既存の VM のプロパティで有効にすることができます。
新しい VM 上でシステム割り当てマネージド ID を有効にするには:
アクセス権の付与
この時点で、VM に Azure Data Lake Store のファイルとフォルダーへのアクセスを付与できます。 この手順では、既存の Data Lake Store を使用することも、新しいものを作成することもできます。 Azure Portal を使用して新しい Data Lake Store を作成するには、この Azure Data Lake Store のクイック スタートの手順を実行します。 Azure Data Lake Store のドキュメントに、Azure CLI と Azure PowerShell を使用するクイック スタートも用意されています。
Data Lake Store で新しいフォルダーを作成し、VM のシステム割り当て ID のアクセス許可を付与します。 この ID には、そのフォルダー内のファイルの読み取り、書き込み、実行を行う権限が必要です。
- Azure portal で、左側のナビゲーションの [Data Lake Store] を選びます。
- このチュートリアルで使用する Data Lake Store を選びます。
- コマンド バーの [データ エクスプローラー] を選びます。
- Data Lake Store のルート フォルダーが選択されます。 コマンド バーの [アクセス] を選びます。
- [追加] を選択します。 [選択] フィールドにお使いの VM の名前 (例: DevTestVM) を入力します。 検索結果からお使いの VM を選び、[選択] を選びます。
- [アクセス許可の選択] を選びます。 [読み取り] と [実行] を選択して [このフォルダー] に追加し、 [An access permission only](アクセス許可のみ) として追加します。 [OK] を選択します。 アクセス許可が正常に追加されます。
- [アクセス] ブレードを閉じます。
- このチュートリアル用に新しいフォルダーを作成します。 コマンド バーの [新しいフォルダー] を選び、この新しいフォルダーに名前 (例: TestFolder) を付けます。 [OK] を選択します。
- 作成したフォルダーを選び、コマンド バーの [アクセス] を選びます。
- 手順 5 と同様に [追加] を選び、[選択] フィールドに VM の名前を入力して選び、[選択] を選びます。
- 手順 6 と同様に [アクセス許可の選択] を選び、[読み取り]、[書き込み]、[実行] を選び、[このフォルダー] に追加し、[アクセス許可エントリと既定のアクセス許可エントリ] として追加します。 [OK] を選択します。 アクセス許可が正常に追加されます。
この時点で VM のシステム割り当てマネージド ID は、作成したフォルダーのファイルに対してすべての操作を実行できます。 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 での認証に関するページを参照してください。
Note
Data Lake Store ファイルシステムのクライアント SDK では、Azure リソースのマネージド ID はまだサポートされていません。 このチュートリアルは、SDK のサポートが追加されたときに更新されます。
このチュートリアルでは、PowerShell を使用して Data Lake Store ファイルシステムの REST API と認証し、REST 要求を行います。 VM のシステム割り当てマネージド ID を認証で使用するには、VM から要求を行う必要があります。
ポータルで [仮想マシン] を開いてお客様の Windows VM に移動し、[概要] の [接続] を選びます。
Windows VM を作成したときに追加したユーザー名とパスワードを入力します。
これで、仮想マシンを使用するリモート デスクトップ接続が作成されました。リモート セッションで PowerShell を開きます。
PowerShell の
Invoke-WebRequest
を使用して、Azure リソース エンドポイントのローカル マネージド ID に、Azure Data Lake Store のアクセス トークンを取得するよう要求します。 Data Lake Store のリソース識別子はhttps://datalake.azure.net/
です。 Data Lake はリソース識別子と正確に一致します。末尾のスラッシュが重要です。$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
応答を JSON オブジェクトから PowerShell オブジェクトに変換します。
$content = $response.Content | ConvertFrom-Json
応答からアクセス トークンを抽出します。
$AccessToken = $content.access_token
すべてが正しく構成されていることを確認します。 PowerShell の 'Invoke-WebRequest' を使用して、ルート フォルダー内のフォルダーを一覧表示するよう Data Lake Store の REST エンドポイントに要求します。 Authorization ヘッダーの文字列 "Bearer" に、大文字の "B" があることが重要です。 Data Lake Store の [概要] セクションで、ご利用の Data Lake Store の名前を確認できます。
Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
正常な応答は次のようになります。
StatusCode : 200 StatusDescription : OK Content : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..." RawContent : HTTP/1.1 200 OK Pragma: no-cache x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528 x-ms-webhdfs-version: 17.04.22.00 Status: 0x0 X-Content-Type-Options: nosniff Strict-Transport-Security: ma... Forms : {} Headers : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528], [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...} Images : {} InputFields : {} Links : {} ParsedHtml : System.__ComObject RawContentLength : 556
これで、Data Lake Store へのファイルのアップロードを試すことができます。 まず、アップロードするファイルを作成します。
echo "Test file." > Test1.txt
PowerShell の
Invoke-WebRequest
を使用して、先ほど作成したフォルダーにファイルをアップロードするよう Data Lake Store の REST エンドポイントに要求します。 この要求では 2 つの手順が実行されます。 最初の手順では、要求を行うとファイルをアップロードする場所にリダイレクトされます。 2 番目の手順では、実際にファイルをアップロードします。 このチュートリアルとは異なる値を使用する場合は、フォルダーとファイルの名前を正しく設定するのを忘れないでください。$HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
$HdfsRedirectResponse
の値を確認すると、次の応答のような値になります。PS C:\> $HdfsRedirectResponse StatusCode : 307 StatusDescription : Temporary Redirect Content : {} RawContent : HTTP/1.1 307 Temporary Redirect Pragma: no-cache x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3 ContentLength: 0 x-ms-webhdfs-version: 17.04.22.00 Status: 0x0 X-Content-Type-Options: nosn... Headers : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...} RawContentLength : 0
リダイレクト エンドポイントに要求を送信してアップロードを完了します。
Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
正常な応答は次のようになります。
StatusCode : 201 StatusDescription : Created Content : {} RawContent : HTTP/1.1 201 Created Pragma: no-cache x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307 ContentLength: 0 x-ms-webhdfs-version: 17.04.22.00 Status: 0x0 X-Content-Type-Options: nosniff Strict... Headers : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307], [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...} RawContentLength : 0
その他の Data Lake Store ファイルシステムの API を使用すると、ファイルへの追加、ファイルのダウンロードなどができます。
Disable
VM 上でシステム割り当て ID を無効にするには、システム割り当て ID の状態を Off に設定します。
次のステップ
このチュートリアルでは、Windows 仮想マシンのシステム割り当てマネージド ID を使用して、Azure Data Lake Store にアクセスする方法について学びました。 Azure Data Lake Store の詳細については、以下を参照してください。