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 の場合:
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) をインストールします。
SSH ターミナルで、Node.js と npm をインストールします。
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \ sudo apt-get install -y nodejsアプリ ディレクトリを作成し、Node.js パッケージを初期化します。
mkdir app && cd app && npm init -ynpmを使用してAzure パッケージをインストールします。npm install @azure/keyvault-secrets @azure/identity
サンプルの JavaScript ファイルを作成して編集する
appディレクトリ内の VM で、index.jsという名前の JavaScript ファイルを作成します。touch index.jsNano テキスト エディターでファイルを開きます。
nano index.js次のコードをエディターに貼り付け、
<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); })Ctrl+キーを使用してファイルを保存します。
Save modified buffer?プロンプトで、「y」と入力します。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"