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

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

このチュートリアルでは、Linux 仮想マシン (VM) のシステム割り当てマネージド ID を使用してストレージ アカウント アクセス キーを取得する方法について説明します。 ストレージ SDK の使用時など、ストレージ操作を実行するときに、ストレージ アクセス キーを通常どおりに使用できます。 このチュートリアルでは、Azure CLI を使用して BLOB をアップロードおよびダウンロードします。 学習内容:

  • Resource Manager で VM にストレージ アカウント アクセス キーへのアクセス権を付与する
  • VM の ID を使用してアクセス トークンを取得し、それを使用して Resource Manager からストレージ アクセス キーを取得する

前提条件

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

このチュートリアルで使う既存のストレージ アカウントがない場合は、作成する必要があります。 この手順をスキップし、既存のストレージ アカウントのキーへのアクセス権を、VM のシステム割り当てマネージド ID に付与することもできます。

  1. Azure portal の左上隅にある [+/新しいサービスの作成] ボタンを選択します。

  2. [ストレージ][ストレージ アカウント] の順に選択すると、新しい [ストレージ アカウントの作成] パネルが表示されます。

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

  4. [デプロイ モデル][アカウントの種類] が "Resource Manager" と "汎用" にそれぞれ設定されている必要があります。

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

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

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

ストレージ アカウントに BLOB コンテナーを作成する

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

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

  2. 左側の [Blob service] の下にある [コンテナー] リンクを選びます。

  3. ページの上部にある [+ コンテナー] を選択すると、[新しいコンテナー] パネルがスライドして現れます。

  4. コンテナーに名前を付け、アクセス レベルを選択して、[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 公開キーと秘密キーのペアを作成して使用する方法」をご覧ください。

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

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

  3. 次に、Linux VM の作成時に追加した [パスワード] を入力する必要があります。

  4. 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 Storage にアクセスする方法について説明しました。 Azure Storage アクセス キーの詳細については、以下を参照してください。