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

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

このチュートリアルでは、Linux 仮想マシン (VM) でシステム割り当てマネージド ID を使用して Azure Key Vault にアクセスする方法について説明します。 Key Vault により、クライアント アプリケーションは、Microsoft Entra ID で保護されていないリソースにシークレットを使ってアクセスできます。 マネージド サービス ID は Azure によって自動的に管理され、認証情報をコードに含めなくても、Microsoft Entra 認証をサポートするサービスに対して認証を行うことができます。

以下の方法について説明します。

  • Key Vault に格納されているシークレットへ VM のアクセスを許可する
  • VM の ID を使用してアクセス トークンを取得して、Key Vault からシークレットを取得する

前提条件

Key Vault の作成

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

このセクションでは、Key Vault に格納されているシークレットへのアクセスを VM に許可する方法を説明します。 Azure リソースのマネージド ID を使用すると、Microsoft Entra 認証をサポートするリソースに対して認証するためのアクセス トークンをコードで取得できます。  ただし、すべての Azure サービスで Microsoft Entra 認証がサポートされているわけではありません。 Azure リソースのマネージド ID をこれらのサービスと共に使用するには、Azure Key Vault にサービス資格情報を保存し、VM のマネージド ID を使用して Key Vault にアクセスして、資格情報を取得します。

まず、キー コンテナーを作成し、VM のシステム割り当てマネージド ID にキー コンテナーへのアクセスを許可する必要があります。

  1. Azure portal にサインインします。

  2. 左側のナビゲーション バーの上部で、[リソースの作成] を選びます。

  3. [Marketplace を検索] ボックスに「Key Vault」と入力し、Enter キーを押します。

  4. 結果から [Key Vault] を選択します。

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

  6. 新しい Key Vault の [名前] を入力します。

    Azure Key Vault の作成画面を示すスクリーンショット。

  7. このチュートリアルで使用する仮想マシンを作成したサブスクリプションとリソース グループを必ず選択して、必要なすべての情報を入力します。

  8. [確認および作成] を選択します。

  9. [作成]

シークレットの作成

次に、Key Vault にシークレットを追加し、VM で実行されているコードを使用して後で取得できるようにします。 このチュートリアルでは、PowerShell を使用していますが、この仮想マシンで実行されるすべてのコードに同じ概念が適用されます。

  1. 新しく作成した Key Vault に移動します。

  2. [シークレット] を選択し、[追加] を選択します。

  3. [生成/インポート] を選択します。

  4. [シークレットの作成] 画面の [アップロード オプション] で、 [手動] を選択したままにします。

  5. シークレットの名前と値を指定します。  値は任意のものを指定できます。 

  6. アクティブ化した日付と有効期限の日付をクリアのままにし、[有効][はい] のままにします。 

  7. [作成] を選択して、シークレットを作成します。

    シークレットの作成を示すスクリーンショット。

アクセス権の付与

仮想マシンで使われるマネージド ID には、Key Vault に格納されているシークレットを読み取るアクセス権が必要です。

  1. 新しく作成した Key Vault に移動します。

  2. 左側のメニューで、 [アクセス ポリシー] を選択します。

  3. [アクセス ポリシーの追加] を選択します

    キー コンテナーのアクセス ポリシーの作成画面のスクリーンショット。

  4. [アクセス ポリシーの追加] セクションで、 [テンプレートからの構成 (省略可能)] のプルダウン メニューから [シークレットの管理] を選択します。

  5. [プリンシパルの選択] を選択し、検索フィールドに以前に作成した VM の名前を入力します。  結果一覧で VM を選択し、 [選択] を選択します。

  6. [追加] を選択します。

  7. [保存] を選択します。

データにアクセスする

これらの手順を完了するには、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 ライブラリを活用してください。

  1. ポータルで Linux VM に移動し、[概要][接続] を選択します。 

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

  3. ターミナル ウィンドウで、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
    

    応答には、リソース マネージャーへのアクセスに必要なアクセス トークンが含まれています。 

    応答:

    {"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 を使用して Azure Key Vault にアクセスする方法について説明しました。 Azure Key Vault の詳細については、以下を参照してください。