Cofre de Chaves do Azure para IA: objetos, SDK, rotação e cache
Voltar para a trilha AI-200
AI-200Capítulo 21

Estudo para a Certificação Microsoft AI-200

Cofre de Chaves do Azure para IA: objetos, SDK, rotação e cache

Centralize segredos, chaves e certificados, autentique sem credenciais armazenadas, recupere e versione segredos com o SDK do Python, faça rotação sem indisponibilidade e mantenha cache com atualização controlada.

Tempo de estudo sugerido: 125 minutos • Nível intermediário • Reescrita autoral completa com versão resumida de cada tópico, avaliação comentada e laboratório Python guiado

Escudo neon Microsoft Certified AI-200 para segredos do Cofre de Chaves do Azure, SDK, versionamento, rotação e cache

1. Cenário e objetivos de aprendizagem

Um RAG cria embeddings com o , lê vetores do e grava documentos processados no . Desenvolvimento, homologação e produção usam credenciais diferentes. Manter strings de conexão e chaves de em arquivos de ambiente enviados ao repositório expõe os valores, enquanto alterar uma credencial comprometida por reimplantação dificulta a meta de quatro horas sem indisponibilidade.

  • Selecionar o objeto correto do para segredo, chave criptográfica ou certificado.
  • Autenticar com e autorizar pelo do com privilégio mínimo.
  • Recuperar valores e pelos clientes síncrono e assíncrono do do Python.
  • Usar versões, rotação, repetição e invalidação de para transições seguras.
  • Reduzir chamadas ao cofre sem prolongar a vida de uma credencial comprometida.

Resumo rápido

O desenho substitui credenciais no código por um repositório central auditável e trata rotação, transição e atualização do como partes da arquitetura.

2. Recursos, camadas e interfaces do

O do armazena segredos, chaves e certificados e criptografa os . O autentica, e o do autoriza operações. Aplicativos podem usar , CLI do , portal ou SDKs compatíveis para Python, .NET, Java, JavaScript e Go.

Escolha de proteção
OpçãoProteção de chavesUso indicado
Standard e curva elíptica protegidas por software; validação 140-2 Nível 1Segredos e cargas com chaves de software
PremiumAcrescenta chaves em ; novas versões usam a plataforma 140-3 Nível 3Políticas ou cargas reguladas que exigem material em
GerenciadoRecurso separado que guarda somente chaves protegidas por Gerenciamento dedicado e de alta escala; não armazena segredos nem certificados
Cofre de Chaves organiza segredos, chaves e certificados com proteção Standard ou Premium
O tipo de objeto define operações e ciclo de vida; a camada define a proteção do material criptográfico.

Resumo rápido

Cofres armazenam três tipos de objeto; Standard e Premium diferem sobretudo na proteção das chaves, enquanto Gerenciado é um serviço separado e exclusivo para chaves.

3. Segredos: valores opacos com

Um segredo é uma cadeia opaca de até 25 KB para chaves de , senhas, , strings de conexão, chaves SSH privadas ou credenciais compostas pequenas. O serviço não interpreta o valor. content_type, propriedades da versão e tags documentam formato, responsável, ambiente e política de rotação.

Não use o cofre como banco de configuração ou conteúdo. , nomes de serviço e feature pertencem à ; cargas grandes pertencem ao do com criptografia adequada. Como quem lista pode ver tags, elas nunca devem conter credenciais.

Resumo rápido

Segredos são cadeias sensíveis pequenas; descrevem o objeto, mas configurações comuns e conteúdo volumoso ficam em outros armazenamentos.

4. Chaves: criptografia sem exportar o material

Chaves executam criptografia, descriptografia, assinatura, verificação e encapsulamento. Operações no servidor mantêm a chave privada dentro do limite do serviço. por software admite 2.048, 3.072 e 4.096 bits; EC admite P-256, P-384, P-521 e secp256k1/P-256K. Premium acrescenta variantes . Chaves simétricas oct- continuam em e carregam as limitações desse estágio.

