チュートリアル: Linux VM のシステム割り当てマネージド ID を使用して Azure Storage にアクセスする

Azure リソース用マネージド ID は、Microsoft Entra ID の機能です。 Azure リソースのマネージド ID をサポートする各 Azure サービスは、それぞれ固有のタイムラインの下で提供されます。 ご利用のリソースに対するマネージド ID の提供状態と既知の問題をあらかじめ確認しておいてください。

このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用して Azure Storage にアクセスする方法について説明します。 学習内容は次のとおりです。

  • ストレージ アカウントの作成
  • ストレージ アカウントに BLOB コンテナーを作成する
  • Linux VM のマネージド ID に Azure Storage コンテナーへのアクセス権を付与します
  • アクセス トークン取得し、それを使用して Azure Storage を呼び出す

前提条件

このチュートリアルの CLI スクリプトの例を実行するには、次の 2 つの方法があります。

ストレージ アカウントの作成

このセクションでは、ストレージ アカウントを作成します。

  1. Azure portal の左上隅にある [リソースの作成] ボタンを選択します。

  2. [ストレージ][ストレージ アカウント - Blob、File、Table、Queue] の順に選択します。

  3. [名前] で、ストレージ アカウントの名前を入力します。

  4. [デプロイ モデル][アカウントの種類] がそれぞれ [Resource manager][ストレージ (汎用 v1)] に設定されている必要があります。

  5. [サブスクリプション][リソース グループ] が、前の手順で VM を作成したときに指定したものと一致していることを確認します。

  6. [作成] を選択します

    新しいストレージ アカウントの作成画面を示したスクリーンショット。

BLOB コンテナーを作成し、ファイルをストレージ アカウントにアップロードする

ファイルには Blob Storage が必要であるため、ファイルを格納する BLOB コンテナーを作成する必要があります。 次に、新しいストレージ アカウントで、BLOB コンテナーにファイルをアップロードします。

  1. 新たに作成したストレージ アカウントに戻ります。

  2. [Blob service][コンテナー] を選択します。

  3. ページの上部にある [+ コンテナー] を選択します。

  4. [新しいコンテナー] で、コンテナーの名前を入力し、[パブリック アクセス レベル] で既定値を保持します。

    ストレージ コンテナー作成画面を示したスクリーンショット。

  5. 任意のエディターを使用して、ローカル コンピューターに hello world.txt という名前のファイルを作成します。 ファイルを開き、"Hello world! :)" というテキストを (引用符なしで) 追加し、保存します。

  6. 新しく作成したコンテナーにファイルをアップロードします。コンテナー名をクリックしてから [アップロード] をクリックします。

  7. [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 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。

  1. Azure portal で [Virtual Machines] に移動し、Linux 仮想マシンに移動して、[概要] ページにある [接続] を選びます。 VM に接続する文字列をコピーします。

  2. 任意の SSH クライアントを使用して、VM に接続します。

  3. ターミナル ウィンドウで、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
    
  4. このアクセス トークンを使用して 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 を使用して Azure Storage にアクセスする方法を説明しました。 Azure Storage の詳細については、以下を参照してください。