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

O Secret Manager dá suporte a programações de rotação de secrets. Ele 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. Neste tópico, mostramos como configurar programações únicas ou periódicas nos secrets para receber notificações quando for o momento de fazer a rotação.

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?

Secret Manager envia uma mensagem SECRET_ROTATE para os tópicos do Pub/Sub configurados no secret em next_rotation_time. 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 enviará uma mensagem SECRET_ROTATE após o rotation_period decorrido. O next_rotation_time vai ser atualizado para refletir o novo horário da próxima rotação.

É preciso configurar um assinante do Pub/Sub para receber e agir em relação às mensagens SECRET_ROTATE. Se necessário, implemente outros fluxos de trabalho, 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 v1 do Secret Manager 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. O rotation_period não pode ter menos de uma hora. Para orientações sobre formatação de carimbo de data/hora, consulte a referência de data e hora da gcloud.

  • Erros de entrega: o Secret Manager automaticamente repete tentativas com falha de enviar uma mensagem. O Secret Manager não oferece garantias de entrega caso haja configurações incorretas de secrets ou tópicos, permissões ou cotas.

  • As rotações em andamento precisam ser concluídas antes que outra rotação possa ser iniciada para evitar que rotações simultâneas produzam um comportamento inesperado. As notificações são consideradas em andamento enquanto o Secret Manager tenta 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á automaticamente realizar tentativas com falha de enviar uma mensagem por até sete dias. Após esse período, a rotação será cancelada.

Examples

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
  {
    "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

Remova 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