Creare pianificazioni della rotazione in Secret Manager

Secret Manager supporta le pianificazioni di rotazione dei secret. Secret Manager invia messaggi agli argomenti Pub/Sub configurati sul segreto in base alla frequenza e al momento di rotazione specificati. Questo argomento illustra come configurare pianificazioni una tantum o periodiche per i tuoi secret in modo da ricevere notifiche quando è il momento di ruotare il secret.

La rotazione periodica dei secret consente di:

  • Limita la durata di un secret compromesso che rimane valido ed espone una vulnerabilità.
  • Esegui continuamente il flusso di rotazione per garantire l'affidabilità del processo.

Come funziona?

Secret Manager invia un messaggio SECRET_ROTATE agli argomenti Pub/Sub configurati sul secret al next_rotation_time del secret. Questo timestamp viene impostato in due modi:

  1. Fornito dall'utente durante la creazione o l'aggiornamento del secret.

  2. Se viene fornito un rotation_period, Secret Manager invierà un messaggio SECRET_ROTATE dopo il rotation_period trascorso. next_rotation_time verrà aggiornato in modo da riflettere il nuovo orario della rotazione successiva.

Devi configurare un sottoscrittore Pub/Sub per ricevere e gestire i messaggi SECRET_ROTATE. Se necessario, implementa workflow aggiuntivi come l'aggiunta di una nuova versione del secret e l'attivazione dei deployment delle applicazioni.

Note

  • La gestione dei criteri di rotazione è disponibile solo nell'API Secret Manager v1 e in Google Cloud CLI.

  • Gli argomenti Pub/Sub devono essere configurati nel secret. Per scoprire come creare un argomento e una sottoscrizione Pub/Sub, consulta la guida introduttiva a Pub/Sub. Per scoprire come configurare gli argomenti in un secret, consulta Notifiche evento per Secret Manager.

  • next_rotation_time deve essere impostato se viene specificato rotation_period.

  • next_rotation_time non può essere impostato su un orario futuro inferiore a cinque minuti. Il rotation_period non può durare meno di un'ora. Per indicazioni sulla formattazione dei timestamp, consulta la documentazione di riferimento di gcloud datetime.

  • Errori di recapito: Secret Manager riproverà automaticamente i tentativi non riusciti per inviare un messaggio. Secret Manager non fornisce garanzie in merito all'invio in caso di configurazione errata di secret o argomenti, autorizzazioni o quote.

  • Le rotazioni in corso devono essere completate prima di poter avviarne un'altra per evitare che le rotazioni simultanee generino comportamenti imprevisti. Le notifiche sono considerate in transito mentre Secret Manager tenta di inviare il messaggio a Pub/Sub. Le rotazioni pianificate vengono ignorate se è in corso una rotazione. Secret Manager riproverà automaticamente i tentativi non riusciti di invio di un messaggio per un massimo di sette giorni, dopodiché la rotazione viene interrotta.

Esempi

Configurare la rotazione di un secret

Crea un segreto con un next_rotation_time che ruota ogni 30 giorni a partire dal 1° giugno 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

Aggiornare le impostazioni di rotazione di un segreto

I percorsi updateMask validi per la rotazione includono: rotation, rotation.next_rotation_time, rotation.rotation_period.

Aggiorna next_rotation_time di un 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

Disattivare la rotazione di un secret

Per rimuovere il next_rotation_time di un 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

Rimuovi la pianificazione di rotazione di un segreto. In questo modo, vengono rimossi sia next_rotation_time che 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

Passaggi successivi