☰
【研发类-框架和库Skills】azure-keyvault-keys-ts 技能
2026/10/3 8:40:33 网站建设 项目流程

使用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;
}
}

最佳实践

  1. 使用DefaultAzureCredential:在开发和生产环境中都能工作
  2. 启用软删除:生产环境保管库必须启用
  3. 设置过期日期:密钥和机密都应设置过期日期
  4. 使用密钥轮换策略:自动化密钥轮换
  5. 限制密钥操作:只授予需要的操作(encrypt、sign等)
  6. 不支持浏览器:这些SDK仅支持Node.js

注意事项

  • 此技能仅适用于任务明确匹配上述范围的情况
  • 输出不应替代环境特定的验证、测试或专家审查
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询