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

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

このチュートリアルでは、Windows 仮想マシン (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 にアクセスして、資格情報を取得します。

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

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

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

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

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

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

  6. 新しいキー コンテナーの [名前] を入力します。

    キー コンテナーの作成画面。

  7. 必須情報を全部入力します このチュートリアルで使用しているサブスクリプションとリソース グループを選択していることを確認してください。

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

  9. [作成]

シークレットの作成

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

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

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

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

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

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

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

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

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

アクセス権の付与

仮想マシンで使用されるマネージド ID には、Key Vault に格納するシークレットを読み取るためのアクセス権を付与する必要があります。

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

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

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

    Key Vault アクセス ポリシー画面が表示されたスクリーンショット。

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

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

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

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

データにアクセスする

このセクションでは、VM ID を使用してアクセス トークンを取得し、それを使用して Key Vault からシークレットを取得する方法を説明します。 PowerShell 4.3.1 以上がインストールされていない場合、最新バージョンをダウンロードしてインストールする必要があります。

最初に、VM のシステム割り当てマネージド ID を使用して、Key Vault に対して認証するためのアクセス トークンを取得します。

  1. ポータルで [Virtual Machines] にナビゲートして Windows 仮想マシンに移動し、[概要][接続] を選択します。
  2. Windows VM を作成したときに追加したユーザー名パスワードを入力します。  
  3. これで、仮想マシンを使用するリモート デスクトップ接続が作成されました。リモート セッションで PowerShell を開きます。  
  4. PowerShell では、テナント上で Web 要求を呼び出し、VM の特定のポートでローカル ホストのトークンを取得します。  

PowerShell は次のものを要求します。

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} 

次のような応答が表示されます。

トークン応答を含む要求を示すスクリーンショット。

次に、アクセス トークンを応答から抽出します。  

   $KeyVaultToken = $Response.access_token

最後に、PowerShell の Invoke-WebRequest コマンドを使用して、Key Vault で以前に作成したシークレットを取得し、Authorization ヘッダーにアクセス トークンを渡します。  Key Vault の [概要] ページの [要点] セクションにある Key Vault の URL が必要です。  

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

応答は次のようになります。

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

Key Vault からシークレットを取得した後は、名前とパスワードを必要とするサービスへの認証にそのシークレットを使用できます。

リソースをクリーンアップする

リソースをクリーンアップする場合は、Azure portal にサインインし、[リソース グループ] を選択し、このチュートリアルで作成されたリソース グループを探して選択してから (mi-test など)、[リソース グループの削除] コマンドを使用します。

あるいは、PowerShell または CLI を使用してリソースをクリーンアップすることもできます。

次の手順

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