azure-keyvault-secrets-ts について
Azure Key Vaultのシークレットとキーを管理するTypeScript SDKです。ライフサイクル操作に加え、暗号化、署名、キーのラップなどの暗号処理にも対応します。
主な機能
- 01シークレットの作成、取得、一覧表示、削除
- 02キーの作成、一覧表示、ローテーション、削除
- 03暗号化、復号、署名、検証
- 04キーのラップとアンラップ
- 05シークレットとキーのバックアップおよび復元
活用シーン
- 01Key Vaultでのアプリケーションシークレット管理
- 02キーのローテーションポリシー設定
- 03Vaultキーを使った暗号処理
- 04Vaultオブジェクトのバックアップと復元
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-keyvault-secrets-tsインストール後、Claude Code で/azure-keyvault-secrets-tsを入力して読み込まれたか確認します。
詳細
TypeScript 向け Azure Key Vault Secrets SDK
Azure Key Vault を使用してシークレットを管理します。
インストール
# Secrets SDK
npm install @azure/keyvault-secrets @azure/keyvault-keys @azure/identity
環境変数
KEY_VAULT_URL=https://<vault-name>.vault.azure.net
# Or
AZURE_KEYVAULT_NAME=<vault-name>
認証
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
import { KeyClient } from "@azure/keyvault-keys";
const credential = new DefaultAzureCredential();
const vaultUrl = `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`;
const keyClient = new KeyClient(vaultUrl, credential);
const secretClient = new SecretClient(vaultUrl, credential);
実行上の境界
各例は独立した断片であり、同じ名前を再利用しています。1 つのスクリプトに連結しないでください。承認済みのテスト用コンテナーと最小権限の ID を使用してください。パージは取り消せず、パージ保護によってブロックされる場合があります。キーの削除やローテーションは、依存するワークロードを停止させる可能性があります。変更を加える前に、対象のコンテナー/オブジェクト/バージョンと復旧計画を確認してください。例にある有効期限は過去の日付であり、実運用での推奨値ではありません。
シークレット操作
シークレットの作成/設定
const secret = await secretClient.setSecret("MySecret", "secret-value");
// With attributes
const secretWithAttrs = await secretClient.setSecret("MySecret", "value", {
enabled: true,
expiresOn: new Date("2025-12-31"),
contentType: "application/json",
tags: { environment: "production" }
});
シークレットの取得
// Get latest version
const secret = await secretClient.getSecret("MySecret");
console.log(secret.name); // Never log secret values.
// Get specific version
const specificSecret = await secretClient.getSecret("MySecret", {
version: secret.properties.version
});
シークレットの一覧表示
for await (const secretProperties of secretClient.listPropertiesOfSecrets()) {
console.log(secretProperties.name);
}
// List versions
for await (const version of secretClient.listPropertiesOfSecretVersions("MySecret")) {
console.log(version.version);
}
シークレットの削除
// Soft delete
const deletePoller = await secretClient.beginDeleteSecret("MySecret");
await deletePoller.pollUntilDone();
// Purge (permanent)
await secretClient.purgeDeletedSecret("MySecret");
// Recover
const recoverPoller = await secretClient.beginRecoverDeletedSecret("MySecret");
await recoverPoller.pollUntilDone();
キー操作
キーの作成
// Generic key
const key = await keyClient.createKey("MyKey", "RSA");
// RSA key with size
const rsaKey = await keyClient.createRsaKey("MyRsaKey", { keySize: 2048 });
// Elliptic Curve key
const ecKey = await keyClient.createEcKey("MyEcKey", { curve: "P-256" });
// With attributes
const keyWithAttrs = await keyClient.createKey("MyKey", "RSA", {
enabled: true,
expiresOn: new Date("2025-12-31"),
tags: { purpose: "encryption" },
keyOps: ["encrypt", "decrypt", "sign", "verify"]
});
キーの取得
const key = await keyClient.getKey("MyKey");
console.log(key.name, key.keyType);
キーの一覧表示
for await (const keyProperties of keyClient.listPropertiesOfKeys()) {
console.log(keyProperties.name);
}
キーのローテーション
// Manual rotation
const rotatedKey = await keyClient.rotateKey("MyKey");
// Set rotation policy
await keyClient.updateKeyRotationPolicy("MyKey", {
lifetimeActions: [{ action: "Rotate", timeBeforeExpiry: "P30D" }],
expiresIn: "P90D"
});
キーの削除
const deletePoller = await keyClient.beginDeleteKey("MyKey");
await deletePoller.pollUntilDone();
// Purge
await keyClient.purgeDeletedKey("MyKey");
暗号化操作
CryptographyClient の作成
import { CryptographyClient } from "@azure/keyvault-keys";
// From key object
const cryptoClient = new CryptographyClient(key, credential);
// From key ID
const cryptoClient = new CryptographyClient(key.id!, credential);
暗号化/復号
// Encrypt
const encryptResult = await cryptoClient.encrypt({
algorithm: "RSA-OAEP",
plaintext: Buffer.from("My secret message")
});
// Decrypt
const decryptResult = await cryptoClient.decrypt({
algorithm: "RSA-OAEP",
ciphertext: encryptResult.result
});
// Use decrypted bytes only in the authorized application; do not log them.
署名/検証
import { createHash } from "node:crypto";
// Create digest
const hash = createHash("sha256").update("My message").digest();
// Sign
const signResult = await cryptoClient.sign("RS256", hash);
// Verify
const verifyResult = await cryptoClient.verify("RS256", hash, signResult.result);
console.log("Valid:", verifyResult.result);
キーのラップ/ラップ解除
// Wrap a key (encrypt it for storage)
const wrapResult = await cryptoClient.wrapKey("RSA-OAEP", Buffer.from("key-material"));
// Unwrap
const unwrapResult = await cryptoClient.unwrapKey("RSA-OAEP", wrapResult.result);
バックアップと復元
// Backup
const keyBackup = await keyClient.backupKey("MyKey");
const secretBackup = await secretClient.backupSecret("MySecret");
// Restore only within the same subscription and Azure geography.
const restoredKey = await keyClient.restoreKeyBackup(keyBackup!);
const restoredSecret = await secretClient.restoreSecretBackup(secretBackup!);
キーの種類
import {
KeyClient,
KeyVaultKey,
KeyProperties,
DeletedKey,
CryptographyClient,
KnownEncryptionAlgorithms,
KnownSignatureAlgorithms
} from "@azure/keyvault-keys";
import {
SecretClient,
KeyVaultSecret,
SecretProperties,
DeletedSecret
} from "@azure/keyvault-secrets";
エラー処理
try {
const secret = await secretClient.getSecret("NonExistent");
} catch (error: any) {
if (error.code === "SecretNotFound") {
console.log("Secret does not exist");
} else {
throw error;
}
}
ベストプラクティス
- DefaultAzureCredential を使用する - 開発環境と本番環境の両方で動作します
- 論理削除を有効にする - 本番環境のコンテナーでは必須です
- 有効期限を設定する - キーとシークレットの両方に設定します
- キーのローテーションポリシーを使用する - キーのローテーションを自動化します
- キー操作を制限する - 必要な操作(暗号化、署名など)のみを許可します
- ブラウザーはサポート対象外です - これらの SDK は Node.js 専用です
使用する場合
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記の範囲に明確に一致する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。
コメント
Markdown 対応