Administra usuarios con autenticación de la base de datos de IAM

En esta página, se describe cómo agregar y administrar usuarios, cuentas de servicio y grupos a una instancia de Cloud SQL 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 Autenticación de IAM.

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

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

    Ir a la página IAM

  11. Habilita la autenticación de la base de datos de IAM en tu instancia de Cloud SQL.
  12. Asigna el rol cloudsql.instanceUser de IAM necesario a principales de IAM, como Usuarios de IAM, cuentas de servicio ogrupos para acceder a la instancia de Cloud SQL.
  13. Si usas una cuenta de servicio, asegúrate de haber agregado una cuenta de servicio para cada servicio que requiera acceso a las bases de datos del proyecto.
  14. Para obtener más información sobre cómo crear cuentas de servicio, consulta Crea cuentas de servicio.

Agrega una política de IAM vinculante para un usuario, una cuenta de servicio o un grupo

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, example-user@example.com. Debe estar en minúsculas y usar comillas porque contiene caracteres especiales (@ y .).

Console

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

  2. Haz clic en Agregar.
  3. 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.
  4. En Rol, navega a Cloud SQL y selecciona Usuario de instancia de Cloud SQL.
  5. Opcional: Si deseas conectarte mediante el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, también selecciona Cliente de Cloud SQL.
  6. 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: Es la dirección de correo electrónico del usuario.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Si deseas conectarte con el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, 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
  

Si deseas conectarte con el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, vuelve a ejecutar gcloud projects add-iam-policy-binding con la marca --role=roles/cloudsql.client.

Agrega una vinculación de políticas a un grupo de Cloud Identity

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto que deseas que los miembros del grupo usen.
  • GROUP_EMAIL_ADDRESS: la dirección de correo electrónico del grupo. Por ejemplo, example-group@example.com.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=group:GROUP_EMAIL_ADDRESS \
    --role=roles/cloudsql.instanceUser
   

A todos los miembros del grupo especificado se les otorga el rol de usuario de instancia de Cloud SQL y pueden acceder a las instancias de este proyecto.

Si deseas conectarte con el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, 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.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

resource "google_project_iam_binding" "cloud_sql_client" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.client"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

Aplique 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

  1. Inicia Cloud Shell
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. 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!”.

  3. 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:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. 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

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.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

Aplique 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

  1. Inicia Cloud Shell
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. 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!”.

  3. 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:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. 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:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Agrega un usuario individual o una cuenta de servicio de IAM a una instancia de Cloud SQL

Debes crear una cuenta de usuario nueva para cada usuario de IAM individual o cuenta de servicio que agregues a la instancia de Cloud SQL para acceder a las bases de datos. Si agregas un grupo de IAM, no necesitas crear una cuenta de usuario para cada miembro de ese grupo.

El nombre de usuario de la base de datos debe ser la dirección de correo electrónico del usuario de IAM y estar en minúsculas. Por ejemplo, example-user@example.com.

Cuando usas comandos de REST, el nombre de usuario debe usar comillas porque contiene caracteres especiales (@ y .). Las cuentas de servicio usan el formato service-account-name@project-id.iam.gserviceaccount.com.

Para agregar un usuario individual o una cuenta de servicio de IAM, agrega una cuenta de usuario nueva y selecciona IAM como método de autenticación:

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Usuarios en el menú de navegación de SQL.
  4. Haz clic en Agregar cuenta de usuario. Se abrirá la pestaña Agregar una cuenta de usuario a la instancia instance_name.
  5. Haz clic en el botón de selección Cloud IAM.
  6. Agrega la dirección de correo electrónico del usuario o la cuenta de servicio que desees agregar en el campo Principal.
  7. Haz clic en Agregar. La cuenta de usuario o de servicio ahora está en la lista de cuentas de usuario.
  8. Si el usuario no tiene asignado el rol de IAM cloudsql.instanceUser después de crear la cuenta de usuario, aparecerá un ícono de triángulo junto al nombre de usuario.

    Para otorgar los permisos de acceso al usuario, haz clic en el ícono y, luego, selecciona Agregar rol de IAM. Si el ícono ya no aparece, a la cuenta de usuario se le asigna el rol de IAM que otorga el permiso de acceso.

gcloud

Crear una cuenta de usuario

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

