Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys.
Add this skill
npx mdskills install sickn33/azure-keyvault-keys-tsComprehensive reference with strong code examples and cryptographic operation coverage.
1---2name: azure-keyvault-keys-ts3description: Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys.4package: "@azure/keyvault-keys"5---67# Azure Key Vault Keys SDK for TypeScript89Manage cryptographic keys with Azure Key Vault.1011## Installation1213```bash14# Keys SDK15npm install @azure/keyvault-keys @azure/identity16```1718## Environment Variables1920```bash21KEY_VAULT_URL=https://<vault-name>.vault.azure.net22# Or23AZURE_KEYVAULT_NAME=<vault-name>24```2526## Authentication2728```typescript29import { DefaultAzureCredential } from "@azure/identity";30import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";3132const credential = new DefaultAzureCredential();33const vaultUrl = `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`;3435const keyClient = new KeyClient(vaultUrl, credential);36const secretClient = new SecretClient(vaultUrl, credential);37```3839## Secrets Operations4041### Create/Set Secret4243```typescript44const secret = await secretClient.setSecret("MySecret", "secret-value");4546// With attributes47const secretWithAttrs = await secretClient.setSecret("MySecret", "value", {48 enabled: true,49 expiresOn: new Date("2025-12-31"),50 contentType: "application/json",51 tags: { environment: "production" }52});53```5455### Get Secret5657```typescript58// Get latest version59const secret = await secretClient.getSecret("MySecret");60console.log(secret.value);6162// Get specific version63const specificSecret = await secretClient.getSecret("MySecret", {64 version: secret.properties.version65});66```6768### List Secrets6970```typescript71for await (const secretProperties of secretClient.listPropertiesOfSecrets()) {72 console.log(secretProperties.name);73}7475// List versions76for await (const version of secretClient.listPropertiesOfSecretVersions("MySecret")) {77 console.log(version.version);78}79```8081### Delete Secret8283```typescript84// Soft delete85const deletePoller = await secretClient.beginDeleteSecret("MySecret");86await deletePoller.pollUntilDone();8788// Purge (permanent)89await secretClient.purgeDeletedSecret("MySecret");9091// Recover92const recoverPoller = await secretClient.beginRecoverDeletedSecret("MySecret");93await recoverPoller.pollUntilDone();94```9596## Keys Operations9798### Create Keys99100```typescript101// Generic key102const key = await keyClient.createKey("MyKey", "RSA");103104// RSA key with size105const rsaKey = await keyClient.createRsaKey("MyRsaKey", { keySize: 2048 });106107// Elliptic Curve key108const ecKey = await keyClient.createEcKey("MyEcKey", { curve: "P-256" });109110// With attributes111const keyWithAttrs = await keyClient.createKey("MyKey", "RSA", {112 enabled: true,113 expiresOn: new Date("2025-12-31"),114 tags: { purpose: "encryption" },115 keyOps: ["encrypt", "decrypt", "sign", "verify"]116});117```118119### Get Key120121```typescript122const key = await keyClient.getKey("MyKey");123console.log(key.name, key.keyType);124```125126### List Keys127128```typescript129for await (const keyProperties of keyClient.listPropertiesOfKeys()) {130 console.log(keyProperties.name);131}132```133134### Rotate Key135136```typescript137// Manual rotation138const rotatedKey = await keyClient.rotateKey("MyKey");139140// Set rotation policy141await keyClient.updateKeyRotationPolicy("MyKey", {142 lifetimeActions: [{ action: "Rotate", timeBeforeExpiry: "P30D" }],143 expiresIn: "P90D"144});145```146147### Delete Key148149```typescript150const deletePoller = await keyClient.beginDeleteKey("MyKey");151await deletePoller.pollUntilDone();152153// Purge154await keyClient.purgeDeletedKey("MyKey");155```156157## Cryptographic Operations158159### Create CryptographyClient160161```typescript162import { CryptographyClient } from "@azure/keyvault-keys";163164// From key object165const cryptoClient = new CryptographyClient(key, credential);166167// From key ID168const cryptoClient = new CryptographyClient(key.id!, credential);169```170171### Encrypt/Decrypt172173```typescript174// Encrypt175const encryptResult = await cryptoClient.encrypt({176 algorithm: "RSA-OAEP",177 plaintext: Buffer.from("My secret message")178});179180// Decrypt181const decryptResult = await cryptoClient.decrypt({182 algorithm: "RSA-OAEP",183 ciphertext: encryptResult.result184});185186console.log(decryptResult.result.toString());187```188189### Sign/Verify190191```typescript192import { createHash } from "node:crypto";193194// Create digest195const hash = createHash("sha256").update("My message").digest();196197// Sign198const signResult = await cryptoClient.sign("RS256", hash);199200// Verify201const verifyResult = await cryptoClient.verify("RS256", hash, signResult.result);202console.log("Valid:", verifyResult.result);203```204205### Wrap/Unwrap Keys206207```typescript208// Wrap a key (encrypt it for storage)209const wrapResult = await cryptoClient.wrapKey("RSA-OAEP", Buffer.from("key-material"));210211// Unwrap212const unwrapResult = await cryptoClient.unwrapKey("RSA-OAEP", wrapResult.result);213```214215## Backup and Restore216217```typescript218// Backup219const keyBackup = await keyClient.backupKey("MyKey");220const secretBackup = await secretClient.backupSecret("MySecret");221222// Restore (can restore to different vault)223const restoredKey = await keyClient.restoreKeyBackup(keyBackup!);224const restoredSecret = await secretClient.restoreSecretBackup(secretBackup!);225```226227## Key Types228229```typescript230import {231 KeyClient,232 KeyVaultKey,233 KeyProperties,234 DeletedKey,235 CryptographyClient,236 KnownEncryptionAlgorithms,237 KnownSignatureAlgorithms238} from "@azure/keyvault-keys";239240import {241 SecretClient,242 KeyVaultSecret,243 SecretProperties,244 DeletedSecret245} from "@azure/keyvault-secrets";246```247248## Error Handling249250```typescript251try {252 const secret = await secretClient.getSecret("NonExistent");253} catch (error: any) {254 if (error.code === "SecretNotFound") {255 console.log("Secret does not exist");256 } else {257 throw error;258 }259}260```261262## Best Practices2632641. **Use DefaultAzureCredential** - Works across dev and production2652. **Enable soft-delete** - Required for production vaults2663. **Set expiration dates** - On both keys and secrets2674. **Use key rotation policies** - Automate key rotation2685. **Limit key operations** - Only grant needed operations (encrypt, sign, etc.)2696. **Browser not supported** - These SDKs are Node.js only270
Full transparency — inspect the skill content before installing.