Criar programações de rotação no Secret Manager

O Secret Manager dá suporte a programações de rotação de secrets. O Secret Manager envia mensagens para tópicos do Pub/Sub configurados no secret com base na frequência de rotação e no tempo de rotação. Este tópico mostra como configurar programações únicas ou periódicas nos seus secrets para receber notificações quando for o momento de trocar o secret.

A rotação periódica de secrets ajuda a:

  • Limitar o período em que um secret vazado permanece válido e expõe uma vulnerabilidade.
  • Exercite o fluxo de rotação continuamente para garantir a confiabilidade do processo.

Como funciona?

O Secret Manager envia uma mensagem SECRET_ROTATE para os tópicos do Pub/Sub configurados no secret no next_rotation_time do secret. Esse carimbo de data/hora é definido de duas maneiras:

  1. Fornecido pelo usuário ao criar ou atualizar o secret.

  2. Se um rotation_period for fornecido, o Secret Manager vai enviar uma mensagem SECRET_ROTATE após o rotation_period decorrido. next_rotation_time será atualizado para refletir o novo tempo de rotação.

Você precisa configurar um assinante do Pub/Sub para receber e agir com base nas mensagens SECRET_ROTATE. Se necessário, implemente fluxos de trabalho adicionais, como adicionar uma nova versão do secret e acionar implantações de aplicativos.

Observações

  • O gerenciamento de políticas de rotação só está disponível na API Secret Manager v1 e na Google Cloud CLI.

  • Os tópicos do Pub/Sub precisam ser configurados no secret. Para saber como criar um tópico e uma assinatura do Pub/Sub, consulte o guia de início rápido do Pub/Sub. Para saber como configurar tópicos em um secret, consulte Notificações de eventos para o Gerenciador de secrets.

  • O next_rotation_time precisará ser definido se rotation_period for especificado.

  • next_rotation_time não pode ser definido para menos de cinco minutos no futuro. A rotation_period não pode ter menos de uma hora de duração. Para orientações de formatação de carimbo de data/hora, consulte a referência de data/hora do gcloud.

  • Erros de entrega: o Secret Manager vai tentar novamente automaticamente as tentativas de envio de uma mensagem. O Secret Manager não oferece garantias referentes à entrega caso haja configurações incorretas relacionadas à configuração de secrets ou tópicos, permissões ou cotas.

  • As rotações em andamento precisam ser concluídas antes da outra rotação para evitar que rotações simultâneas produzam comportamentos inesperados. As notificações são consideradas em trânsito enquanto o Secret Manager está tentando enviar a mensagem para o Pub/Sub. As rotações programadas serão ignoradas se houver uma rotação em andamento. O Secret Manager tentará repetir automaticamente as tentativas com falha de enviar uma mensagem por até sete dias. Depois desse período, a rotação será cancelada.

Exemplos

Configurar a rotação em um secret

Crie um secret com um next_rotation_time que é alternado a cada 30 dias a partir de 1o de junho de 2021:

gcloud

gcloud secrets create secret-id \
    --replication-policy "automatic" \
    --next-rotation-time="2021-06-01T09:00:00Z" \
    --rotation-period="2592000s" \
    --topics="full-topic-name"

API

 curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets?secretId=${SECRET_ID}" \
  --request "POST" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-binary @- <<EOF
{
"replication":{
  "automatic":{}
},
"topics": {"name" : "projects/${PROJECT_ID}/topics/${TOPIC_NAME}"},
"rotation":
  {
    "next_rotation_time": "2021-06-01T09:00:00Z",
    "rotation_period" : '2592000s'
  },
}
EOF

Atualizar as configurações de rotação de um secret

Os caminhos válidos do updateMask para rotação incluem: rotation, rotation.next_rotation_time, rotation.rotation_period.

Atualize o next_rotation_time de um secret:

gcloud

gcloud secrets update secret-id \
  --next-rotation-time "2022-06-01T09:00:00Z"

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {
    "rotation": {"next_rotation_time": "2040-06-01T09:00:00Z"}
  }
  EOF

Desativar a rotação em um secret

Remova o next_rotation_time de um secret:

gcloud

gcloud secrets update secret-id \
  --remove-next-rotation-time

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF

Remover a programação de rotação de um secret. Isso remove next_rotation_time e rotation_period.

gcloud

gcloud secrets update secret-id \
  --remove-rotation-schedule

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF

A seguir