Reemplaza lo siguiente:

  • USERNAME: Es la dirección de correo electrónico del usuario.
  • INSTANCE_NAME: 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: La dirección de correo electrónico de la cuenta de servicio.
  • INSTANCE_NAME: 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.

resource "google_sql_database_instance" "default" {
  name             = "postgres-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

# Specify the email address of the IAM user to add to the instance
# This resource does not create a new IAM user account; this account must
# already exist

resource "google_sql_user" "iam_user" {
  name     = "test-user@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_USER"
}

# Specify the email address of the IAM service account to add to the instance
# This resource does not create a new IAM service account; this service account
# must already exist

# Create a new IAM service account

resource "google_service_account" "default" {
  account_id   = "cloud-sql-postgres-sa"
  display_name = "Cloud SQL for Postgres Service Account"
}

resource "google_sql_user" "iam_service_account_user" {
  # Note: for PostgreSQL only, Google Cloud requires that you omit the
  # ".gserviceaccount.com" suffix
  # from the service account email due to length limits on database usernames.
  name     = trimsuffix(google_service_account.default.email, ".gserviceaccount.com")
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Aplique 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

  1. Inicia Cloud Shell
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. 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!”.

  3. 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:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. 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 del proyecto
  • INSTANCE_ID: El ID de la instancia a la que le estás agregando el usuario
  • USERNAME: la dirección de correo electrónico del usuario

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 la cuenta de servicio.
  • PROJECT_ID: El ID del proyecto
  • INSTANCE_ID: El ID de la instancia a la que agregarás la cuenta de servicio

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 del proyecto
  • INSTANCE_ID: El ID de la instancia a la que le estás agregando el usuario
  • USERNAME: la dirección de correo electrónico del usuario

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 la cuenta de servicio.
  • PROJECT_ID: El ID del proyecto
  • INSTANCE_ID: El ID de la instancia a la que agregarás la cuenta de servicio

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 un grupo de IAM a una instancia de Cloud SQL

Para usar la autenticación de grupos de IAM y agregar un grupo de IAM a una instancia de Cloud SQL, usa uno de los procedimientos de esta sección. Después de agregar el grupo de IAM, no es necesario que agregues los miembros individuales del grupo a la instancia. Para obtener más información, consulta Agrega miembros de un grupo a una instancia de Cloud SQL de forma automática.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Usuarios en el menú de navegación de SQL.
  4. Haz clic en Agregar cuenta de usuario. Se abrirá la pestaña Agregar una cuenta de usuario a la instancia instance_name.
  5. Haz clic en el botón de selección Cloud IAM.
  6. Agrega la dirección de correo electrónico del grupo que deseas agregar en el campo Principal.
  7. Haz clic en Agregar. El grupo ahora está en la lista de usuarios.
  8. Si el grupo no tiene asignado el rol de IAM cloudsql.instanceUser después de crear la cuenta de usuario, aparecerá un ícono de triángulo junto al grupo.

    Para otorgar permisos de acceso a los miembros del grupo, haz clic en el ícono y, luego, selecciona Agregar rol de IAM. Si el ícono ya no aparece, se asignará el rol que otorga el permiso de acceso a todos los miembros del grupo.

gcloud

Reemplaza lo siguiente:

  • GROUP_EMAIL_ADDRESS: la dirección de correo electrónico del grupo de Cloud Identity que deseas agregar a la instancia. Por ejemplo, example-group@example.com.
  • INSTANCE_NAME: el nombre de la instancia en la que deseas agregar el grupo

Ejecuta el siguiente comando:

gcloud sql users create GROUP_EMAIL_ADDRESS \
  --instance=INSTANCE_NAME \
  --type=cloud_iam_group

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.

resource "google_sql_database_instance" "default" {
  name             = "postgres-iam-group-auth-instance-name"
  region           = "us-west4"
  database_version = "POSTGRES_16"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

# Specify the email address of the Cloud Identity group to add to the instance
# This resource does not create a Cloud Identity group; the group must
# already exist

resource "google_sql_user" "iam_group" {
  name     = "example-group@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_GROUP"
}

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

Aplique 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

  1. Inicia Cloud Shell
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. 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!”.

  3. 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:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. 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

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 a la que agregarás el grupo de Cloud Identity
  • GROUP_EMAIL: la dirección de correo electrónico para el grupo de Cloud Identity

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

Cuerpo JSON de la solicitud:

{
  "name": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

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": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-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"
}

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 a la que agregarás el grupo de Cloud Identity
  • GROUP_EMAIL: la dirección de correo electrónico para el grupo de Cloud Identity

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": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

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": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-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"
}

Agrega miembros de un grupo a una instancia de Cloud SQL de forma automática

Cuando agregas un grupo de IAM a una instancia de Cloud SQL, todos los miembros (usuarios y cuentas de servicio) de ese grupo heredan los permisos de IAM para autenticarse en la instancia. No es necesario que agregues el miembro del grupo de forma individual a la instancia de Cloud SQL. Después de que un miembro del grupo acceda y se autentique correctamente en la instancia principal por primera vez, Cloud SQL crea una cuenta de usuario o de servicio del grupo para ese miembro. Puedes ver al miembro del grupo en la instancia después de su primer acceso exitoso.

Cuando se produce la conmutación por error, siempre que la instancia de conmutación por error tenga los grupos adecuados, los usuarios del grupo de IAM pueden seguir accediendo y creándose.

Para obtener más información sobre el acceso, consulta Accede con la autenticación de la base de datos de IAM.

Migra los usuarios de IAM existentes para que usen la autenticación de grupos de IAM

Los usuarios de IAM existentes de tipo CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT no usan la autenticación de grupos de IAM.

Puedes migrar estos usuarios para que usen la autenticación de grupos de IAM.

  1. Agrega estos usuarios a un grupo.

  2. Agrega el grupo a tu instancia.

  3. Asigna al grupo suficientes permisos de IAM para permitir que los miembros del grupo se conecten a tus instancias. Es posible que estos cambios tarden en propagarse. Para obtener más información sobre los tiempos de propagación, consulta Propagación de cambios de acceso.

  4. Asigna los privilegios de base de datos a los usuarios de IAM que vas a migrar al grupo.

  5. Después de que se apliquen los cambios en la membresía del grupo y los permisos de IAM, borra el usuario de IAM existente de tu instancia. La próxima vez que el usuario de IAM acceda correctamente, se recreará como un usuario de grupo de IAM que puede usar la autenticación de grupos de IAM.

Administra miembros de un grupo en una instancia de Cloud SQL

Cuando agregas un grupo de IAM a una instancia de Cloud SQL, todos los miembros (cuentas de usuario o de servicio) de ese grupo heredan el permiso de IAM para autenticarse en la instancia. Puedes controlar el acceso a una instancia si administras el grupo en Cloud Identity. Por ejemplo, si deseas otorgar a un usuario nuevo acceso a una instancia, agrégalo como un miembro del grupo en Cloud Identity. No necesitas quitar o agregar miembros del grupo por separado a nivel de la instancia de Cloud SQL, ya que los cambios en la membresía del grupo se propagan a la instancia de Cloud SQL automáticamente. Los cambios en la membresía de un grupo, como la adición o eliminación de un miembro, tardan unos 15 minutos en propagarse. Esto se suma al tiempo requerido para los cambios de IAM.

El otorgamiento o la revocación de privilegios de base de datos para un grupo de IAM en PostgreSQL se aplica de inmediato. Por ejemplo, si revocas el acceso a una tabla, los miembros de ese grupo de IAM perderán el acceso a esa tabla de inmediato.

Es posible que un usuario o una cuenta de servicio sea miembro de varios grupos de IAM. Si un usuario o una cuenta de servicio pertenece a varios grupos de IAM en una instancia, tiene todos los permisos de IAM y los privilegios de la base de datos combinados de cada uno de esos grupos de IAM.

Cuando agregas un miembro nuevo (usuario o cuenta de servicio) al grupo de IAM en Cloud Identity y este accede a la instancia con éxito por primera vez, hereda los privilegios de la base de datos otorgados al grupo automáticamente.

Otorga privilegios de base de datos a un usuario o una cuenta de servicio de IAM individuales

Cuando se agrega un usuario o servicio de IAM individual a una instancia de Cloud SQL, a esa cuenta nueva no se le otorgan privilegios en ninguna base de datos de forma predeterminada. Solo pueden ejecutar consultas en cualquier objeto de la base de datos cuyo acceso se le haya otorgado a 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";

Otorga privilegios de base de datos a un grupo de IAM

Cuando usas la autenticación de grupos de IAM, otorgas privilegios de base de datos a grupos de IAM en lugar de otorgar privilegios a usuarios individuales o cuentas de servicio. De forma predeterminada, cuando agregas un grupo de IAM a una instancia de Cloud SQL, el grupo no tiene privilegios de base de datos.

Para otorgar privilegios de base de datos al grupo de IAM, usa la instrucción GRANT. Después de acceder a la instancia de Cloud SQL por primera vez, cada miembro del grupo (incluidos los usuarios y las cuentas de servicio) hereda los privilegios de la base de datos otorgados al grupo automáticamente.

Reemplaza lo siguiente:

  • GROUP_NAME: la dirección de correo electrónico del grupo de Cloud Identity, incluido el @ y el nombre de dominio. Por ejemplo, si la dirección de correo electrónico del grupo de IAM es example-group@example.com, el nombre del grupo es example-group@example.com. Debes usar comillas alrededor del nombre del grupo porque la cadena contiene caracteres especiales (@ y .).
  • TABLE_NAME: Es el nombre de la tabla a la que deseas que se otorgue acceso al usuario.

Ejecuta GRANT desde la línea de comandos de psql.

grant select on TABLE_NAME to "GROUP_NAME";

Para obtener más información sobre cómo otorgar privilegios, consulta la página de referencia de GRANT en la documentación de PostgreSQL.

Los privilegios de base de datos que otorgas al grupo de IAM se aplicarán de inmediato.

Visualiza los usuarios, las cuentas de servicio y los grupos de IAM agregados a una instancia de Cloud SQL

Para ver los usuarios de IAM, las cuentas de servicio y los grupos que se agregaron a tu instancia de Cloud SQL, ejecuta los siguientes comandos.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Usuarios en el menú de navegación de SQL. En la página, se muestra una lista de los usuarios de IAM, las cuentas de servicio y los grupos de Cloud Identity que se agregaron a tu instancia.
  4. Opcional: Para ver una lista de usuarios o cuentas de servicio de IAM que ya accedieron a la instancia, haz clic en Miembros del grupo de IAM autenticados.

gcloud

Reemplaza INSTANCE_NAME por el nombre de la instancia que tiene los grupos que deseas ver.

  gcloud sql users list --instance=INSTANCE_NAME
  

Los grupos tienen un tipo de usuario de CLOUD_IAM_GROUP.

En el resultado, también se enumeran las cuentas de usuario y de servicio en la instancia de Cloud SQL.

  • Las cuentas de usuario que son miembros de un grupo tienen el tipo de CLOUD_IAM_GROUP_USER.
  • Las cuentas de servicio que son miembros de un grupo tienen el tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Las cuentas de usuario que son cuentas de usuario de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_USER.
  • Las cuentas de servicio que son cuentas de servicio de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_SERVICE_ACCOUNT.

REST v1

En la siguiente solicitud, se usa el método users.list para mostrar una lista de los usuarios que tienen cuentas en la instancia de Cloud SQL.

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:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list

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#usersList",
  "items": [
    {
     "kind": "sql#user",
     "etag": "--redacted--",
     "name": "example-service-acct@PROJECT_ID.iam",
     "host": "",
     "instance": "INSTANCE_ID",
     "project": "PROJECT_ID",
     "type": "CLOUD_IAM_SERVICE_ACCOUNT"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-service-acct@PROJECT_ID.iam",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT"
     },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "postgres",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-group@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP"
    }
  ]
}

