opção
LarLar Skill Segurança azure-keyvault-py

azure-keyvault-py

microsoft/skills microsoft/skills

Gerencie segredos, chaves criptográficas e certificados no Azure Key Vault usando o SDK do Python.

...Expandir tudo
9
Tempo atualizado 12 de Setembro de 2026

SDK do Azure Key Vault para Python

Armazenamento seguro e gerenciamento de segredos, chaves criptográficas e certificados.

Instalação

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

# Chaves (operações criptográficas)
pip install azure-keyvault-keys azure-identity

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

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

Variáveis de Ambiente

AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/  # Obrigatório para todos os métodos de autenticação
AZURE_TOKEN_CREDENTIALS=prod # Obrigatório apenas se DefaultAzureCredential for usado em produção
</vault-name>

Autenticação e Ciclo de Vida

🔑 Duas regras se aplicam a todas as amostras de código abaixo:

  1. Prefira DefaultAzureCredential. Ele funciona localmente (Azure CLI / VS Code / Developer CLI) e no Azure (identidade gerenciada, identidade de carga de trabalho) sem alteração de código. Evite strings de conexão, contas/chaves de API — elas contornam a auditoria e a rotação do Entra.
    • Desenvolvimento local: DefaultAzureCredential funciona como está.
    • Produção: defina AZURE_TOKEN_CREDENTIALS=prod (ou AZURE_TOKEN_CREDENTIALS=<specific_credential></specific_credential>) para restringir a cadeia de credenciais a credenciais seguras para produção.
  2. Envolva cada cliente em um gerenciador de contexto para que transportes HTTP, soquetes e caches de token sejam liberados de forma determinística:
    • Síncrono: with <client>(...) as client:</client>
    • Assíncrono: async with <client>(...) as client:</client> e async with DefaultAzureCredential() as credential: (de azure.identity.aio)

Os trechos de código podem abreviar esta configuração, mas o código de produção deve seguir sempre ambas as regras.

Segredos

Configuração do SecretClient

from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

# Desenvolvimento local: DefaultAzureCredential. Produção: defina AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Ou use uma credencial específica diretamente em produção:
# Consulte https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

with SecretClient(vault_url=vault_url, credential=credential) as client:
    # Todas as operações de segredo ocorrem dentro deste bloco (veja os exemplos abaixo)
    ...
</vault-name></specific_credential>

Operações de Segredo

# Definir segredo
secret = client.set_secret("database-password", "super-secret-value")
print(f"Criado: {secret.name}, versão: {secret.properties.version}")

# Obter segredo
secret = client.get_secret("database-password")
print(f"Valor: {secret.value}")

# Obter versão específica
secret = client.get_secret("database-password", version="abc123")

# Listar segredos (apenas nomes, não valores)
for secret_properties in client.list_properties_of_secrets():
    print(f"Segredo: {secret_properties.name}")

# Listar versões
for version in client.list_properties_of_secret_versions("database-password"):
    print(f"Versão: {version.version}, Criado: {version.created_on}")

# Excluir segredo (exclusão suave)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()

# Purgar (exclusão permanente, se a exclusão suave estiver habilitada)
client.purge_deleted_secret("database-password")

# Recuperar segredo excluído
client.begin_recover_deleted_secret("database-password").result()

Chaves

Configuração do KeyClient

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

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

with KeyClient(vault_url=vault_url, credential=credential) as client:
    # Todas as operações de chave ocorrem dentro deste bloco (veja os exemplos abaixo)
    ...
</vault-name>

Operações de Chave

from azure.keyvault.keys import KeyType

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

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

# Obter chave
key = client.get_key("rsa-key")
print(f"Tipo de chave: {key.key_type}")

# Listar chaves
for key_properties in client.list_properties_of_keys():
    print(f"Chave: {key_properties.name}")

# Excluir chave
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()

Operações Criptográficas

from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm

# Obter cliente criptográfico para uma chave específica
# crypto_client = CryptographyClient(key, credential=credential)
# Ou a partir do ID da chave
with CryptographyClient(
    "https://<vault>.vault.azure.net/keys/<key-name>/<version>",
    credential=credential
) as crypto_client:
    # Criptografar
    plaintext = b"Hello, Key Vault!"
    result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
    ciphertext = result.ciphertext

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

    # Assinar
    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

    # Verificar
    result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
    print(f"Válido: {result.is_valid}")
</version></key-name></vault>

Certificados

Configuração do CertificateClient

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

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

with CertificateClient(vault_url=vault_url, credential=credential) as client:
    # Todas as operações de certificado ocorrem dentro deste bloco (veja os exemplos abaixo)
    ...
</vault-name>

Operações de Certificado

# Criar certificado autoassinado
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()

# Obter certificado
certificate = client.get_certificate("my-cert")
print(f"Impressão digital: {certificate.properties.x509_thumbprint.hex()}")

# Obter certificado com chave privada (como segredo)
from azure.keyvault.secrets import SecretClient
with SecretClient(vault_url=vault_url, credential=credential) as secret_client:
    cert_secret = secret_client.get_secret("my-cert")
    # cert_secret.value contém PEM ou PKCS12

# Listar certificados
for cert in client.list_properties_of_certificates():
    print(f"Certificado: {cert.name}")

# Excluir certificado
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()

Tabela de Tipos de Cliente

