Creare pianificazioni della rotazione in Secret Manager

Secret Manager ti consente di pianificare rotazioni periodiche dei tuoi secret. Secret Manager lo fa inviando notifiche agli argomenti Pub/Sub associati ai tuoi secret, in base alla frequenza e all'ora di rotazione che specifichi. Questa pagina descrive come impostare queste pianificazioni della rotazione.

Come funzionano le notifiche relative alla rotazione di secret

Secret Manager attiva un messaggio SECRET_ROTATE per gli argomenti Pub/Sub designati in corrispondenza di next_rotation_time del secret. Esistono due modi per determinare questo timestamp:

  1. Definito dall'utente: puoi specificare next_rotation_time quando crei o aggiorni il secret.

  2. Periodo di rotazione: se definisci un rotation_period, Secret Manager calcola automaticamente il next_rotation_time. Secret Manager invia il messaggio SECRET_ROTATE dopo che è trascorso il rotation_period specificato, quindi aggiorna next_rotation_time per pianificare la rotazione successiva.

Devi configurare un sottoscrittore Pub/Sub per ricevere e gestire i messaggi SECRET_ROTATE. Potresti anche dover configurare flussi di lavoro aggiuntivi in risposta a queste notifiche, ad esempio creando una nuova versione del secret ed eseguendo il deployment delle modifiche alle tue applicazioni.

Requisiti e considerazioni per le pianificazioni della rotazione dei secret

  • Gli argomenti Pub/Sub devono essere configurati nel secret. Per scoprire come creare un argomento e una sottoscrizione Pub/Sub, consulta la guida rapida di Pub/Sub. Per scoprire come configurare gli argomenti di un secret, consulta Notifiche degli eventi per Secret Manager.

  • next_rotation_time deve essere impostato se rotation_period è specificato.

  • next_rotation_time non può essere impostato a meno di cinque minuti nel futuro.

  • La rotation_period non può durare meno di un'ora. Per indicazioni sulla formattazione del timestamp, consulta il riferimento datetimeGoogle Cloud .

  • Sebbene Secret Manager ritenti automaticamente i tentativi di consegna dei messaggi non riusciti, non possiamo garantire la riuscita della consegna se sono presenti errori di configurazione relativi al secret, alla configurazione dell'argomento, alle autorizzazioni o alle quote.

  • Le rotazioni in corso devono essere completate prima che possa essere avviata un'altra rotazione per evitare che le rotazioni simultanee producano un comportamento imprevisto. 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 ritenta automaticamente l'invio di un messaggio non riuscito per un massimo di sette giorni, dopodiché la rotazione viene annullata.

Configurare la rotazione di un secret

Puoi configurare una pianificazione della rotazione utilizzando la console Google Cloud , Google Cloud CLI o l'API Secret Manager.

Console

  1. Nella console Google Cloud , vai alla pagina Secret Manager.

    Vai a Secret Manager

  2. Nella pagina Secret Manager, fai clic su Crea secret.

  3. Nella pagina Crea secret, inserisci un nome per il secret nel campo Nome.

  4. Inserisci un valore per il secret (ad esempio, abcd1234). Puoi anche caricare un file di testo contenente il valore del secret utilizzando l'opzione Carica file. Questa azione crea automaticamente la versione del secret.

  5. Vai alla sezione Rotazione e seleziona la casella di controllo Imposta periodo di rotazione.

  6. Nell'elenco Periodo di rotazione, seleziona una delle opzioni predefinite o seleziona Personalizzato per configurare una pianificazione di rotazione personalizzata.

  7. Nel campo A partire dal giorno, inserisci la data e l'ora di inizio del periodo di rotazione.

  8. Fai clic su Crea secret.

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • SECRET_ID: l'ID del secret o l'identificatore completo del secret.
  • NEXT_ROTATION_TIME: il timestamp in cui completare la prima rotazione in formato ISO 8601, ad esempio 2021-06-01T09:00:00Z.
  • ROTATION_PERIOD: l'intervallo, in secondi, per la rotazione della chiave. Ad esempio, per ruotare la chiave ogni 2592000 secondi, imposta un valore di 2592000s.
  • FULL_TOPIC_NAME: il nome completo dell'argomento Pub/Sub nel formato projects/your-project-id/topics/your-topic-name.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets create SECRET_ID \
  --replication-policy "automatic" \
  --next-rotation-time="NEXT_ROTATION_TIME" \
  --rotation-period="ROTATION_PERIOD" \
  --topics="FULL_TOPIC_NAME"