Los grupos tienen un tipo de usuario de CLOUD_IAM_GROUP.

En el resultado, también se enumeran las cuentas de usuario y de servicio en la instancia de Cloud SQL.

  • Las cuentas de usuario que son miembros de un grupo tienen el tipo de CLOUD_IAM_GROUP_USER.
  • Las cuentas de servicio que son miembros de un grupo tienen el tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Las cuentas de usuario que son cuentas de usuario de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_USER.
  • Las cuentas de servicio que son cuentas de servicio de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_SERVICE_ACCOUNT.

REST v1beta4

En la siguiente solicitud, se usa el método users.list para mostrar una lista de los usuarios que tienen cuentas en la instancia de Cloud SQL.

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

Método HTTP y URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

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#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

Los grupos tienen un tipo de usuario de CLOUD_IAM_GROUP.

En el resultado, también se enumeran las cuentas de usuario y de servicio en la instancia de Cloud SQL.

  • Las cuentas de usuario que son miembros de un grupo tienen el tipo de CLOUD_IAM_GROUP_USER.
  • Las cuentas de servicio que son miembros de un grupo tienen el tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Las cuentas de usuario que son cuentas de usuario de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_USER.
  • Las cuentas de servicio que son cuentas de servicio de autenticación de base de datos de IAM individuales tienen el tipo de CLOUD_IAM_SERVICE_ACCOUNT.

