チュートリアル: 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をローカルで実行する必要があります。 Azure CLIの最新バージョンがインストールされている必要があります。 バージョンを確認するには、az --version を実行します。 CLI をインストールまたはアップグレードする必要がある場合は、「Install Azure CLIを参照してください。

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 ポータル

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

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

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

VM に ID を割り当てる

Azure CLI az vm identity assign コマンドを使用して、仮想マシンのシステム割り当て ID を作成します。

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

システムによって割り当てられた ID が次のコードに表示されていることにご注意ください。 上記のコマンドの出力は次のようになります。

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

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

ここで、次のコマンドを実行して、以前に作成した ID アクセス許可をキー コンテナーに割り当てることができます。

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 にログインする

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

Linux VM にログインするには、「<public-ip-address>」の手順で指定したで ssh コマンドを使用できます。

ssh azureuser@<public-ip-address>

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

仮想マシンに、JavaScript スクリプトで使用する 2 つの npm ライブラリ @azure/keyvault-secrets@azure/identity をインストールします。

  1. SSH ターミナルで、次のコマンドを使用して Node.js と npm をインストールします。

    curl -sL 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 ディレクトリ内の仮想マシンで、index.js という名前の JavaScript ファイルを作成します。

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

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

    // 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 + x を使用してファイルを保存します。

  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!'

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

必要がなくなったら、仮想マシンとキー コンテナーを削除します。 それらが属しているリソース グループを削除するだけで、簡単にこれを行うことができます。

az group delete -g "myResourceGroup"

次のステップ

Azure Key Vault REST API