Escolha uma chave, e não um segredo, quando um serviço do precisar de chave gerenciada pelo cliente, quando o aplicativo precisar assinar ou encapsular remotamente ou quando a política exigir material não exportável.

Resumo rápido

Uma chave oferece operações criptográficas controladas sem expor seu material privado protegido.

5. Certificados e os objetos de chave e segredo vinculados

Um certificado do gerencia e a chave privada correspondente, incluindo emissão, renovação, revogação e integração com autoridade certificadora para ou mútuo. Criar ou importar um certificado também gera uma chave e uma representação em segredo; por isso a leitura da chave privada exige uma função cuidadosamente escolhida.

Use o objeto certificado para credenciais com ciclo de vida, em vez de guardar um pacote como segredo genérico. Assim permanecem disponíveis política, emissor, renovação e versões.

Resumo rápido

Certificados adicionam gerenciamento e criam objetos relacionados; o acesso à chave privada deve ser restrito.

6. Limites do cofre, nomes e tags

Um limite prático é um cofre por aplicativo, região e ambiente. Separar desenvolvimento, pré-produção e produção reduz o raio de impacto e simplifica funções. Uma identidade comprometida em desenvolvimento não deve descobrir credenciais de produção.

  • O nome do cofre é globalmente exclusivo, tem 3–24 caracteres, começa com letra, termina com letra ou dígito, aceita alfanuméricos e hífens e proíbe hífens consecutivos.
  • Use nomes descritivos como cosmosdb-connection-string e openai--key.
  • Cada segredo admite até 15 tags; os limites atuais são 512 caracteres no nome e 256 no valor.
  • Ambiente, equipe, aplicativo, política de rotação e classificação são tags úteis; o valor secreto nunca é.

Resumo rápido

Cofres separados criam limites de segurança; nomes consistentes e tags não sensíveis tornam o inventário operável.

7. do , plano de controle e plano de dados

O plano de controle cria e configura o recurso pelo . O plano de dados lê e altera segredos, chaves e certificados no do cofre. Contributor gerencia o recurso, mas não lê valores no plano de dados.

Funções internas representativas
FunçãoUso adequado
Secrets UserLer valores de segredos, inclusive a parte secreta de certificado com chave privada; indicada ao runtime
Secrets OfficerGerenciar todo o ciclo dos segredos, exceto permissões; indicada a operadores ou automação controlada
ReaderLer do cofre e dos objetos, sem valores sensíveis nem material de chave
AdministratorExecutar todas as operações do plano de dados; não gerencia o recurso nem atribuições
ContributorGerenciar apenas o recurso no plano de controle; sem acesso aos dados

Prefira do às políticas de acesso herdadas, atribua no escopo do cofre, use para administração just-in-time e evite concessões amplas na assinatura. Nas versões atuais da , é o modelo padrão de cofres recém-criados.

Resumo rápido

A identidade autentica; a função no plano de dados autoriza as operações exatas, e Contributor no plano de controle não lê segredos.

8. e cadeia atual de credenciais

Uma permite que , , , e outros recursos autentiquem sem segredo de cliente. Conceda Secrets User quando o aplicativo apenas lê em runtime.

DefaultAzureCredential ajuda o mesmo código no ambiente local e no . A cadeia atual do Python pode tentar Environment, Workload Identity, , Shared , , CLI do , , Developer CLI, navegador interativo opcional e broker. A cadeia muda entre versões. Em produção, a Microsoft recomenda compreender o requisito e considerar ManagedIdentityCredential diretamente para reduzir ambiguidade e sobrecarga.

Identidade gerenciada autentica no Microsoft Entra ID e recebe função do plano de dados antes de ler o Cofre de Chaves
Identidade determina quem chama; do determina o que essa identidade pode fazer no cofre.

Resumo rápido

elimina credenciais armazenadas; DefaultAzureCredential conecta ambientes, mas a cadeia de produção deve ser explícita e observável.

9. Exclusão reversível, proteção contra limpeza e recuperação

