チュートリアル: JavaScript で仮想マシンでAzure Key Vaultを使用する

Azure Key Vaultは、キー、シークレット、および API キーやデータベース接続文字列などの証明書を保護するのに役立ちます。

このチュートリアルでは、Azure リソースのマネージド ID を使用してAzure Key Vaultから情報を読み取る Node.js アプリケーションを設定します。 次の方法を学びます:

  • キー保管庫を作成する
  • シークレットをKey Vaultに格納する
  • Azure Linux 仮想マシンを作成する
  • 仮想マシンに対してマネージド ID を有効にする
  • コンソール アプリケーションが Key Vault からデータを読み取るために必要なアクセス許可を付与する
  • Key Vaultからシークレットを取得する

開始する前に、Key Vault基本的な概念を参照してください。

Azure サブスクリプションをお持ちでない場合は、free アカウントを作成します。

Prerequisites

Windows、Mac、Linux の場合:

  • Git
  • Azure CLIの現在のバージョン。 az --versionを実行して、インストールされているバージョンを確認します。

Azure にサインインする

Azure CLI を使用して Azure にサインインします。

az login

リソース グループとキー コンテナーを作成する

このクイック スタートでは、事前に作成されたAzureキーボールトを使用します。 次のクイックスタート内の手順に従って、キー コンテナーを作成できます。

または、これらのAzure CLIコマンドを実行することもできます。

Important

各キー ボールトには一意の名前が必要です。 次の例では、 <vault-name> をキー コンテナーの名前に置き換えます。

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

キー コンテナーにシークレットを格納する

mySecret という名前で値が Success! のシークレットを作成しましょう。 シークレットは、パスワード、SQL 接続文字列、またはアプリケーションでセキュリティで保護され、使用できるようにするために必要なその他の情報です。

新しく作成したキー コンテナーにシークレットを追加するには、次のコマンドを使用します。

az keyvault secret set --vault-name "<vault-name>" --name "mySecret" --value "Success!"

仮想マシンを作成する

次のいずれかの方法を使用して 、myVM という名前の VM を作成します。

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Azure Portal Azure Portal

Azure CLIを使用して Linux VM を作成するには、az vm create コマンドを使用します。 次の例では、 azureuserという名前のユーザー アカウントを追加します。 --generate-ssh-keys パラメーターは SSH キーを生成し、既定のキーの場所 (~/.ssh) に格納します。

az vm create \
  --resource-group <resource-group> \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

出力の publicIpAddress の値を記録しておきます。

VM に ID を割り当てる

az vm identity assign コマンドを使用して、VM のシステム 割り当てマネージド ID を 作成します。

az vm identity assign --name "myVM" --resource-group "<resource-group>"

出力内のシステム割り当て ID をメモします。

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

VM ID にアクセス許可を割り当てる

VM のマネージド ID に、キー コンテナーに対して Key Vault Secrets User ロールを付与します。

az role assignment create --role "Key Vault Secrets User" --assignee "<system-assigned-identity>" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>

VM にサインインする

VM にサインインするには、Linux を実行している Azure 仮想マシンに接続してサインインする、または Windows を実行している Azure 仮想マシンに接続してサインインする の手順に従ってください。

Linux VM にサインインするには、[ssh] ステップの<public-ip-address>を使用します。

ssh azureuser@<public-ip-address>

Node.js と npm ライブラリを VM にインストールする

VM に、サンプル スクリプトで使用される 2 つの npm ライブラリ (@azure/keyvault-secrets@azure/identity) をインストールします。

  1. SSH ターミナルで、Node.js と npm をインストールします。

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. アプリ ディレクトリを作成し、Node.js パッケージを初期化します。

    mkdir app && cd app && npm init -y
    
  3. npmを使用してAzure パッケージをインストールします。

    npm install @azure/keyvault-secrets @azure/identity
    

サンプルの JavaScript ファイルを作成して編集する

  1. app ディレクトリ内の VM で、index.jsという名前の JavaScript ファイルを作成します。

    touch index.js
    
  2. Nano テキスト エディターでファイルを開きます。

    nano index.js
    
  3. 次のコードをエディターに貼り付け、 <vault-name> をキー コンテナー名に置き換えます。

    // index.js
    
    const { SecretClient } = require("@azure/keyvault-secrets");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Your Azure Key Vault name and secret name
    const keyVaultName = "<vault-name>";
    const keyVaultUri = `https://${keyVaultName}.vault.azure.net`;
    const secretName = "mySecret";
    
    // Authenticate to Azure
    const credential = new DefaultAzureCredential();
    const client = new SecretClient(keyVaultUri, credential);
    
    // Get Secret with Azure SDK for JS
    const getSecret = async (secretName) => {
    
        return (await client.getSecret(secretName)).value;
    }
    
    getSecret(secretName).then(secretValue => {
        console.log(`The value of secret '${secretName}' in '${keyVaultName}' is: '${secretValue}'`);
    }).catch(err => {
        console.log(err);
    })
    
  4. Ctrl+キーを使用してファイルを保存します。

  5. Save modified buffer?プロンプトで、「y」と入力します

  6. File Name to Write: index.jsプロンプトで Enter キーを押します

サンプルの Node.js アプリを実行する

index.js を実行します。 すべてが正しく構成されている場合、アプリはシークレット値を出力します。

node index.js

The value of secret 'mySecret' in '<vault-name>' is: 'Success!'

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

不要になったら、VM とキー コンテナーを削除します。 最も高速な方法は、所属するリソース グループを削除することです。

az group delete -g "myResourceGroup"

次のステップ

AZURE KEY VAULT REST API