チュートリアル: 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 の有効化は、1 クリックで行うことができます。 VM の作成中に有効にするか、既存の VM のプロパティで有効にすることができます。

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

新しい VM 上でシステム割り当てマネージド ID を有効にするには:

  1. Azure ポータル

  2. システム割り当て 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 には、そのフォルダー内のファイルの読み取り、書き込み、実行を行う権限が必要です。

  1. Azure portal で、左側のナビゲーションの [Data Lake Store] を選びます。
  2. このチュートリアルで使用する Data Lake Store を選びます。
  3. コマンド バーの [データ エクスプローラー] を選びます。
  4. Data Lake Store のルート フォルダーが選択されます。 コマンド バーの [アクセス] を選びます。
  5. [追加] を選択します。 [選択] フィールドにお使いの VM の名前 (例: DevTestVM) を入力します。 検索結果からお使いの VM を選び、[選択] を選びます。
  6. [アクセス許可の選択] を選びます。 [読み取り][実行] を選択して [このフォルダー] に追加し、 [An access permission only](アクセス許可のみ) として追加します。 [OK] を選択します。 アクセス許可が正常に追加されます。
  7. [アクセス] ブレードを閉じます。
  8. このチュートリアル用に新しいフォルダーを作成します。 コマンド バーの [新しいフォルダー] を選び、この新しいフォルダーに名前 (例: TestFolder) を付けます。 [OK] を選択します。
  9. 作成したフォルダーを選び、コマンド バーの [アクセス] を選びます。
  10. 手順 5 と同様に [追加] を選び、[選択] フィールドに VM の名前を入力して選び、[選択] を選びます。
  11. 手順 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 から要求を行う必要があります。

  1. ポータルで [仮想マシン] を開いてお客様の Windows VM に移動し、[概要][接続] を選びます。

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

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

  4. 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
    
  5. すべてが正しく構成されていることを確認します。 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
    
  6. これで、Data Lake Store へのファイルのアップロードを試すことができます。 まず、アップロードするファイルを作成します。

    echo "Test file." > Test1.txt
    
  7. 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 に設定します。

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

次のステップ

このチュートリアルでは、Windows 仮想マシンのシステム割り当てマネージド ID を使用して、Azure Data Lake Store にアクセスする方法について学びました。 Azure Data Lake Store の詳細については、以下を参照してください。