azure-keyvault-secrets-ts — скилл Claude Code: как установить
Скилл обучает ИИ-агента безопасно сохранять, извлекать и удалять секреты или криптографические ключи в Azure Key Vault через официальные пакеты для TypeScript.
npx skills add microsoft/skills --skill azure-keyvault-secrets-ts -a claude-codeЧто делает azure-keyvault-secrets-ts
Скилл добавляет в контекст агента готовые шаблоны работы с библиотеками @azure/keyvault-secrets, @azure/identity и @azure/keyvault-keys. Он задаёт паттерны аутентификации через DefaultAzureCredential для локальной разработки или ManagedIdentityCredential для продакшена.
Ассистент получает точные примеры чтения версий секретов, настройки мягкого удаления, восстановления значений и ротации ключей RSA или Elliptic Curve. Также внутри есть код для шифрования, верификации подписей через CryptographyClient и создания резервных копий хранилища.
В браузере эти библиотеки не работают из-за прямой привязки к среде Node.js. Для запуска в продакшене потребуется переменная AZURE_TOKEN_CREDENTIALS или прямое указание ManagedIdentityCredential.
Какие задачи решает
- сохранить конфигурационные параметры и токены в Azure Key Vault
- настроить безопасную аутентификацию через
DefaultAzureCredential - реализовать мягкое удаление и восстановление секретов
- настроить автоматическую политику ротации RSA-ключей
- зашифровать полезную нагрузку с помощью
CryptographyClient
Примеры запросов агенту
- Напиши TypeScript-функцию для мягкого удаления и восстановления секрета из Azure Key Vault.
- Покажи, как настроить аутентификацию через
ManagedIdentityCredentialи прочитать последнюю версию секрета. - Создай клиент
CryptographyClientи настрой шифрование данных по алгоритму RSA-OAEP.
Как установить azure-keyvault-secrets-ts
1Через Skills CLI (Vercel)
npx skills add microsoft/skills --skill azure-keyvault-secrets-ts -a claude-code2Вручную: положить файлы
~/.claude/skills/azure-keyvault-secrets-ts/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/azure-keyvault-secrets-ts/
Вручную: положить файлы
.agents/skills/azure-keyvault-secrets-ts/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/azure-keyvault-secrets-ts/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install microsoft/skills azure-keyvault-secrets-ts2Вручную: положить файлы
.github/skills/azure-keyvault-secrets-ts/SKILL.mdКомандой платформы
gemini skills install https://github.com/microsoft/skills --path .github/plugins/azure-sdk-typescript/skills/azure-keyvault-secrets-tsВручную: положить файлы
.devin/skills/azure-keyvault-secrets-ts/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о azure-keyvault-secrets-ts
Как установить azure-keyvault-secrets-ts в Claude Code?
Выполните в терминале команду npx skills add microsoft/skills --skill azure-keyvault-secrets-ts -a claude-code. Также можно вручную поместить файл инструкции по пути ~/.claude/skills/azure-keyvault-secrets-ts/SKILL.md.
Что делает скилл azure-keyvault-secrets-ts?
Он снабжает ассистента инструкциями и примерами кода для работы с секретами, ключами и криптографией Azure Key Vault в Node.js.
Можно ли использовать эти примеры во фронтенд-коде для браузера?
Нет, SDK от Microsoft предназначен исключительно для серверной среды Node.js. В браузерном коде такие операции с хранилищем не поддерживаются.
Исходный текст
SKILL.md · MIT
---
name: azure-keyvault-secrets-ts
description: Manage secrets using Azure Key Vault Secrets SDK for JavaScript (@azure/keyvault-secrets). Use when storing and retrieving application secrets or configuration values.
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
package: '@azure/keyvault-secrets'
---
# Azure Key Vault Secrets SDK for TypeScript
Manage secrets with Azure Key Vault.
## Installation
```bash
# Secrets SDK
npm install @azure/keyvault-secrets @azure/identity
```
## Environment Variables
```bash
KEY_VAULT_URL=https://<vault-name>.vault.azure.net
# Or
AZURE_KEYVAULT_NAME=<vault-name>
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```
## Authentication
```typescript
import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/javascript/api/overview/azure/identity-readme?view=azure-node-latest#credential-classes
// const credential = new ManagedIdentityCredential();
const vaultUrl = `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`;
const keyClient = new KeyClient(vaultUrl, credential);
const secretClient = new SecretClient(vaultUrl, credential);
```
## Secrets Operations
### Create/Set Secret
```typescript
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 Secret
```typescript
// Get latest version
const secret = await secretClient.getSecret("MySecret");
console.log(secret.value);
// Get specific version
const specificSecret = await secretClient.getSecret("MySecret", {
version: secret.properties.version
});
```
### List Secrets
```typescript
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);
}
```
### Delete Secret
```typescript
// 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();
```
## Keys Operations
### Create Keys
```typescript
// 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"]
});
```
### Get Key
```typescript
const key = await keyClient.getKey("MyKey");
console.log(key.name, key.keyType);
```
### List Keys
```typescript
for await (const keyProperties of keyClient.listPropertiesOfKeys()) {
console.log(keyProperties.name);
}
```
### Rotate Key
```typescript
// Manual rotation
const rotatedKey = await keyClient.rotateKey("MyKey");
// Set rotation policy
await keyClient.updateKeyRotationPolicy("MyKey", {
lifetimeActions: [{ action: "Rotate", timeBeforeExpiry: "P30D" }],
expiresIn: "P90D"
});
```
### Delete Key
```typescript
const deletePoller = await keyClient.beginDeleteKey("MyKey");
await deletePoller.pollUntilDone();
// Purge
await keyClient.purgeDeletedKey("MyKey");
```
## Cryptographic Operations
### Create CryptographyClient
```typescript
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/Decrypt
```typescript
// 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
});
console.log(decryptResult.result.toString());
```
### Sign/Verify
```typescript
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/Unwrap Keys
```typescript
// 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 and Restore
```typescript
// Backup
const keyBackup = await keyClient.backupKey("MyKey");
const secretBackup = await secretClient.backupSecret("MySecret");
// Restore (can restore to different vault)
const restoredKey = await keyClient.restoreKeyBackup(keyBackup!);
const restoredSecret = await secretClient.restoreSecretBackup(secretBackup!);
```
## Key Types
```typescript
import {
KeyClient,
KeyVaultKey,
KeyProperties,
DeletedKey,
CryptographyClient,
KnownEncryptionAlgorithms,
KnownSignatureAlgorithms
} from "@azure/keyvault-keys";
import {
SecretClient,
KeyVaultSecret,
SecretProperties,
DeletedSecret
} from "@azure/keyvault-secrets";
```
## Error Handling
```typescript
try {
const secret = await secretClient.getSecret("NonExistent");
} catch (error: any) {
if (error.code === "SecretNotFound") {
console.log("Secret does not exist");
} else {
throw error;
}
}
```
## Best Practices
1. **Use `DefaultAzureCredential` for local development; use `ManagedIdentityCredential` or `WorkloadIdentityCredential` for production**
2. **Enable soft-delete** - Required for production vaults
3. **Set expiration dates** - On both keys and secrets
4. **Use key rotation policies** - Automate key rotation
5. **Limit key operations** - Only grant needed operations (encrypt, sign, etc.)
6. **Browser not supported** - These SDKs are Node.js only
© Microsoft · MIT · microsoft/skills