Skip to main content

Rotacionar uma chave

O procedimento de quando algo deu errado, trocar uma chave em uso sem derrubar quem a lê, com janela de aceitação dupla.

Rotacionar não é gerar uma chave nova: é gerar, propagar, conferir e só então revogar a antiga. Os quatro passos existem porque quem lê o segredo o guarda em memória, e revogar antes da propagação transforma um vazamento numa indisponibilidade.

Antes de começar

O identificador do segredo e a lista de quem o lê. A lista sai de panlabs segredos consumidores <segredo> e não de memória: foi assim que a jornada de Security Champion descobriu o consumidor que ninguém sabia que existia.

Os passos

  1. Abrir a janela de aceitação dupla

    Durante a janela os dois valores são aceitos. É ela que torna a rotação incremental em vez de instantânea.

    panlabs segredos janela abrir prod/integracao/chave-externa --horas 24
  2. Gerar e propagar

    O comando grava o valor novo e dispara o deploy de quem lê o segredo no boot. esperar=True bloqueia até a esteira confirmar.

    from panlabs.segredos import Rotacao, PropagacaoParcial

    rotacao = Rotacao(segredo="prod/integracao/chave-externa", regiao="us-east-1")

    try:
    nova = rotacao.executar(propagar_para=["esteira", "runtime"], esperar=True)
    except PropagacaoParcial as erro:
    print(erro.pendentes, erro.versao_ativa)
  3. Conferir que ninguém usa mais a antiga

    O contador de uso por versão é o que autoriza o passo seguinte. Zero por uma hora inteira, não zero num instante.

    panlabs segredos uso prod/integracao/chave-externa --por-versao --ultima-hora
    # AWSCURRENT 4.812 chamadas
    # AWSPREVIOUS 0 chamadas
  4. Revogar e fechar a janela

    Só agora. Esta é a única etapa irreversível do procedimento.

    panlabs segredos janela fechar prod/integracao/chave-externa --revogar-anterior

Verificação

A chave antiga passa a ser recusada e a nova responde. O teste é fazer as duas chamadas, nesta ordem:

panlabs segredos testar prod/integracao/chave-externa --versao anterior
# 401 (esperado)
panlabs segredos testar prod/integracao/chave-externa
# 200

AWSPREVIOUS com zero chamadas num instante não prova nada: um consumidor que roda de hora em hora aparece zerado entre execuções. A janela de uma hora é o mínimo, e para consumidor diário o número certo é vinte e quatro.

Variações

Vazamento confirmado. A ordem inverte: revogar primeiro, aceitar a indisponibilidade, rotacionar depois. É a única situação em que derrubar o serviço é a decisão certa, e a chamada é de quem responde pelo incidente, não de quem executa o procedimento.

Terceiro que não suporta duas chaves. Sem janela de aceitação dupla, a rotação tem indisponibilidade por construção. Ela é agendada, anunciada, e cabe dentro do menor intervalo entre chamadas do consumidor.

Toda rotação que já precisou ser feita duas vezes na casa foi rotação feita fora de janela. Abrir a janela custa um comando; refazer custa um incidente.