ClientePacoteFinalidade
`SecretClient``azure-keyvault-secrets`Armazenar/recuperar segredos
`KeyClient``azure-keyvault-keys`Gerenciar chaves criptográficas
`CryptographyClient``azure-keyvault-keys`Criptografar/descriptografar/assinar/verificar
`CertificateClient``azure-keyvault-certificates`Gerenciar certificados

Clientes Assíncronos

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

async def get_secret():
    async with DefaultAzureCredential() as credential:
        async with SecretClient(vault_url=vault_url, credential=credential) as client:
            secret = await client.get_secret("my-secret")
            print(secret.value)

import asyncio
asyncio.run(get_secret())

Tratamento de Erros

from azure.core.exceptions import ResourceNotFoundError, HttpResponseError

try:
    secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
    print("Segredo não encontrado")
except HttpResponseError as e:
    if e.status_code == 403:
        print("Acesso negado - verifique as permissões de RBAC")
    raise

Melhores Práticas

  1. Escolha síncrono OU assíncrono e mantenha a consistência. Não misture clientes síncronos azure.xxx com clientes assíncronos azure.xxx.aio no mesmo caminho de chamada. Escolha um modo por módulo.
  2. Sempre use gerenciadores de contexto para clientes e credenciais assíncronas. Envolva cada cliente em with Client(...) as client: (síncrono) ou async with Client(...) as client: (assíncrono). Para DefaultAzureCredential assíncrono de azure.identity.aio, também use async with credential: para garantir que tokens e transportes sejam limpos.
  3. Use DefaultAzureCredential para código que é executado localmente. Use uma credencial de token específica para código que é executado no Azure.
  4. Use identidade gerenciada em aplicativos hospedados no Azure
  5. Habilite a exclusão suave para recuperação (habilitada por padrão)
  6. Use RBAC em vez de políticas de acesso para controle fino
  7. Rodeie segredos regularmente usando versionamento
  8. Use referências do Key Vault na configuração do App Service/Functions
  9. Armazene em cache os segredos adequadamente para reduzir chamadas de API
  10. Use clientes assíncronos para cenários de alta taxa de transferência
Ver no GitHub
---
name: azure-keyvault-py
description: Manage secrets, cryptographic keys, and certificates in Azure Key Vault using the Python SDK.
license: MIT
---

# Azure Key Vault SDK for Python

Secure storage and management for secrets, cryptographic keys, and certificates.

## Installation

```bash
# 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
```

## Environment Variables

```bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/  # Required for all auth methods
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```

## Authentication & Lifecycle

> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
>    - Local dev: `DefaultAzureCredential` works as-is.
>    - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
>    - Sync: `with <Client>(...) as client:`
>    - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.

## Secrets

### SecretClient Setup

```python
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

with SecretClient(vault_url=vault_url, credential=credential) as client:
    # All secret operations go inside this block (see examples below)
    ...
```

### Secret Operations

```python
# 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"Value: {secret.value}")

# 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()
```

## Keys

### KeyClient Setup

```python
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient

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

with KeyClient(vault_url=vault_url, credential=credential) as client:
    # All key operations go inside this block (see examples below)
    ...
```

### Key Operations

```python
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()
```

### Cryptographic Operations

```python
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
with CryptographyClient(
    "https://<vault>.vault.azure.net/keys/<key-name>/<version>",
    credential=credential
) as crypto_client:
    # 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}")
```

## Certificates

### CertificateClient Setup

```python
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient, CertificatePolicy

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

with CertificateClient(vault_url=vault_url, credential=credential) as client:
    # All certificate operations go inside this block (see examples below)
    ...
```

### Certificate Operations

```python
# 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
with SecretClient(vault_url=vault_url, credential=credential) as secret_client:
    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()
```

## Client Types Table

| Client | Package | Purpose |
|--------|---------|---------|
| `SecretClient` | `azure-keyvault-secrets` | Store/retrieve secrets |
| `KeyClient` | `azure-keyvault-keys` | Manage cryptographic keys |
| `CryptographyClient` | `azure-keyvault-keys` | Encrypt/decrypt/sign/verify |
| `CertificateClient` | `azure-keyvault-certificates` | Manage certificates |

## Async Clients

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

async def get_secret():
    async with DefaultAzureCredential() as credential:
        async with SecretClient(vault_url=vault_url, credential=credential) as client:
            secret = await client.get_secret("my-secret")
            print(secret.value)

import asyncio
asyncio.run(get_secret())
```

## Error Handling

```python
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
```

## Best Practices

1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use `DefaultAzureCredential`** for code that runs locally. Use a specific token credential for code that runs in Azure.
4. **Use managed identity** in Azure-hosted applications
5. **Enable soft-delete** for recovery (enabled by default)
6. **Use RBAC** over access policies for fine-grained control
7. **Rotate secrets** regularly using versioning
8. **Use Key Vault references** in App Service/Functions config
9. **Cache secrets** appropriately to reduce API calls
10. **Use async clients** for high-throughput scenarios

Todos os arquivos

0 arquivos

Instalar azure-keyvault-py

Baixe e extraia os arquivos de habilidade para o diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-keyvault-py # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta de habilidades para .claude/skills/ O Claude detectará e usará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

gmgn-portfolio
Tempo atualizado 1 de Julho de 2026
zeroize-audit
Tempo atualizado 1 de Julho de 2026
device-integrity
Tempo atualizado 29 de Junho de 2026
flutter-use-http-package
Tempo atualizado 30 de Junho de 2026
OR