Configura la rotazione automatica per i secret Cloud SQL

Questa pagina descrive come configurare la rotazione automatica delle credenziali del database Cloud SQL in Secret Manager.

Prima di iniziare

  • Assicurati che l'istanza Cloud SQL utilizzi una variante motore del database supportata, ad esempio PostgreSQL o SQL Server.
  • Assicurati di utilizzare un secret regionale. La rotazione automatica delle credenziali Cloud SQL è disponibile solo per i secret regionali in Secret Manager. I secret globali non supportano questa funzionalità.
  • Assicurati di avere un'istanza Cloud SQL esistente e un utente del database. Per saperne di più, consulta Crea istanze e Crea e gestisci utenti.
  • Assicurati di disporre delle autorizzazioni per gestire i criteri IAM sull'istanza Cloud SQL. Per saperne di più, consulta Ruoli e autorizzazioni.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per attivare la rotazione automatica, chiedi all'amministratore di concederti un ruolo che contenga le seguenti autorizzazioni:

  • cloudsql.users.list
  • cloudsql.users.update

Puoi ottenere queste autorizzazioni con ruoli predefiniti o ruoli personalizzati. Per vedere quali ruoli sono associati a quali autorizzazioni, consulta Ruoli IAM per Cloud SQL.

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Crea un secret delle credenziali del database Cloud SQL

Per attivare la rotazione automatica, devi creare un secret di tipo Cloud SQL DB credentials.

Console

  1. Nella console Cloud de Confiance , vai alla pagina Secret Manager.

    Vai a Secret Manager

  2. Nella pagina Secret Manager, fai clic sulla scheda Secret regionali, quindi fai clic su Crea secret regionale.

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

  4. Seleziona la casella di controllo Imposta tipo di secret e scegli Cloud SQL DB credentials come tipo di secret.

  5. Scegli la località in cui vuoi che venga archiviato il secret regionale dall'elenco Regione.

  6. (Facoltativo) Nella sezione Rotazione, configura la pianificazione della rotazione per il tuo secret. Se non configuri una pianificazione della rotazione, devi ruotare il secret manualmente.

    1. Seleziona la casella di controllo Imposta periodo di rotazione.

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

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

  7. 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
  • LOCATION: la Cloud de Confiance by S3NS posizione del secret

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets create SECRET_ID \
    --location=LOCATION \
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Windows (PowerShell)

gcloud secrets create SECRET_ID `
    --location=LOCATION `
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
    --location=LOCATION ^
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Dovresti ricevere una risposta simile alla seguente:

Created secret [projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID].

REST

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

  • LOCATION: la Cloud de Confiance by S3NS posizione del secret
  • PROJECT_ID: l' Cloud de Confiance by S3NS ID progetto
  • SECRET_ID: l'ID del secret

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "secretType": "CLOUD_SQL_DB_CREDENTIALS"
}

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

Concedi le autorizzazioni all'identità secret integrata

Ogni secret ha un identificatore univoco che lo distingue da tutte le altre risorse del tuo progetto Cloud de Confiance by S3NS . Devi concedere all'identità integrata le autorizzazioni necessarie per aggiornare le credenziali sull'istanza Cloud SQL. Per saperne di più, consulta Concedere ruoli alle risorse con identità integrate.

Console

  1. Nella pagina dei dettagli del secret, vai alla scheda Panoramica.

  2. Prendi nota dell'identificatore dell'entità IAM del secret.

    L'identificatore ha il seguente formato: principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID.

  3. Nella console Cloud de Confiance vai alla pagina IAM.

    Vai a IAM

  4. Fai clic su Concedi l'accesso.

    Viene visualizzato il riquadro Concedi l'accesso.

  5. Nel campo Nuove entità, inserisci l'identificatore dell'entità IAM del secret.

  6. Dall'elenco Seleziona un ruolo, seleziona un ruolo che conceda le autorizzazioni necessarie.

    Per saperne di più, consulta Ruoli richiesti.

  7. Fai clic su Salva.

gcloud

Ottieni l'identità del secret

Prima di concedere le autorizzazioni IAM, descrivi il secret per ottenere l'identità integrata iamPolicyUidPrincipal. Specifichi questa stringa di identità nel flag --member quando aggiungi l'associazione dei criteri IAM.

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

  • SECRET_ID: l'ID del secret
  • LOCATION: la Cloud de Confiance by S3NS posizione del secret

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets describe SECRET_ID \
    --location=LOCATION \
    --format="value(policyMember.iamPolicyUidPrincipal)"

Windows (PowerShell)

gcloud secrets describe SECRET_ID `
    --location=LOCATION `
    --format="value(policyMember.iamPolicyUidPrincipal)"

Windows (cmd.exe)

gcloud secrets describe SECRET_ID ^
    --location=LOCATION ^
    --format="value(policyMember.iamPolicyUidPrincipal)"

Dovresti ricevere una risposta simile alla seguente:

principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID

Concedi ruolo IAM all'identità segreta

