使用Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys)管理加密密钥。用于创建、加密/解密、签名或轮换密钥。
📥 下载地址:
agentic-awesome-skills/skills/azure-keyvault-keys-ts at main · sickn33/agentic-awesome-skills · GitHub
技能概述
azure-keyvault-keys-ts 技能是一个专门用于TypeScript/JavaScript开发的Azure Key Vault Keys SDK技能包。它提供了使用Azure Key Vault管理加密密钥的完整功能。该技能包适用于需要在Node.js应用中实现密钥管理、加密操作的开发者。
主要功能
- 密钥管理:创建、获取、更新和删除密钥
- 密钥轮换:支持手动和自动密钥轮换策略
- 加密操作:加密、解密、签名、验证操作
- 密钥包装:包装和解包密钥
- 备份恢复:密钥备份和恢复功能
- 机密管理:同时支持Key Vault机密操作
触发条件
在以下情况下应该调用此技能:
- 用户需要在TypeScript/JavaScript应用中管理Azure Key Vault密钥
- 需要创建、加密/解密、签名或轮换密钥
- 需要实现密钥管理功能
- 需要执行加密操作
处理过程
1. 安装依赖
使用npm安装必要的包:
# Keys SDK
npm install @azure/keyvault-keys @azure/identity
2. 创建客户端
使用DefaultAzureCredential创建KeyClient:
import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } 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);
3. 创建密钥
创建不同类型的密钥:
// 通用密钥
const key = await keyClient.createKey("MyKey", "RSA");// RSA密钥(指定大小)
const rsaKey = await keyClient.createRsaKey("MyRsaKey", {
keySize: 2048
});// 椭圆曲线密钥
const ecKey = await keyClient.createEcKey("MyEcKey", {
curve: "P-256"
});// 带属性的密钥
const keyWithAttrs = await keyClient.createKey("MyKey", "RSA", {
enabled: true,
expiresOn: new Date("2025-12-31"),
tags: { purpose: "encryption" },
keyOps: ["encrypt", "decrypt", "sign", "verify"]
});
4. 加密操作
使用CryptographyClient执行加密操作:
import { CryptographyClient } from "@azure/keyvault-keys";
// 从密钥对象创建
const cryptoClient = new CryptographyClient(key, credential);// 加密
const encryptResult = await cryptoClient.encrypt({
algorithm: "RSA-OAEP",
plaintext: Buffer.from("My secret message")
});// 解密
const decryptResult = await cryptoClient.decrypt({
algorithm: "RSA-OAEP",
ciphertext: encryptResult.result
});console.log(decryptResult.result.toString());
输入要求
使用此技能时,用户需要提供:
- Key Vault URL:Key Vault的URL地址或名称
- 身份认证凭据:DefaultAzureCredential
- 密钥名称:要操作的密钥名称
- 密钥类型:创建密钥时需要的类型(RSA、EC等)
输出说明
技能将提供:
- 完整的TypeScript代码示例:包含密钥和机密操作的实现
- 加密操作示例:加密、解密、签名、验证的代码
- 配置指南:环境变量和连接配置的详细说明
- 最佳实践建议:关于密钥管理的安全建议
使用示例
示例1:机密操作
// 创建/设置机密
const secret = await secretClient.setSecret("MySecret", "secret-value", {
enabled: true,
expiresOn: new Date("2025-12-31"),
contentType: "application/json",
tags: { environment: "production" }
});// 获取机密
const secret = await secretClient.getSecret("MySecret");
console.log(secret.value);// 列出机密
for await (const secretProperties of secretClient.listPropertiesOfSecrets()) {
console.log(secretProperties.name);
}
示例2:签名和验证
import { createHash } from "node:crypto";
// 创建摘要
const hash = createHash("sha256").update("My message").digest();// 签名
const signResult = await cryptoClient.sign("RS256", hash);// 验证
const verifyResult = await cryptoClient.verify("RS256", hash, signResult.result);
console.log("Valid:", verifyResult.result);
示例3:密钥轮换
// 手动轮换
const rotatedKey = await keyClient.rotateKey("MyKey");// 设置轮换策略
await keyClient.updateKeyRotationPolicy("MyKey", {
lifetimeActions: [
{ action: "Rotate", timeBeforeExpiry: "P30D" }
],
expiresIn: "P90D"
});
示例4:备份和恢复
// 备份
const keyBackup = await keyClient.backupKey("MyKey");
const secretBackup = await secretClient.backupSecret("MySecret");// 恢复(可恢复到不同的保管库)
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:在开发和生产环境中都能工作
- 启用软删除:生产环境保管库必须启用
- 设置过期日期:密钥和机密都应设置过期日期
- 使用密钥轮换策略:自动化密钥轮换
- 限制密钥操作:只授予需要的操作(encrypt、sign等)
- 不支持浏览器:这些SDK仅支持Node.js
注意事项
- 此技能仅适用于任务明确匹配上述范围的情况
- 输出不应替代环境特定的验证、测试或专家审查
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清