关于 azure-keyvault-py
面向 Python 的技能,用于通过 Azure Key Vault 管理机密、加密密钥和证书。内容涵盖同步与异步客户端、加密操作,以及常见的身份验证和恢复注意事项。
主要功能
- 01存储和获取机密
- 02创建和管理加密密钥
- 03执行加密、解密、签名和验证
- 04管理证书
- 05使用同步或异步客户端
适用场景
- 01从保管库获取应用机密
- 02使用托管密钥执行加密操作
- 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()
客户端类型表
| 客户端 | 包 | 用途 |
|---|---|---|
SecretClient | azure-keyvault-secrets | 存储/检索机密 |
KeyClient | azure-keyvault-keys | 管理加密密钥 |
CryptographyClient | azure-keyvault-keys | 加密/解密/签名/验证 |
CertificateClient | azure-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
最佳实践
- 使用 DefaultAzureCredential 进行身份验证
- 在托管于 Azure 的应用程序中使用托管标识
- 启用软删除以便恢复(默认已启用)
- 使用 RBAC 而非访问策略进行细粒度控制
- 使用版本控制定期轮换机密
- 在 App Service/Functions 配置中使用 Key Vault 引用
- 适当缓存机密以减少 API 调用
- 在高吞吐量场景中使用异步客户端
适用场景
当需要执行概述中描述的工作流或操作时,可使用此技能。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 请勿将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。
评论
支持 Markdown