A exclusão reversível vem habilitada por padrão e não pode ser desativada depois. Cofres e objetos excluídos permanecem recuperáveis pelo intervalo definido na criação: de 7 a 90 dias, com 90 como padrão. O intervalo não pode ser alterado depois.

A proteção contra limpeza é opcional, mas fortemente recomendada em produção. Quando habilitada, nem um principal privilegiado pode eliminar permanentemente o objeto antes do fim da retenção. Recuperar um cofre não restaura atribuições nem assinaturas da ; o runbook precisa recriá-las.

Resumo rápido

Exclusão reversível cria a janela, proteção contra limpeza a impõe, e a recuperação ainda exige reconstruir funções e assinaturas.

10. Instalar o do Python e criar SecretClient

-keyvault-secrets fornece SecretClient; -identity fornece credenciais. A segue ://<vault-name>.vault..net/. Crie credencial e cliente uma vez e reutilize-os para aproveitar de e conexões .

pip install azure-identity azure-keyvault-secrets

az keyvault show --name <vault-name> --query properties.vaultUri

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

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

client.set_secret(
    "openai-api-key",
    "<secret-value>",
    content_type="text/plain",
    tags={"environment": "production", "owner": "ai-platform"},
)

Resumo rápido

Instale identidade e segredos, crie um SecretClient reutilizável com e nunca registre o valor armazenado.

11. Recuperar valores, e inventário com segurança

get_secret(nome) sem versão retorna a versão habilitada mais recente. KeyVaultSecret contém value e propriedades como versão, criação, expiração, estado, tipo e tags. Registre apenas nome e versão.

list_properties_of_secrets() enumera sem buscar valores. Ele atende inventário e validação no startup, permitindo conferir todos os nomes antes de aceitar tráfego.

from azure.core.exceptions import (
    HttpResponseError, ResourceNotFoundError, ServiceRequestError
)

def read_secret(client: SecretClient, name: str) -> str:
    try:
        secret = client.get_secret(name)  # latest enabled version
        print(f"Loaded {name}, version={secret.properties.version}")
        return secret.value
    except ResourceNotFoundError as exc:
        raise RuntimeError(f"Missing secret: {name}") from exc
    except HttpResponseError as exc:
        raise RuntimeError(f"Key Vault rejected {name}: {exc.status_code}") from exc
    except ServiceRequestError as exc:
        raise RuntimeError("Network path to Key Vault failed") from exc

for props in client.list_properties_of_secrets():
    print(props.name, props.enabled, props.content_type, props.tags)

Resumo rápido

get_secret lê um valor; a listagem de propriedades descobre e valida objetos sem revelar o conteúdo.

12. Exceções, acesso assíncrono e ciclo do cliente

ResourceNotFoundError normalmente indica nome ou cofre incorreto. HttpResponseError cobre autenticação, autorização, limitação e outras respostas do serviço. ServiceRequestError aponta transporte, , ou conectividade. Classifique antes de repetir para não transformar erro permanente em tempestade de tentativas.

O cliente aio não bloqueia o event loop de FastAPI ou aiohttp. Cliente e credencial são gerenciadores de contexto assíncronos. Em serviço web, crie-os no startup, reutilize entre requisições e feche no shutdown.

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

async def load_runtime_secret() -> str:
    async with DefaultAzureCredential() as credential:
        async with SecretClient(
            vault_url="https://<vault-name>.vault.azure.net/",
            credential=credential,
        ) as client:
            secret = await client.get_secret("openai-api-key")
            return secret.value

# In a web service, create and reuse one client during app startup,
# then close the client and credential during app shutdown.

Resumo rápido

Diferencie ausência, rejeição e falha de transporte; aplicativos assíncronos devem reutilizar um cliente e encerrá-lo corretamente.

13. Versões, expiração, auditoria e reversão

Cada set_secret com o mesmo nome cria um identificador de versão imutável, sem sobrescrever o anterior. A leitura sem versão retorna a habilitada mais recente; a leitura versionada recupera o valor histórico exato. Listar propriedades mostra criação, expiração e estado para auditoria e .

expires_on é sinal de ciclo de vida, não bloqueio rígido: um segredo expirado ainda pode ser recuperado. Combine expiração com monitoramento e automação e só desabilite a versão antiga depois que todas as instâncias migrarem.

from datetime import datetime, timedelta, timezone

created = client.set_secret(
    "cosmosdb-connection-string",
    "<new-value>",
    expires_on=datetime.now(timezone.utc) + timedelta(days=90),
    tags={"rotation-policy": "90-days", "service": "cosmos-db"},
)

latest = client.get_secret("cosmosdb-connection-string")
exact = client.get_secret("cosmosdb-connection-string", created.properties.version)

for version in client.list_properties_of_secret_versions("cosmosdb-connection-string"):
    print(version.version, version.created_on, version.expires_on, version.enabled)

# Disable the previous version only after every instance has moved.
client.update_secret_properties(
    "cosmosdb-connection-string", "<old-version>", enabled=False
)

Resumo rápido

Versões permitem coexistência; expiração aciona operações, e desabilitar encerra o uso somente após implantação ou janela de reversão.

14. Rotação manual, pela e com duas credenciais

Estratégias
EstratégiaFluxoUso indicado
Manual ou CI/CDCriar no serviço-alvo, publicar nova versão e sinalizar ou reiniciar o aplicativoCredenciais externas alteradas raramente
Orientada a eventosSecretNearExpiry ocorre 30 dias antes; Function ou Logic App cria no alvo e grava nova versãoCredenciais repetíveis com de rotação
Duas credenciaisCriar/regenerar secundária, publicar, aguardar instâncias e regenerar a primária antiga do ou com duas chaves ativas
  1. Crie a credencial no serviço-alvo.
  2. Grave-a como nova versão no cofre.
  3. Invalide ou notifique instâncias.
  4. Confirme a adoção.
  5. Desabilite ou regenere a antiga e registre evidências.

Microsoft.KeyVault.SecretNewVersionCreated, SecretNearExpiry e SecretExpired são eventos atuais da . Expirar ou notificar não altera sozinho a credencial externa; o manipulador coordena serviço-alvo e cofre.

Resumo rápido

A capacidade do serviço-alvo define a estratégia; criar uma versão no cofre é apenas uma etapa da rotação completa.

15. Transição sem indisponibilidade e atualização após falha

Durante a rotação, instâncias podem manter valores diferentes no . O aplicativo tenta o serviço com a credencial atual, interpreta rejeição de autenticação como possível rotação, busca a versão habilitada mais recente e repete uma única vez. Isso evita loops e restringe a leitura extra ao momento da transição.

from azure.core.exceptions import HttpResponseError

def call_with_rotation_refresh(client, cache, name, downstream_call):
    value = cache.get(name)
    try:
        return downstream_call(value)
    except AuthenticationError:
        # One refresh and one retry: do not create an infinite loop.
        fresh = client.get_secret(name).value
        cache.put(name, fresh)
        return downstream_call(fresh)
Nova versão aciona invalidação de cache pela Grade de Eventos e falha de autenticação força uma atualização única
é o limite de segurança; eventos e atualização por falha encurtam a transição sem consultar o cofre a cada requisição.

Resumo rápido

Mantenha versões válidas durante a implantação, atualize uma vez em falha, observe a convergência e revogue a antiga no final.

16. por tempo, escopo e orçamento de atualização

Uma chamada remota pode levar dezenas de milissegundos; memória local, microssegundos. Ler o cofre em toda requisição de IA aumenta latência e pode atingir limites. Um baseado em relógio monotônico evita que ajustes do relógio do sistema corrompam a idade.

import time

class SecretCache:
    def __init__(self, client: SecretClient, ttl_seconds: int = 900):
        self.client = client
        self.ttl = ttl_seconds
        self.values: dict[str, tuple[str, float]] = {}

    def get(self, name: str) -> str:
        value = self.values.get(name)
        now = time.monotonic()
        if value and now - value[1] < self.ttl:
            return value[0]
        secret = self.client.get_secret(name)
        self.values[name] = (secret.value, now)
        return secret.value

    def invalidate(self, name: str) -> None:
        self.values.pop(name, None)