Quita una cuenta de servicio o un usuario de IAM individual de una instancia de Cloud SQL

Para quitar un usuario individual o una cuenta de servicio que no es miembro de un grupo de la instancia de Cloud SQL, borra esa cuenta con el siguiente comando:

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Usuarios en el menú de navegación de SQL.
  4. Haz clic en para encontrar el usuario que deseas quitar.
  5. Selecciona Quitar. Esto solo revoca el acceso a esta instancia.

gcloud

Revoca un usuario

Usa el correo electrónico, como example-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 individual

Reemplaza lo siguiente:

  • SERVICE_ACCT: 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"
}

Quita miembros de grupos de IAM de una instancia de Cloud SQL

Existen dos maneras de quitar miembros de grupos de IAM de una instancia de Cloud SQL:

  • Eliminación automática
  • Eliminación manual

Eliminación automática

Para quitar un miembro del grupo de IAM, debes quitar su membresía de los grupos de IAM aplicables en Cloud Identity. Después de que los usuarios del grupo de IAM pierden la membresía de todos los grupos aplicables en Cloud Identity, Cloud SQL quita a esos usuarios del grupo de la instancia automáticamente. La única excepción a esta eliminación son los usuarios de grupos que son propietarios de objetos de bases de datos. Estos usuarios del grupo se deben quitar de forma manual.

Los cambios en la membresía de un grupo, como la adición o eliminación de un miembro, tardan unos 15 minutos en propagarse. Esto se suma al tiempo requerido para los cambios de IAM.

Eliminación manual

En los casos en que no se pueda quitar automáticamente un usuario del grupo de IAM, puedes quitarlo de forma manual. No puedes quitar manualmente un usuario de un grupo de IAM de una instancia de Cloud SQL con gcloud CLI, la consola de Google Cloud, Terraform ni la API de Cloud SQL Admin. En su lugar, los usuarios de la base de datos con privilegios de superusuario pueden borrar de forma manual los usuarios del grupo de IAM desde la instancia de Cloud SQL mediante una instrucción DROP USER de un cliente PostgreSQL.

Después de quitar manualmente un usuario de un grupo de IAM de la instancia de Cloud SQL, asegúrate de quitarlo también del grupo de IAM en Cloud Identity para evitar más accesos a la instancia de Cloud SQL.

Borra un grupo de IAM de una instancia de Cloud SQL

Puedes borrar los grupos de IAM agregados de la instancia de Cloud SQL. Después de borrar un grupo de IAM de la instancia, todos los usuarios y las cuentas de servicio que pertenecen al grupo de IAM pierden los privilegios de base de datos que se otorgaron al grupo de IAM. Además, se aplican las siguientes condiciones:

  • Los usuarios y las cuentas de servicio que pertenecen al grupo de IAM siguen pudiendo acceder hasta que se quite del grupo el permiso de IAM cloudsql.instances.login.
  • Si la eliminación de un grupo hace que el usuario o las cuentas de servicio del grupo de IAM no pertenezcan a ningún otro grupo de la instancia, Cloud SQL quita el usuario o las cuentas de servicio del grupo de IAM de la instancia.
  • Sin embargo, si un usuario de un grupo de IAM es propietario de un objeto de base de datos en la instancia, debes reasignar la propiedad del objeto antes de poder borrar al usuario de forma manual.

Si borras todos los grupos de IAM de una instancia de Cloud SQL, todos los usuarios y las cuentas de servicio del grupo de IAM pierden todos sus privilegios de base de datos. Además, se aplican las siguientes condiciones:

  • Todos los usuarios del grupo de IAM y las cuentas de servicio no pueden acceder a la instancia.
  • Cloud SQL también quita todos los usuarios y las cuentas de servicio del grupo de IAM de la instancia automáticamente.
  • Sin embargo, si un usuario de un grupo de IAM es propietario de un objeto de base de datos en la instancia, debes reasignar la propiedad del objeto antes de poder borrar al usuario de forma manual.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Usuarios en el menú de navegación de SQL.
  4. Haz clic en para encontrar el grupo que deseas quitar.
  5. Selecciona Quitar. Esto solo revoca el acceso a esta instancia.

