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 をインストールします。
SSH ターミナルで、次のコマンドを使用して Node.js と npm をインストールします。
curl -sL 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ディレクトリ内の仮想マシンで、index.js という名前の JavaScript ファイルを作成します。touch index.jsNano テキスト エディターでファイルを開きます。
nano index.js次のコードをコピーし、
<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); })Ctrl + x を使用してファイルを保存します。
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!'
リソースをクリーンアップする
必要がなくなったら、仮想マシンとキー コンテナーを削除します。 それらが属しているリソース グループを削除するだけで、簡単にこれを行うことができます。
az group delete -g "myResourceGroup"