Escopo
EscopoVantagemCompromisso
Por processoSimples e rápido; ponto inicial recomendadoChamadas crescem com réplicas e cada processo tem sua janela
distribuído, como Uma atualização serve muitas instânciasAcrescenta operação e outro local protegido para o segredo
Pré-carregamento no startupSem leitura no caminho da requisição e valida nomes cedoPrecisa de atualização periódica ou por evento

Defina pelo atraso tolerável: 5–15 minutos mais para rotação frequente, 30–60 minutos para mudanças mensais ou trimestrais e preload com atualização de horas para valores quase estáticos. Em comprometimento, invalide ou reinicie imediatamente.

Resumo rápido

Comece com em memória, derive da tolerância a desatualização e associe um mecanismo explícito de atualização.

17. Invalidação, limites, e laboratório guiado

Assine Microsoft.KeyVault.SecretNewVersionCreated e encaminhe por , ou . Valide origem e tipo e remova somente o segredo citado. Preserve como fallback.

Os limites atuais por cofre, região e 10 segundos permitem 4.000 outras transações; CREATE secret, IMPORT certificate e IMPORT key compartilham 300 gravações. A assinatura agrega cinco vezes o limite por cofre. Em 429, aplique exponencial com jitter. Respostas persistentes indicam ausência de , curto ou manada na implantação; escalone o startup e reutilize clientes.

Laboratório Flask guiado

  1. Crie ou selecione um cofre com , exclusão reversível e proteção contra limpeza; use Secrets Officer para o desenvolvedor e Secrets User para a aplicação.
  2. Baixe ou clone um projeto inicial Flask, abra no , crie ambiente Python 3.12+, instale -identity, -keyvault-secrets e Flask e entre com a CLI do atualizada usando az login.
  3. Complete o aplicativo inicial com SecretClient, armazene segredos com tipo e tags e imprima somente nomes, versões e .
  4. Execute as operações: liste propriedades, leia um valor, crie segunda versão e confirme a leitura sem versão.
  5. Adicione de 15 minutos, faça várias leituras, rotacione, invalide e confirme o novo valor.
  6. Exercite as três exceções e observe repetição de 429 sem registrar segredos.
  7. Remova recursos e funções do laboratório.

Resumo rápido

Eventos aceleram atualização, cobre notificações perdidas, limites recompensam , e o laboratório valida todo o ciclo.

18. Revisão da avaliação, checklist e referências

Decisões da avaliação
QuestãoMelhor respostaMotivo
Runtime apenas lê valores Secrets UserLeitura sem administração do ciclo
Mesmo código usa CLI local e identidade em produçãoDefaultAzureCredentialA cadeia conecta ambientes
get_secret(nome) sem versãoVersão habilitada mais recenteA sem versão acompanha o valor atual
Serviço aceita duas chavesRotação com duas credenciaisSempre existe uma credencial válida
500 requisições/s e rotação a cada 90 dias em memória com de uma horaRemove leitura por requisição e limita desatualização

Checklist final

  • Separe cofre por aplicativo, região e ambiente.
  • Escolha o objeto pelas operações necessárias.
  • Use e de menor privilégio.
  • Habilite proteção contra limpeza e documente a recuperação.
  • Reutilize SecretClient e nunca registre valores.
  • Trate serviço-alvo, versão, e revogação como um fluxo.
  • Use , e uma atualização após falha.
  • Monitore acesso, expiração, 429, conclusão e desabilitação.
  1. O que é o do ?
  2. do para o
  3. Exclusão reversível do
  4. Início rápido do cliente Python
  5. Cadeia DefaultAzureCredential
  6. Eventos do
  7. Proteção de segredos
  8. Limites do
  9. Orientação sobre limitação

Resumo rápido

A solução completa alinha objeto, identidade, , recuperação, , versões, rotação, , limites e monitoramento em um projeto auditável.