En esta página, se describe cómo configurar la rotación automática para las credenciales de tu base de datos de Cloud SQL en Secret Manager.
Antes de comenzar
- Asegúrate de que tu instancia de Cloud SQL use una variante de motor de base de datos compatible, como PostgreSQL o SQL Server.
- Asegúrate de usar un secreto regional. La rotación automática de credenciales de Cloud SQL solo está disponible para los secretos regionales en Secret Manager. Los secretos globales no admiten esta función.
- Asegúrate de tener una instancia de Cloud SQL y un usuario de base de datos existentes. Para obtener más información, consulta Crea instancias y Crea y administra usuarios.
- Asegúrate de tener permisos para administrar las políticas de IAM en tu instancia de Cloud SQL. Para obtener más información, consulta Roles y permisos.
Roles obligatorios
Para obtener los permisos que necesitas para habilitar la rotación automática, pídele a tu administrador que te otorgue un rol que contenga los siguientes permisos:
cloudsql.users.listcloudsql.users.update
Puedes obtener estos permisos con roles predefinidos o roles personalizados. Para ver qué roles están asociados con qué permisos, consulta Roles de IAM para Cloud SQL.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Crea un secreto de credenciales de la base de datos de Cloud SQL
Para habilitar la rotación automática, debes crear un secreto del tipo Cloud SQL DB credentials.
Console
-
En la consola de Google Cloud , ve a la página Secret Manager.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales y, luego, en Crear secreto regional.
-
En la página Crear secreto regional, ingresa un nombre para el secreto en el campo Nombre.
-
Selecciona la casilla de verificación Set secret type y elige
Cloud SQL DB credentialscomo el tipo de secreto. -
En la lista Región, elige la ubicación en la que deseas que se almacene tu Secret regional.
-
(Opcional) En la sección Rotación, configura la programación de rotación de tu secreto. Si no configuras un programa de rotación, debes rotar el secreto de forma manual.
Selecciona la casilla de verificación Establecer período de rotación.
En la lista Período de rotación, selecciona una de las opciones predeterminadas o Personalizado para configurar tu propio programa de rotación.
En el campo A partir del, ingresa la fecha y hora de inicio del período de rotación.
-
Haz clic en Crear secreto.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- SECRET_ID: ID del secreto
- LOCATION: La Google Cloud ubicación del secreto
Ejecuta el siguiente 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
Deberías recibir una respuesta similar a la que figura a continuación:
Created secret [projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID].
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La Google Cloud ubicación del secreto
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- SECRET_ID: ID del secreto
Método HTTP y URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
Cuerpo JSON de la solicitud:
{
"secretType": "CLOUD_SQL_DB_CREDENTIALS"
}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:
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
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"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"
}
}
Otorga permisos a la identidad secreta integrada
Cada secreto tiene un identificador único que lo distingue de todos los demás recursos de tu proyecto Google Cloud . Debes otorgar a la identidad integrada los permisos necesarios para actualizar las credenciales en tu instancia de Cloud SQL. Para obtener más información, consulta Cómo otorgar roles a recursos con identidades integradas.
Console
-
En la página de detalles del secreto, ve a la pestaña Descripción general.
-
Anota el identificador de la entidad de IAM del secreto.
El identificador tiene el siguiente formato:
principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID. -
En la consola de Google Cloud , dirígete a la página IAM.
-
Haz clic en Otorgar acceso.
Aparecerá el panel Otorgar acceso.
-
En el campo Principales nuevas, ingresa el identificador principal de IAM del secreto.
-
En la lista Seleccionar un rol, elige un rol que otorgue los permisos necesarios.
Para obtener más información, consulta los Roles requeridos.
-
Haz clic en Guardar.
gcloud
Obtén la identidad secreta
Antes de otorgar permisos de IAM, describe el secreto para obtener la identidad integrada de iamPolicyUidPrincipal. Especifica esta cadena de identidad en la marca --member cuando agregues la vinculación de la política de IAM.
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- SECRET_ID: ID del secreto
- LOCATION: La Google Cloud ubicación del secreto
Ejecuta el siguiente 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)"
Deberías recibir una respuesta similar a la que figura a continuación:
principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID
Otorga el rol de IAM a la identidad secreta
Otorga un rol de IAM que contenga los permisos de Cloud SQL requeridos (como cloudsql.users.update y cloudsql.users.list, o el rol predefinido roles/cloudsql.admin) a la principal de identidad secreta recuperada en el paso anterior:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- PROJECT_NUMBER: Es el número de proyecto Google Cloud numérico.
- LOCATION: La Google Cloud ubicación del secreto
- SECRET_UID: Es el identificador único generado por el sistema del recurso secreto.
- ROLE: Es el rol de IAM que se otorga a la identidad secreta.
Ejecuta el siguiente 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
Obtén la identidad secreta
Antes de otorgar permisos de IAM, recupera los detalles del secreto para obtener la identidad integrada iamPolicyUidPrincipal. Especificas esta cadena de identidad en el JSON de tu solicitud cuando configuras la política de IAM.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La Google Cloud ubicación del secreto
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- SECRET_ID: ID del secreto
Método HTTP y URL:
GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID
Cuerpo JSON de la solicitud:
{
"policy": {
"bindings": [
{
"role": "ROLE",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:
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
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"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"
}
}
Otorga el rol de IAM a la identidad secreta
Otorga un rol de IAM que contenga los permisos de Cloud SQL requeridos (como cloudsql.users.update y cloudsql.users.list, o el rol predefinido roles/cloudsql.admin) a la principal de identidad secreta recuperada en el paso anterior:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- ROLE: Es el rol de IAM que se otorga a la identidad secreta.
- PROJECT_NUMBER: Es el número de proyecto Google Cloud numérico.
- LOCATION: La Google Cloud ubicación del secreto
- SECRET_UID: Es el identificador único generado por el sistema del recurso secreto.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Cuerpo JSON de la solicitud:
{
"policy": {
"bindings": [
{
"role": "ROLE",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:
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
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"version": 1,
"etag": "BwWWv0I7vBw=",
"bindings": [
{
"role": "roles/cloudsql.admin",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
Rota tu secreto
El estado de rotación de los secretos de Cloud SQL recién creados es Disabled hasta la primera rotación exitosa. Debes rotar manualmente tu secreto para verificar los permisos y comenzar el programa de rotación automática.
Console
-
En la consola de Google Cloud , ve a la página Secret Manager.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales.
-
Haz clic en el nombre del secreto para ir a la página de detalles.
-
Haz clic en Rotar.
Aparecerá el panel Rotate secret.
-
Especifica el ID de la instancia y el nombre de usuario de la instancia de Cloud SQL que deseas actualizar.
-
(Opcional) Expande la sección Configuración adicional para ingresar una contraseña específica. Si se deja en blanco, Secret Manager generará automáticamente una contraseña segura y aleatoria.
-
Haz clic en Rotar.
gcloud
Habilita la rotación administrada
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- SECRET_ID: ID del secreto
- LOCATION: La Google Cloud ubicación del secreto
- INSTANCE_ID: El ID de la instancia de Cloud SQL
- USERNAME: El nombre de la cuenta de usuario de la base de datos de Cloud SQL
Ejecuta el siguiente 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
Rota tu secreto de forma manual
Activa una rotación manual inmediata para generar la versión inicial del secreto y verificar la conectividad.
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- SECRET_ID: ID del secreto
- LOCATION: La Google Cloud ubicación del secreto
Ejecuta el siguiente 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
Deberías recibir una respuesta similar a la que figura a continuación:
Name: projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1 State: ENABLED
REST
Habilita la rotación administrada
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La Google Cloud ubicación del secreto
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- SECRET_ID: ID del secreto
- INSTANCE_ID: El ID de la instancia de Cloud SQL
- USERNAME: El nombre de la cuenta de usuario de la base de datos de Cloud SQL
Método HTTP y URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation
Cuerpo JSON de la solicitud:
{
"cloudSqlSingleUserCredentials": {
"instanceId": "INSTANCE_ID",
"username": "USERNAME"
}
}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:
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
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
"createTime": "2026-07-28T05:00:00Z",
"state": "ENABLED"
}
Rota tu secreto de forma manual
Activa una rotación manual inmediata para generar la versión inicial del secreto y verificar la conectividad.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La Google Cloud ubicación del secreto
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- SECRET_ID: ID del secreto
Método HTTP y URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el siguiente 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
Ejecuta el siguiente 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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
"createTime": "2026-07-28T05:00:00Z",
"state": "ENABLED"
}
Secret Manager intenta actualizar las credenciales en tu instancia de Cloud SQL. Si la operación se realiza correctamente, el Estado de rotación cambia a Enabled y comienza el temporizador de rotación automática programada.
¿Qué sigue?
- Obtén más información para configurar programas de rotación para los secretos.