次の方法で共有


チュートリアル: 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 サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。

Prerequisites

Windows、Mac、Linux:

  • Git
  • このチュートリアルでは、Azure CLI をローカルで実行する必要があります。 Azure CLI バージョン 2.0.4 以降がインストールされている必要があります。 バージョンを確認するには、az --version を実行します。 CLI をインストールまたはアップグレードする必要がある場合は、「Install Azure CLI 2.0 (Azure CLI 2.0 のインストール)」を参照してください。

Azure にログインする

Azure CLI を使用して Azure にログインするには、次のように入力します。

az login

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

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

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

Important

各キー ボールトには一意の名前が必要です。 次の例では、<your-unique-keyvault-name> をお使いのキー コンテナーの名前に置き換えてください。

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

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

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

mySecret という名前で値が Success! のシークレットを作成しましょう。 シークレットとしては、パスワード、SQL 接続文字列、または安全性とアプリケーションから利用できることの両方を維持する必要がある他の情報などがあります。

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

az keyvault secret set --vault-name "<your-unique-keyvault-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 myResourceGroup \
  --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 "myResourceGroup"

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

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

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

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

az role assignment create --role "Key Vault Secrets User" --assignee "<systemAssignedIdentity>" --scope /subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>

VM にログインする

仮想マシンにサインインするには、Linux が実行されている Azure 仮想マシンへの接続とサインインに関するページまたは Windows が実行されている Azure 仮想マシンへの接続とサインインに関するページの手順のようにします。

Linux VM にログインするには、「<」ステップで指定した >publicIpAddress で ssh コマンドを使用します。

ssh azureuser@<PublicIpAddress>

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

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

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

    curl -sL https://deb.nodesource.com/setup_14.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. 次のコードをコピーし (<your-unique-keyvault-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 = "<your-unique-keyvault-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 '<your-unique-keyvault-name>' is: 'Success!'

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

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

az group delete -g myResourceGroup

次のステップ

Azure Key Vault REST API