mcpField
A
azure-keyvault-py

azure-keyvault-py

github.com/sickn33安全48.7k56 次安装今天更新
代码仓库

关于 azure-keyvault-py

面向 Python 的技能,用于通过 Azure Key Vault 管理机密、加密密钥和证书。内容涵盖同步与异步客户端、加密操作,以及常见的身份验证和恢复注意事项。

主要功能

  1. 01存储和获取机密
  2. 02创建和管理加密密钥
  3. 03执行加密、解密、签名和验证
  4. 04管理证书
  5. 05使用同步或异步客户端

适用场景

  1. 01从保管库获取应用机密
  2. 02使用托管密钥执行加密操作
  3. 03创建并查看证书

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-keyvault-py

安装后在 Claude Code 中输入/azure-keyvault-py确认已加载。

详细介绍

Azure Key Vault SDK for Python

用于安全存储和管理机密、加密密钥和证书。

安装

# Secrets
pip install azure-keyvault-secrets azure-identity

# Keys (cryptographic operations)
pip install azure-keyvault-keys azure-identity

# Certificates
pip install azure-keyvault-certificates azure-identity

# All
pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity

环境变量

AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/

变更与恢复边界

在写入、删除或清除前,确认具体的保管库、对象和版本,以及已批准的操作影响。独立代码片段会重复使用客户端名称;恢复和清除是两种替代方案,而非连续的清理步骤。清除可能不可逆,且可能受清除保护限制;导出证书机密可能会泄露私钥。请遵循最小权限原则,保护输出,并制定经过验证的依赖项与恢复计划。

机密

SecretClient 设置
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = SecretClient(vault_url=vault_url, credential=credential)
机密操作
# Set secret
secret = client.set_secret("database-password", "super-secret-value")
print(f"Created: {secret.name}, version: {secret.properties.version}")

# Get secret
secret = client.get_secret("database-password")
print(f"Retrieved secret: {secret.name}")  # Never print secret values.

# Get specific version
secret = client.get_secret("database-password", version="abc123")

# List secrets (names only, not values)
for secret_properties in client.list_properties_of_secrets():
    print(f"Secret: {secret_properties.name}")

# List versions
for version in client.list_properties_of_secret_versions("database-password"):
    print(f"Version: {version.version}, Created: {version.created_on}")

# Delete secret (soft delete)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()

# Purge (permanent delete, if soft-delete enabled)
client.purge_deleted_secret("database-password")

# Recover deleted secret
client.begin_recover_deleted_secret("database-password").result()

密钥

KeyClient 设置
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = KeyClient(vault_url=vault_url, credential=credential)
密钥操作
from azure.keyvault.keys import KeyType

# Create RSA key
rsa_key = client.create_rsa_key("rsa-key", size=2048)

# Create EC key
ec_key = client.create_ec_key("ec-key", curve="P-256")

# Get key
key = client.get_key("rsa-key")
print(f"Key type: {key.key_type}")

# List keys
for key_properties in client.list_properties_of_keys():
    print(f"Key: {key_properties.name}")

# Delete key
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()
加密操作
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm

# Get crypto client for a specific key
crypto_client = CryptographyClient(key, credential=credential)
# Or from key ID
crypto_client = CryptographyClient(
    "https://<vault>.vault.azure.net/keys/<key-name>/<version>",
    credential=credential
)

# Encrypt
plaintext = b"Hello, Key Vault!"
result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
ciphertext = result.ciphertext

# Decrypt
result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)
decrypted = result.plaintext

# Sign
from azure.keyvault.keys.crypto import SignatureAlgorithm
import hashlib

digest = hashlib.sha256(b"data to sign").digest()
result = crypto_client.sign(SignatureAlgorithm.rs256, digest)
signature = result.signature

# Verify
result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
print(f"Valid: {result.is_valid}")

证书

CertificateClient 设置
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient, CertificatePolicy

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = CertificateClient(vault_url=vault_url, credential=credential)
证书操作
# Create self-signed certificate
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()

# Get certificate
certificate = client.get_certificate("my-cert")
print(f"Thumbprint: {certificate.properties.x509_thumbprint.hex()}")

# Get certificate with private key (as secret)
from azure.keyvault.secrets import SecretClient
secret_client = SecretClient(vault_url=vault_url, credential=credential)
cert_secret = secret_client.get_secret("my-cert")
# cert_secret.value contains PEM or PKCS12

# List certificates
for cert in client.list_properties_of_certificates():
    print(f"Certificate: {cert.name}")

# Delete certificate
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()

客户端类型表

客户端包用途
SecretClientazure-keyvault-secrets存储/检索机密
KeyClientazure-keyvault-keys管理加密密钥
CryptographyClientazure-keyvault-keys加密/解密/签名/验证
CertificateClientazure-keyvault-certificates管理证书

异步客户端

from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.secrets.aio import SecretClient

async def get_secret():
    credential = DefaultAzureCredential()
    client = SecretClient(vault_url=vault_url, credential=credential)
    
    async with client:
        secret = await client.get_secret("my-secret")
        # Consume the value only in the authorized application; do not print it.

import asyncio
asyncio.run(get_secret())

错误处理

from azure.core.exceptions import ResourceNotFoundError, HttpResponseError

try:
    secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
    print("Secret not found")
except HttpResponseError as e:
    if e.status_code == 403:
        print("Access denied - check RBAC permissions")
    raise

最佳实践

  1. 使用 DefaultAzureCredential 进行身份验证
  2. 在托管于 Azure 的应用程序中使用托管标识
  3. 启用软删除以便恢复(默认已启用)
  4. 使用 RBAC 而非访问策略进行细粒度控制
  5. 使用版本控制定期轮换机密
  6. 在 App Service/Functions 配置中使用 Key Vault 引用
  7. 适当缓存机密以减少 API 调用
  8. 在高吞吐量场景中使用异步客户端

适用场景

当需要执行概述中描述的工作流或操作时,可使用此技能。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 请勿将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown