Crea y administra usuarios que usan la autenticación de la base de datos de IAM

En esta página, se describe cómo crear y administrar un usuario o una cuenta de servicio que usa la autenticación de la base de datos de IAM. Para obtener más información sobre la integración de IAM, consulta Descripción general de la autenticación de la base de datos de IAM.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Instala e inicializa el SDK de Cloud.
  5. Habilita las Cloud Key Management Service API.

    Habilita la API

  6. Asegúrate de tener la función de administrador de Cloud SQL en tu cuenta de usuario.

    Ir a la página IAM

Crea una cuenta de servicio o un usuario que use la autenticación de la base de datos de IAM

Debes agregar el usuario a cada instancia que contenga las bases de datos a las que el usuario necesita acceder. Una vez que lo hayas hecho, el usuario podrá acceder a todas las instancias y bases de datos del proyecto.

Para crear una cuenta de servicio o un usuario de base de datos que use la autenticación de la base de datos de IAM, haz lo siguiente:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en la instancia para abrir la página Descripción general.
  3. Selecciona Usuarios en el menú de navegación.
  4. Haz clic en AGREGAR CUENTA DE USUARIO.
  5. Deja seleccionado el botón de IAM y agrega la dirección de correo electrónico en Miembro. La cuenta de usuario ya debe tener asignada la función del usuario de instancias de Cloud SQL. Para obtener más información, consulta Otorga acceso a una cuenta de servicio o un usuario.
  6. Haz clic en AGREGAR.

gcloud

Creación de usuarios

Usa el correo electrónico, como test-user@gmail.com, para identificar al usuario.

Reemplaza lo siguiente:

  • EMAIL: 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 beta sql users create EMAIL --instance=INSTANCE_NAME
    --type=cloud_iam_user

Creación de cuentas de servicio

Reemplaza lo siguiente:

  • EMAIL: Es la dirección de correo electrónico de la cuenta de servicio. Debido al límite de longitud en el nombre de usuario de la base de datos, debes omitir el sufijo .gserviceaccount.com en el correo electrónico. Por ejemplo, el nombre de usuario para la cuenta de servicio sa-name@project-id.iam.gserviceaccount.com debe ser sa-name@project-id.iam.
  • INSTANCE_NAME: Es el nombre de la instancia a la que deseas que la cuenta de servicio pueda acceder.
gcloud beta sql users create EMAIL --instance=INSTANCE_NAME
    --type=cloud_iam_service_account …

REST v1beta4

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/backupRuns

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Otorga acceso a un usuario o una cuenta de servicio

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@gmail.com. Debes usar comillas porque contiene caracteres especiales (@ y .).

El correo electrónico de la cuenta de servicio debe tener el formato ???@???.???.gserviceaccount.com.

Para otorgar acceso a un usuario o una cuenta de servicio, haz lo siguiente:

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. Haz clic en Agregar.
  3. En Nuevos miembros, ingresa una dirección de correo electrónico. Puedes agregar personas o cuentas de servicio como miembros, pero cada proyecto debe tener al menos a una persona como miembro.
  4. En Selecciona una función, navega a Cloud SQL y selecciona Usuario de instancia de Cloud SQL.
  5. Haz clic en Guardar.

gcloud

Ejecuta gcloud projects add-iam-policy-binding con la marca --role=roles/cloudsql.instanceUser.

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que deseas que el usuario pueda usar.
  • EMAIL: Es la dirección de correo electrónico del usuario.
Para una cuenta de usuario, ejecuta el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID
    --member=user:EMAIL --role=roles/cloudsql.instanceUser
Para una cuenta de servicio, ejecuta el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID
    --member=serviceAccount:EMAIL --role=roles/cloudsql.instanceUser

Otorga privilegios de base de datos al usuario de Cloud SQL

Antes de que un usuario o una cuenta de servicio pueda conectarse a una base de datos o ejecutar consultas en ella, debe tener privilegios para esa base de datos. Los privilegios que puedes otorgar incluyen SELECT, INSERT, UPDATE, DELETE, CREATE, CONNECT y otros. 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 de postgres, por ejemplo:

Reemplaza lo siguiente:

  • EMAIL: Es la dirección de correo electrónico del usuario. Debes usar comillas alrededor del correo electrónico porque contiene caracteres especiales (@ y .).
  • SCHEMA_NAME: Es el nombre del esquema de las tablas.
postgres=> grant all on all tables in schema SCHEMA_NAME to "EMAIL";

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.

Nota: Audit Logging genera costos adicionales. Si deseas obtener más información, consulta Precios para registrar datos.

Una vez configurado, puedes ver los registros de auditoría de acceso a los datos de los accesos exitosos mediante el Visor 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: "..."
}

Solución de 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 Console o el comando gcloud beta 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. Para una cuenta de servicio, verifica que sea el correo electrónico de la cuenta de servicio sin el sufijo de dominio .gserviceaccount.com.

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 que no tienen permiso, verifica que la cuenta de servicio o el usuario de IAM tenga el permiso cloudsql.instances.login mediante la función predefinida Cloud SQL Instance User o una función personalizada 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.

Próximos pasos