Windows (PowerShell)

gcloud secrets create SECRET_ID `
  --replication-policy "automatic" `
  --next-rotation-time="NEXT_ROTATION_TIME" `
  --rotation-period="ROTATION_PERIOD" `
  --topics="FULL_TOPIC_NAME"

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
  --replication-policy "automatic" ^
  --next-rotation-time="NEXT_ROTATION_TIME" ^
  --rotation-period="ROTATION_PERIOD" ^
  --topics="FULL_TOPIC_NAME"

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto Google Cloud
  • SECRET_ID: l'ID del secret o l'identificatore completo del secret
  • TOPIC_NAME: il nome dell'argomento

Metodo HTTP e URL:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID

Corpo JSON della richiesta:

{
  "replication":{
    "automatic":{}
  },
  "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"},
  "rotation":
    {
      "next_rotation_time": "2021-06-01T09:00:00Z",
      "rotation_period" : '2592000s'
    },
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Aggiornare le impostazioni di rotazione di un secret

Quando effettui una richiesta di aggiornamento, puoi aggiornare le seguenti impostazioni di rotazione:

  • rotation: Si riferisce all'intera configurazione di rotazione del secret.

  • rotation.next_rotation_time: questo campo ha come target specifico il timestamp che indica quando potrebbe verificarsi la prossima rotazione.

  • rotation.rotation_period: specifica la durata tra ogni rotazione.

Per aggiornare le impostazioni di rotazione del secret, utilizza uno dei seguenti metodi:

Console

  1. Nella console Google Cloud , vai alla pagina Secret Manager.

    Vai a Secret Manager

  2. Individua il segreto che vuoi modificare e fai clic sul menu Azioni associato. Nel menu Azioni, fai clic su Modifica.

  3. Vai alla sezione Rotazione. Aggiorna il periodo di rotazione in base alle tue esigenze e fai clic su Aggiorna secret.

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • SECRET_ID: l'ID del secret o l'identificatore completo del secret.
  • NEXT_ROTATION_TIME: il timestamp in cui completare la prima rotazione in formato ISO 8601, ad esempio 2021-06-01T09:00:00Z.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID \
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (PowerShell)

gcloud secrets update SECRET_ID `
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
  --next-rotation-time="NEXT_ROTATION_TIME"

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l' Google Cloud ID progetto.
  • SECRET_ID: l'ID del secret o l'identificatore completo del secret.
  • NEXT_ROTATION_TIME: il timestamp in cui completare la prima rotazione in formato ISO 8601, ad esempio 2021-06-01T09:00:00Z.

Metodo HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Corpo JSON della richiesta:

{
  "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"}
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Disattivare la rotazione di un secret

Per disattivare la rotazione dei secret, utilizza uno dei seguenti metodi:

Console

  1. Nella console Google Cloud , vai alla pagina Secret Manager.

    Vai a Secret Manager

  2. Individua il segreto che vuoi modificare e fai clic sul menu Azioni associato. Nel menu Azioni, fai clic su Modifica.

  3. Vai alla sezione Rotazione. Deseleziona la casella di controllo Imposta periodo di rotazione e poi fai clic su Aggiorna secret.

gcloud

Rimuovere il next_rotation_time di un secret

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • SECRET_ID: l'ID del secret o l'identificatore completo del secret

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-next-rotation-time

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-next-rotation-time

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --remove-next-rotation-time

Rimuovere una pianificazione di rotazione di un secret. In questo modo, vengono rimossi sia next_rotation_time sia rotation_period.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • SECRET_ID: l'ID del secret o l'identificatore completo del secret

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-rotation-schedule

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-rotation-schedule

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --remove-rotation-schedule

REST

Rimuovere l'ora della prossima rotazione di un secret

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto Google Cloud
  • SECRET_ID: l'ID del secret o l'identificatore completo del secret

Metodo HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Corpo JSON della richiesta:

{}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

Rimuovere una pianificazione di rotazione di un secret. Vengono rimossi sia l'ora di rotazione successiva sia il periodo di rotazione.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto Google Cloud
  • SECRET_ID: l'ID del secret o l'identificatore completo del secret

Metodo HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation

Corpo JSON della richiesta:

{}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

Passaggi successivi