gcloud

Para borrar un grupo de Cloud Identity de una instancia, usa el comando gcloud sql users delete.

Reemplaza lo siguiente:

  • GROUP_NAME: la primera parte de la dirección de correo electrónico del grupo de Cloud Identity. Por ejemplo, con la dirección de correo electrónico example-group@example.com, el nombre del grupo de Cloud Identity es example-group.
  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL con el grupo de Cloud Identity que deseas borrar.
gcloud sql users delete GROUP_NAME \
   --instance=INSTANCE_NAME

Quita los permisos de acceso de IAM de un grupo de IAM

Si revocas el rol cloudsql.instanceUser de un grupo de Cloud Identity, todos los miembros del grupo perderán la capacidad de acceder a cualquier instancia de Cloud SQL en el proyecto. Las cuentas de usuario o de servicio solo pueden acceder a instancias si son miembros de otro grupo de Cloud Identity que aún tiene permisos de acceso.

Para revocar un rol de un grupo de Cloud Identity, consulta Revoca un solo rol.

Quita usuarios de un grupo de IAM

Los miembros del grupo de IAM, como los usuarios o las cuentas de servicio, se pueden quitar del grupo de IAM en Cloud Identity.

Después de que la eliminación se haya propagado a través de IAM, el usuario ya no puede acceder a la base de datos, a menos que haya recibido permisos de acceso de otro grupo o se le otorguen privilegios de acceso directamente. Además, los usuarios que se quitan de un grupo pierden los privilegios de la base de datos del grupo.

Si un usuario del grupo de IAM no pertenece a ningún grupo de la instancia, Cloud SQL lo quita de forma automática de la instancia. Sin embargo, si Cloud SQL detecta que un usuario de un grupo de IAM es propietario de un objeto en la instancia, no lo quita. Un administrador debe reasignar la propiedad del objeto y quitar al usuario de forma manual.

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.

En la autenticación de grupos de IAM, los registros de auditoría muestran la actividad y los accesos de las cuentas de usuarios y de servicio individuales.

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.

Soluciona problemas de cuentas de usuario que usan la autenticación de grupos de IAM

En esta sección, se enumeran las situaciones de solución de problemas para la autenticación de grupos de IAM.

No se pudo agregar un grupo a una base de datos

Cuando intentas agregar un grupo a una instancia, es posible que recibas el siguiente error:

(gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.

Asegúrate de que la dirección de correo electrónico que proporcionaste sea un grupo válido.

Si el grupo aún no existe, crea el grupo. Para obtener más información sobre cómo crear grupos, consulta Crea y administra grupos de Google en la consola de Google Cloud.

Si recibes el siguiente error, haz lo siguiente:

(gcloud.sql.users.create) HTTPError 400: Invalid request: IAM Group Authentication is disabled.

Luego, antes de que puedas usar la autenticación de grupos de IAM, tu instancia de Cloud SQL requiere la siguiente actualización de mantenimiento:

R20240514.00_04 o posterior

Puedes aplicar la actualización de mantenimiento a tu instancia con el mantenimiento de autoservicio. Para obtener más información, consulta Mantenimiento de autoservicio.

Una cuenta de usuario o de servicio de IAM existente no hereda los privilegios de base de datos otorgados a su grupo de IAM

Si una cuenta de usuario o de servicio de IAM existente no hereda los privilegios de base de datos correctos de su grupo, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

    Verifica que la cuenta sea miembro del grupo que se agregó a la instancia de Cloud SQL.

  2. Enumera las cuentas de usuario y de servicio de la instancia.

    gcloud sql users list --instance=INSTANCE_NAME

    En el resultado, verifica si la cuenta de usuario o de servicio aparecen como CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT.

  3. Si la cuenta de usuario o de servicio aparecen como CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT, quita la cuenta de la instancia. La cuenta que quitas es una cuenta de IAM individual que no hereda los privilegios de base de datos del grupo.

  4. Vuelve a acceder a la instancia con la cuenta de usuario o de servicio.

    Acceder nuevamente a la instancia vuelve a crear la cuenta con el tipo de cuenta correcto de CLOUD_IAM_GROUP_USER o CLOUD_IAM_GROUP_SERVICE_ACCOUNT.

¿Qué sigue?