JavaScript で Azure Key Vault キーを使用できるようにする

この記事では、JavaScript 用の Azure Key Vault キー クライアント ライブラリを使って、Azure Key Vault に接続する方法について説明します。 接続後、コードはコンテナーのキーに対して操作できます。

API リファレンス | パッケージ (npm) | ライブラリのソース コード | サンプル | フィードバックを送信する

前提条件

プロジェクトの設定

  1. コマンド プロンプトを開き、プロジェクト フォルダーに変更します。 YOUR-DIRECTORY をご使用のフォルダー名に変更してください。

    cd YOUR-DIRECTORY
    
  2. ディレクトリに package.json ファイルがまだない場合は、プロジェクトを初期化してファイルを作成します。

    npm init -y
    
  3. JavaScript 用の Azure Key Vault キー クライアント ライブラリをインストールします。

    npm install @azure/keyvault-keys
    
  4. Microsoft Entra ID を使ってパスワードレス接続を使う場合は、JavaScript 用の Azure ID クライアント ライブラリをインストールします。

    npm install @azure/identity
    

Key Vault へのアクセスを認可して接続する

Microsoft Entra ID は、接続 ID (マネージド ID) を管理することで、最も安全な接続を提供します。 このパスワードレス機能を使用すると、コードに格納されているキーを必要としないアプリケーションを開発できます。

Azure Key Vault キーを使用するために Azure に対してプログラムで認証する前に、環境が設定されていることを確認します。

JavaScript 用の Azure SDK の資格情報フローを示す図。

開発者は、コードで DefaultAzureCredential を使用する前に、Azure CLI をインストールし、az login コマンドを使用して対話形式でサインインして Azure にログインする必要があります。

az login

アプリケーションをビルドする

アプリケーションをビルドすると、コードは 2 種類のリソースと対話します。

  • KeyVaultKey には、次のものが含まれます。
    • ID、名前、および値。
    • 許可されている操作。
    • ECEC-HSMRSARSA-HSMoctoct-HSM のデータ型。
    • KeyProperties としてのプロパティ
  • KeyPropertiesには、キーのメタデータ (名前、バージョン、タグ、有効期限データ、有効かどうかなど) が含まれます。

KeyVaultKey の値が必要な場合は、KeyVaultKey を返すメソッドを使用します。

オブジェクト モデル

JavaScript 用の Azure Key Vault キー クライアント ライブラリには、次のクライアントが含まれています。

  • KeyClient: KeyClient オブジェクトは、SDK の最上位のオブジェクトです。 このクライアントを使用すると、キーの作成、ローテーション、削除、一覧表示などのキー管理タスクを実行できます。
  • CryptographyClient を使用すると、キーの暗号化、復号化、署名、検証、ラップ、ラップ解除を実行できます。

クライアント ライブラリ内の KeyClient と CryptographyClient のリレーションシップを示す概念図。

KeyClient オブジェクトを作成する

ローカル環境と Key Vault 認証の設定後、JavaScript ファイルを作成します。これには、@azure/ID@azure/keyvault-keys パッケージが含まれます。 コンテナーへのパスワードレス接続を実装するために、DefaultAzureCredential などの資格情報を作成します。 その資格情報を使って、KeyClient オブジェクトで認証します。

// Include required dependencies
import { DefaultAzureCredential } from '@azure/identity';  
import { KeyClient } from '@azure/keyvault-keys';  

// Authenticate to Azure
// Create KeyClient
const credential = new DefaultAzureCredential(); 
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
  );

// Get key
const key = await client.getKey("MyKeyName");

CryptographyClient オブジェクトを作成する

CryptographyClient オブジェクトは SDK の操作オブジェクトであり、キーを使用して、暗号化、復号化、署名、検証、ラップとラップ解除などのアクションを実行します。

KeyClient の ID 資格情報とキー名を使用して、操作を実行する CryptographyClient を作成します。

// Include required dependencies
import { DefaultAzureCredential } from '@azure/identity';  
import {
  CryptographyClient,
  KeyClient,
  KnownEncryptionAlgorithms,
  RsaEncryptParameters
} from '@azure/keyvault-keys'; 

// Authenticate to Azure
// Create KeyClient
const credential = new DefaultAzureCredential(); 
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
  ); 

// Get key
const key = await client.getKey("MyKeyName");

if (key?.name) {

    // get encryption client
    const encryptClient = new CryptographyClient(key, credential);

    // encrypt data
    const encryptParams = { 
        algorithm: KnownEncryptionAlgorithms.RSAOaep256,
        plaintext: Buffer.from("Hello world!")
    }
    const encryptResult = await encryptClient.encrypt(encryptParams);
}

関連項目

次のステップ