En esta página, se describe cómo agregar un usuario o una cuenta de servicio que usa la autenticación de la base de datos de IAM a una base de datos y cómo administrar esos usuarios y esas cuentas de servicio. Para obtener más información sobre la integración de IAM, consulta Autenticación de IAM.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Asegúrate de tener la función de administrador de Cloud SQL en tu cuenta de usuario.
- Habilita la autenticación de la base de datos de IAM en tu instancia de Cloud SQL.
- Asegúrate de otorgar acceso de IAM a los usuarios que lo necesiten para cada proyecto que contenga bases de datos a las que los usuarios necesitan acceder. Consulta Otorga, cambia y revoca el acceso a recursos.
- Asegúrate de haber agregado una cuenta de servicio para cada servicio que requiera acceso a las bases de datos del proyecto.
Agrega un usuario o una cuenta de servicio de IAM a una instancia de base de datos
Debes crear un usuario de base de datos nuevo para cada usuario de IAM que desees tener acceso a la instancia de la base de datos. El nombre de usuario de la base de datos debe ser la dirección de correo electrónico del usuario de IAM, por ejemplo, test-user@example.com
.
@
y .
).
Las cuentas de servicio usan el formato service-account-name@project-id.iam.gserviceaccount.com
.
Para agregar una cuenta de servicio o un usuario de IAM, agrega un usuario de base de datos nuevo y selecciona IAM como método de autenticación:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Selecciona Usuarios en el menú de navegación de SQL.
- Haz clic en Agregar cuenta de usuario. Se abrirá la pestaña Agregar una cuenta de usuario a la instancia instance_name.
- Haz clic en el botón de selección Cloud IAM.
- Agrega la dirección de correo electrónico del usuario o la cuenta de servicio que desees agregar en el campo Principal.
- Haz clic en Agregar. El usuario ahora está en la lista de usuarios.
Si el usuario no está asignado al rol Usuario de instancia de Cloud SQL, aparecerá un ícono de a la izquierda del nombre de usuario.
Para otorgar los privilegios de acceso al usuario, haz clic en el ícono y, luego, selecciona Agregar función de IAM. El ícono ya no aparecerá. El usuario ahora es miembro del rol.
gcloud
Crear una cuenta de usuario
Usa el correo electrónico, como test-user@example.com
, para identificar al usuario.
Reemplaza lo siguiente:
- USERNAME: Es la dirección de correo electrónico del usuario.
- INSTANCE_NAME: Es el nombre de la instancia a la que deseas que el usuario pueda acceder.
gcloud sql users create USERNAME \ --instance=INSTANCE_NAME \ --type=cloud_iam_user
Cree una cuenta de servicio
Reemplaza lo siguiente:
- SERVICE_ACCT: Es la dirección de correo electrónico de la cuenta de servicio.
- INSTANCE_NAME: Es el nombre de la instancia a la que deseas que la cuenta de servicio pueda acceder.
gcloud sql users create SERVICE_ACCT \ --instance=INSTANCE_NAME \ --type=cloud_iam_service_account
Terraform
Para agregar cuentas de usuario y de servicio de IAM a una instancia con la autenticación de la base de datos de IAM habilitada, usa un recurso de Terraform.
Aplica los cambios
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Borra los cambios
Para borrar tus cambios, haz lo siguiente:
- Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento
deletion_protection
enfalse
.deletion_protection = "false"
- Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform apply
-
Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform destroy
REST v1
Crear una cuenta de usuario
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: el ID de tu proyecto
- instance-id es el ID de la instancia a la que le estás agregando el usuario
- username es la dirección de correo electrónico del usuario
- operation-id es el ID de la operación
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Cuerpo JSON de la solicitud:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:44:16.656Z", "startTime": "2020-02-07T22:44:16.686Z", "endTime": "2020-02-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Cree una cuenta de servicio
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- service-acct: Es el correo electrónico de tu cuenta de servicio
- project-id: el ID de tu proyecto
- instance-id es el ID de la instancia a la que agregarás la cuenta de servicio
- operation-id es el ID de la operación
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Cuerpo JSON de la solicitud:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
REST v1beta4
Crear una cuenta de usuario
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: el ID de tu proyecto
- instance-id es el ID de la instancia a la que le estás agregando el usuario
- username es la dirección de correo electrónico del usuario
- operation-id es el ID de la operación
Método HTTP y URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Cuerpo JSON de la solicitud:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:44:16.656Z", "startTime": "2020-02-07T22:44:16.686Z", "endTime": "2020-02-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Cree una cuenta de servicio
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- service-acct: Es el correo electrónico de tu cuenta de servicio
- project-id: el ID de tu proyecto
- instance-id es el ID de la instancia a la que agregarás la cuenta de servicio
- operation-id es el ID de la operación
Método HTTP y URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Cuerpo JSON de la solicitud:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Agrega una política de IAM vinculante para un usuario o una cuenta de servicio
En este procedimiento, se agrega una vinculación de política a la política de IAM de un proyecto específico, según el ID del proyecto y la vinculación. El comando de vinculación consta de un miembro, una función y una condición opcional.
El nombre de usuario de la base de datos debe ser la dirección de correo electrónico del usuario de IAM, por ejemplo, test-user@example.com
. Debes usar comillas porque contiene caracteres especiales (@
y .
).
Console
-
En la consola de Google Cloud, ve a la página IAM.
- Haz clic en Agregar.
- En Nuevos miembros, ingresa una dirección de correo electrónico. Puedes agregar usuarios individuales, cuentas de servicio o grupos como miembros, pero cada proyecto debe tener al menos una principal como miembro.
- En Rol, navega a Cloud SQL y selecciona Usuario de instancia de Cloud SQL y Cliente de Cloud SQL.
- Para los usuarios individuales y las cuentas de servicio, selecciona Cliente de Cloud SQL.
- Haz clic en Guardar.
gcloud
Ejecuta gcloud projects add-iam-policy-binding
con la marca --role=roles/cloudsql.instanceUser
.
Agrega una vinculación de políticas a una cuenta de usuario
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto que deseas que el usuario pueda usar.
- USERNAME: la dirección de correo electrónico del usuario.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USERNAME \ --role=roles/cloudsql.instanceUser
Vuelve a ejecutar gcloud projects add-iam-policy-binding
con la marca --role=roles/cloudsql.client
Agrega una vinculación de políticas a una cuenta de servicio
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto que deseas que el usuario pueda usar.
- SERVICE_ACCT: la dirección de correo electrónico de la cuenta de servicio.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCT \ --role=roles/cloudsql.instanceUser
Vuelve a ejecutar gcloud projects add-iam-policy-binding
con la marca --role=roles/cloudsql.client
Terraform
Para agregar la vinculación de política necesaria a las cuentas de servicio y el usuario de IAM, usa un recurso de Terraform.
Aplica los cambios
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Borra los cambios
Para borrar tus cambios, haz lo siguiente:
- Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento
deletion_protection
enfalse
.deletion_protection = "false"
- Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform apply
-
Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform destroy
REST
Para otorgar las funciones cloudsql.instanceUser
y cloudsql.client
a ambos tipos de cuentas, edita la política de vinculación JSON o YAML que muestra el comando get-iam-policy
. Ten en cuenta que este cambio en la política se implementará una vez que hayas establecido la política actualizada.
{ "role": "roles/cloudsql.instanceUser", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] } { "role": "roles/cloudsql.client", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] }
Otorga privilegios de base de datos al usuario de IAM
Cuando se agrega un usuario de IAM a una instancia de base de datos, a ese usuario nuevo no se le otorgan privilegios en ninguna base de datos de forma predeterminada.Cuando un usuario o una cuenta de servicio se conectan a una base de datos, pueden ejecutar consultas en cualquier objeto de la base de datos cuyo acceso se le haya otorgado como PÚBLICO.
Si necesitan acceso adicional, se pueden otorgar más privilegios con la declaración GRANT. Consulta la página de referencia de GRANT para obtener una lista completa de privilegios que puedes otorgar a usuarios y cuentas de servicio. Ejecuta GRANT desde la línea de comandos.
Reemplaza lo siguiente:
- USERNAME: Es la dirección de correo electrónico del usuario. Debes usar comillas alrededor del correo electrónico porque contiene caracteres especiales (
@
y.
). - TABLE_NAME: Es el nombre de la tabla a la que deseas que se otorgue acceso al usuario.
grant select on TABLE_NAME to "USERNAME";
Quita una cuenta de servicio o un usuario de IAM de la base de datos
Para quitar un usuario o una cuenta de servicio de la base de datos, debes borrar la cuenta de la instancia:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Selecciona Usuarios en el menú de navegación de SQL.
- Haz clic en para encontrar el usuario que deseas quitar.
- Selecciona Quitar. Esto solo revoca el acceso a esta instancia.
gcloud
Revoca un usuario
Usa el correo electrónico, como test-user@example.com
, para identificar al usuario.
Reemplaza lo siguiente:
- USERNAME: La dirección de correo electrónico
- INSTANCE_NAME: El nombre de la instancia de la que deseas quitar al usuario.
gcloud sql users delete USERNAME \ --instance=INSTANCE_NAME
Borra la cuenta de servicio
Reemplaza lo siguiente:
- SERVICE_ACCT: Es la dirección de correo electrónico de la cuenta de servicio.
- INSTANCE_NAME: El nombre de la instancia de la que deseas quitar al usuario.
gcloud sql users delete SERVICE_ACCT \ --instance=INSTANCE_NAME
REST v1
En la siguiente solicitud, se usa el método users:delete para borrar la cuenta de usuario que se especificó.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: el ID de tu proyecto
- INSTANCE_ID: el ID de instancia deseado
- USERNAME: la dirección de correo electrónico del usuario o la cuenta de servicio
Método HTTP y URL:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
En la siguiente solicitud, se usa el método users:delete para borrar la cuenta de usuario que se especificó.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: el ID de tu proyecto
- INSTANCE_ID: el ID de instancia deseado
- USERNAME: la dirección de correo electrónico del usuario o la cuenta de servicio
Método HTTP y URL:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Visualiza la información de acceso en los registros de auditoría
Puedes habilitar los registros de auditoría para capturar los accesos de IAM a la base de datos. Cuando hay problemas de acceso, puedes usar los registros de auditoría para diagnosticar el problema.
Una vez configurado, puedes ver los registros de auditoría de acceso a los datos de los accesos exitosos mediante el Explorador de registros.
Por ejemplo, un registro puede contener información similar a la siguiente:
{
insertId: "..."
logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {
principalEmail: "..."
}
authorizationInfo: [
0: {
granted: true
permission: "cloudsql.instances.login"
resource: "instances/..."
resourceAttributes: {
}
}
]
methodName: "cloudsql.instances.login"
request: {
@type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
clientIpAddress: "..."
database: "..."
databaseSessionId: ...
instance: "projects/.../locations/us-central1/instances/..."
user: "..."
}
requestMetadata: {
callerIp: "..."
destinationAttributes: {
}
requestAttributes: {
auth: {
}
time: "..."
}
}
resourceName: "instances/..."
serviceName: "cloudsql.googleapis.com"
status: {
}
}
receiveTimestamp: "..."
resource: {
labels: {
database_id: "...:..."
project_id: "..."
region: "us-central"
}
type: "cloudsql_database"
}
severity: "INFO"
timestamp: "..."
}
Soluciona problemas de acceso
Cuando falla un intento de acceso, PostgreSQL muestra un mensaje de error mínimo por motivos de seguridad. Por ejemplo:
PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL: Cloud SQL IAM user authentication failed for user "..."
FATAL: pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off
Puedes revisar los registros de errores de PostgreSQL para obtener más detalles sobre el error. Para obtener más información, consulta Visualiza los registros.
Por ejemplo, en la siguiente entrada de registro se explica la acción que puedes realizar a fin de resolver el problema del error anterior.
F ... [152172]: [1-1] db=...,user=... FATAL: Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL: Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Verifica el mensaje de error que recibes. Si el mensaje no indica que usaste la “autenticación de usuarios de IAM de Cloud SQL” o la “autenticación de cuentas de servicio de IAM de Cloud SQL”, verifica que el tipo de usuario de la base de datos que se usó para acceder sea CLOUD_IAM_USER
o CLOUD_IAM_SERVICE_ACCOUNT
.
Puedes usar la consola de Google Cloud o el comando gcloud sql
users list
para verificarlo.
Para un usuario de IAM, verifica que el nombre de usuario de la base de datos sea el correo electrónico del usuario de IAM.
Si usaste la autenticación de la base de datos de IAM, verifica los detalles del mensaje de error. Puedes encontrar el mensaje de error en el registro de errores de la base de datos. Si indica que el token de acceso (OAuth 2.0) que enviaste como contraseña no es válido, puedes usar el comando gcloud
de gcloud auth application-default print-access-token
para encontrar detalles del token, de la siguiente manera:
curl -H "Content-Type: application/x-www-form-urlencoded" \ -d "access_token=$(gcloud auth application-default print-access-token)" \ https://www.googleapis.com/oauth2/v1/tokeninfo
Verifica que el token sea para la cuenta de servicio o el usuario de IAM previsto y que no haya vencido.
Si los detalles indican la falta de permisos, verifica que la cuenta de servicio o el usuario de IAM tenga el permiso cloudsql.instances.login
usando el rol predefinido Cloud SQL Instance User
o un rol personalizado en la política de IAM del proyecto de la instancia. Usa el solucionador de problemas de políticas de IAM para obtener ayuda adicional.
Si un acceso falla debido a la falta de disponibilidad de autenticación de la base de datos de IAM, el usuario puede acceder mediante el usuario y la contraseña predeterminados de PostgreSQL. Este método de acceso aún permite que el usuario acceda a toda la base de datos. Verifica que la conexión sea segura.
¿Qué sigue?
- Obtén más información sobre la autenticación de bases de datos de IAM.
- Obtén información para acceder a una base de datos de Cloud SQL.
- Obtén información sobre cómo configurar instancias para la autenticación de la base de datos de IAM.