Concedi un ruolo IAM che contenga le autorizzazioni Cloud SQL richieste (ad esempio cloudsql.users.update e cloudsql.users.list o il ruolo predefinito roles/cloudsql.admin) all'entità identità secret recuperata nel passaggio precedente:

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

  • PROJECT_ID: l' Cloud de Confiance by S3NS ID progetto
  • PROJECT_NUMBER: il numero di progetto Cloud de Confiance by S3NS
  • LOCATION: la Cloud de Confiance by S3NS posizione del secret
  • SECRET_UID: l'identificatore univoco della risorsa secret generato dal sistema
  • ROLE: il ruolo IAM concesso all'identità segreta

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" \
    --role="ROLE"

Windows (PowerShell)

gcloud projects add-iam-policy-binding PROJECT_ID `
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" `
    --role="ROLE"

Windows (cmd.exe)

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" ^
    --role="ROLE"

REST

Ottieni l'identità del secret

Prima di concedere le autorizzazioni IAM, recupera i dettagli del secret per ottenere l'identità integrata iamPolicyUidPrincipal. Specifichi questa stringa di identità nel JSON della richiesta quando imposti il criterio IAM.

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

  • LOCATION: la Cloud de Confiance by S3NS posizione del secret
  • PROJECT_ID: l' Cloud de Confiance by S3NS ID progetto
  • SECRET_ID: l'ID del secret

Metodo HTTP e URL:

GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID

Corpo JSON della richiesta:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

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 GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/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 GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

Concedi ruolo IAM all'identità segreta

Concedi un ruolo IAM che contenga le autorizzazioni Cloud SQL richieste (ad esempio cloudsql.users.update e cloudsql.users.list o il ruolo predefinito roles/cloudsql.admin) all'entità identità secret recuperata nel passaggio precedente:

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

  • PROJECT_ID: l' Cloud de Confiance by S3NS ID progetto
  • ROLE: il ruolo IAM concesso all'identità segreta
  • PROJECT_NUMBER: il numero di progetto Cloud de Confiance by S3NS
  • LOCATION: la Cloud de Confiance by S3NS posizione del secret
  • SECRET_UID: l'identificatore univoco della risorsa secret generato dal sistema

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"

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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "version": 1,
  "etag": "BwWWv0I7vBw=",
  "bindings": [
    {
      "role": "roles/cloudsql.admin",
      "members": [
        "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
      ]
    }
  ]
}

Ruotare il secret

Lo stato di rotazione dei secret Cloud SQL appena creati è Disabled fino alla prima rotazione riuscita. Devi ruotare manualmente il secret per verificare le autorizzazioni e avviare la pianificazione della rotazione automatica.

Console

  1. Nella console Cloud de Confiance , vai alla pagina Secret Manager.

    Vai a Secret Manager

  2. Nella pagina Secret Manager, fai clic sulla scheda Secret regionali.

  3. Fai clic sul nome del secret per andare alla pagina dei dettagli.

  4. Fai clic su Ruota.

    Viene visualizzato il riquadro Ruota secret.

  5. Specifica l'ID istanza e il nome utente dell'istanza Cloud SQL che vuoi aggiornare.

  6. (Facoltativo) Espandi la sezione Impostazioni aggiuntive per inserire una password specifica. Se il campo viene lasciato vuoto, Secret Manager genera automaticamente una password efficace e casuale.

  7. Fai clic su Ruota.

gcloud

Abilita rotazione gestita

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

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets enable-managed-rotation SECRET_ID \
    --location=LOCATION \
    --instance-id=INSTANCE_ID \
    --username=USERNAME

Windows (PowerShell)

gcloud secrets enable-managed-rotation SECRET_ID `
    --location=LOCATION `
    --instance-id=INSTANCE_ID `
    --username=USERNAME

Windows (cmd.exe)

gcloud secrets enable-managed-rotation SECRET_ID ^
    --location=LOCATION ^
    --instance-id=INSTANCE_ID ^
    --username=USERNAME

Ruotare manualmente il secret

Attiva una rotazione manuale immediata per generare la versione iniziale del secret e verificare la connettività.

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

  • SECRET_ID: l'ID del secret
  • LOCATION: la Cloud de Confiance by S3NS posizione del secret

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud secrets rotate-secret SECRET_ID \
    --location=LOCATION

Windows (PowerShell)

gcloud secrets rotate-secret SECRET_ID `
    --location=LOCATION

Windows (cmd.exe)

gcloud secrets rotate-secret SECRET_ID ^
    --location=LOCATION

Dovresti ricevere una risposta simile alla seguente:

Name: projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1
State: ENABLED

REST

Abilita rotazione gestita

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

Metodo HTTP e URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation

Corpo JSON della richiesta:

{
  "cloudSqlSingleUserCredentials": {
    "instanceId": "INSTANCE_ID",
    "username": "USERNAME"
  }
}

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation"

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

Ruotare manualmente il secret

Attiva una rotazione manuale immediata per generare la versione iniziale del secret e verificare la connettività.

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

  • LOCATION: la Cloud de Confiance by S3NS posizione del secret
  • PROJECT_ID: l' Cloud de Confiance by S3NS ID progetto
  • SECRET_ID: l'ID del secret

Metodo HTTP e URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret

Per inviare la richiesta, scegli una di queste opzioni:

curl

Esegui questo comando:

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

PowerShell

Esegui questo comando:

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

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

Secret Manager tenta di aggiornare le credenziali nell'istanza Cloud SQL. Se l'operazione va a buon fine, lo Stato rotazione cambia in Enabled e inizia il timer di rotazione automatica pianificata.

Passaggi successivi