1. Separar material, autorização e percurso
Uma equipa recebe AccessDenied durante o fecho de uma aplicação fictícia de posições. Antes de alterar a chave, identifica caller, operação, Região, KeyId e origem da autorização esperada. Uma chave utilizável pode coexistir com um grant ainda não propagado ou com contexto incorreto. Regista a alteração imediatamente anterior e se o erro ocorre no serviço integrado ou numa chamada direta. kms:ViaService pode limitar a utilização a um percurso de serviço suportado em nome do principal; executar uma CLI numa instância não reproduz necessariamente esse percurso. Um ensaio útil mantém as condições da aplicação e muda uma hipótese de cada vez. Evita acrescentar permissões amplas sem compreender qual condição rejeitou o pedido.
2. Criar, repetir e terminar um grant
Um grant recém-criado pode ainda não estar visível em todo o KMS. O grant token permite a sua utilização imediata em operações compatíveis, sem substituir credenciais ou remover constraints. Guarda a relação entre pedido e resposta para não confundir token e GrantId. Em retries equivalentes de CreateGrant, um Name estável evita duplicação quando os restantes parâmetros são iguais. Para grants a service principals, confirma os requisitos de SourceArn e autoridade de retirement na integração escolhida. No fim do ciclo, revogar ou retirar um grant não elimina a chave nem outras concessões. Também existe propagação na remoção: um ticket de incidente deve distinguir o comando aceite do efeito observado, com owner para confirmar contenção.
3. Duas origens de autoridade para delegar
Avalia CreateGrant como uma capacidade de delegar acesso. Quando a permissão vem de política, o criador pode conceder operações que não possui diretamente; usa condições para limitar o que pode delegar. Quando a criação é autorizada por outro grant, o grant filho fica limitado pelas operações e constraints dessa origem. Num exercício de revisão, escreve a origem da permissão ao lado de cada proposta: política administrativa, grant de uma integração ou combinação a investigar. Se a única origem permitir Decrypt e exigir Project=Ledger, não aproves um filho com Encrypt e sem contexto. A revisão deve explicar a fronteira que se conserva. Não basta verificar que o nome CreateGrant aparece em algum documento da conta.
4. Contexto como condição e como AAD
EncryptionContextEquals compara o conjunto exato de pares; EncryptionContextSubset exige os pares indicados e permite outros. Ambos distinguem maiúsculas e minúsculas. Esse teste de autorização não substitui o requisito criptográfico: para decifrar ciphertext simétrico criado com contexto, fornece o mesmo contexto da cifragem. Um Allow adicional não corrige um valor alterado. Como o contexto pode aparecer em texto simples nos logs, usa identificadores não sensíveis e protege a relação com dados pessoais fora desse campo. No modelo abaixo, compara primeiro Equals e Subset quando Stage é acrescentado. Depois observa que satisfazer Subset não faz um contexto diferente coincidir com o AAD original. O código ensina estas duas comparações; não cifra dados nem simula todas as políticas KMS.
5. Recuperação regional e migração de chaves
Chaves multi-Region relacionadas partilham propriedades criptográficas, mas continuam a ser recursos regionais. Key policies e grants precisam de gestão local. A aplicação também precisa de selecionar o endpoint e identificador corretos no percurso de recuperação. Replicar material não demonstra que a role de contingência consegue ler o conjunto de dados dentro do RTO. Uma chave single-Region existente não pode ser convertida in-place; planeia a estratégia e o tratamento do histórico. Do mesmo modo, mudar o destino de um alias orienta utilização futura, sem voltar a cifrar o ciphertext antigo. Antes de retirar uma chave, verifica backups, arquivos, data keys protegidas e consumidores pouco frequentes, incluindo processos mensais que um teste diário não cobre.
6. Critérios de aceitação para segurança e produção
Prepara uma matriz com identidade, chave, operação, contexto, Região e resultado esperado. Inclui um caminho permitido, um contexto incorreto, uma identidade sem autorização e uma repetição após revogação. Em exercícios locais usa apenas os dados fictícios abaixo; testes AWS reais precisam de ambiente e autorização próprios. Para o comité, apresenta resultado observado, tempo de recuperação, lacunas e impacto das medidas nos consumidores partilhados. Se a replicação está verde mas a aplicação não decifra, o objetivo de recuperação continua aberto. Uma aceitação parcial pode ser uma decisão de gestão válida quando explícita, com risco, autoridade, prazo e owner; não deve ser reescrita como recuperação comprovada. O handover entrega também contactos, runbook e procedimento de revisão dos grants que ficaram ativos.
# Local context comparison; not a KMS authorization engine or encryption.
# No credentials, network calls, or changes to keys.
def constraint_matches(mode, required, supplied):
if mode == "Equals":
return required == supplied
if mode == "Subset":
return all(k in supplied and supplied[k] == v for k, v in required.items())
raise ValueError("unknown constraint mode")
required = {"Project": "Ledger"}
expanded = {"Project": "Ledger", "Stage": "prod"}
assert not constraint_matches("Equals", required, expanded)
assert constraint_matches("Subset", required, expanded)
assert not constraint_matches("Subset", required, {"Project": "ledger"})
original_aad = dict(required)
assert expanded != original_aad # Constraint success is not original AAD equality.
assert dict(reversed(list(expanded.items()))) == expanded
print("equals=False subset=True aad_match=False")
O ensaio encontra dados replicados mas a role de contingência não pode decifrar. Corrige autorização e endpoint e repete a recuperação antes da aceitação.
Armadilhas comuns
Token como credencial; propagação como instantânea; CreateGrant sempre limitado às ações próprias; alias como recifragem; réplica como serviço recuperado.
Tópicos relacionados: Chaves, máscara e retenção · Resposta, contenção e preservação
Confirma autorização, contexto e percurso regional com resultados observados; documenta quem mantém e termina cada concessão.
Referência: Grants in AWS KMS · SCS-C03