Gestionar usuarios con la autenticación de bases de datos de gestión de identidades y accesos

En esta página se describe cómo añadir y gestionar usuarios, cuentas de servicio y grupos en una instancia de Cloud SQL que usa la autenticación de bases de datos de gestión de identidades y accesos.

Para obtener más información sobre la integración de IAM, consulta Autenticación de IAM.

Antes de empezar

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the gcloud CLI.

  5. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  6. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  11. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  12. Asegúrate de que tu cuenta de usuario tenga el rol Administrador de Cloud SQL.

    Ir a la página de gestión de identidades y accesos

  13. Habilita la autenticación de bases de datos de gestión de identidades y accesos en tu instancia de Cloud SQL.
  14. Asigna el rol de cloudsql.instanceUser gestión de identidades y accesos necesario a las entidades de gestión de identidades y accesos, como usuarios de gestión de identidades y accesos, cuentas de servicio o grupos, para iniciar sesión en la instancia de Cloud SQL.
    • Si vas a añadir un usuario o una cuenta de servicio concretos a la instancia de Cloud SQL, debes asignar el rol de IAM individualmente a cada usuario y cuenta de servicio.
    • Si añades un grupo, debes asignar el rol de gestión de identidades y accesos al grupo, ya que los miembros del grupo heredarán automáticamente los permisos de gestión de identidades y accesos asociados al rol. Para obtener más información sobre cómo crear grupos en Cloud Identity, consulta el artículo Crear y gestionar grupos de Google en la consola Google Cloud .
    • Puede asignar el rol en un proyecto que contenga instancias de Cloud SQL mediante la página Gestión de identidades y accesos de la Google Cloud consola, la CLI de gcloud, Terraform o la API Cloud SQL Admin. Para obtener más información, consulta el artículo Añadir un enlace de política de IAM a un usuario, una cuenta de servicio o un grupo.
  15. Si usas una cuenta de servicio, asegúrate de haber añadido una cuenta de servicio para cada servicio que requiera acceso a las bases de datos del proyecto.
  16. Para obtener más información sobre cómo crear cuentas de servicio, consulta el artículo Crear cuentas de servicio.

    Añadir un enlace de política de IAM a un usuario, una cuenta de servicio o un grupo

    Este procedimiento añade un enlace de política a la política de gestión de identidades y accesos de un proyecto específico, dado un ID de proyecto y el enlace. El comando de vinculación consta de un miembro, un rol y una condición opcional.

    El nombre de usuario de la base de datos debe ser la dirección de correo del usuario de IAM. Por ejemplo, example-user@example.com. Debe estar en minúsculas y entre comillas, ya que contiene caracteres especiales (@ y .).

    Consola

    1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

      Ir a IAM

    2. Haz clic en Añadir.
    3. En Miembros nuevos, introduce una dirección de correo electrónico. Puedes añadir usuarios concretos, cuentas de servicio o grupos como miembros, pero cada proyecto debe tener al menos una entidad principal como miembro.
    4. En Rol, ve a Cloud SQL y selecciona Usuario de instancia de Cloud SQL.
    5. Opcional: Si quieres conectarte mediante el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, selecciona también Cliente de Cloud SQL.
    6. Haz clic en Guardar.

    gcloud

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

    Añadir un enlace de política a una cuenta de usuario

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto para el que quieres autorizar al usuario.
    • USERNAME: la dirección de correo del usuario.
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=user:USERNAME \
        --role=roles/cloudsql.instanceUser
      

    Si quieres conectarte mediante 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.

    Añadir un enlace de política a una cuenta de servicio

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto para el que quieres autorizar al usuario.
    • SERVICE_ACCT: la dirección de correo de la cuenta de servicio.
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCT \
        --role=roles/cloudsql.instanceUser
      

    Si quieres conectarte mediante 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.

    Añadir un enlace de política a un grupo de Cloud Identity

    Haz los cambios siguientes:

    • PROJECT_ID: ID del proyecto al que quieres autorizar a los miembros del grupo para que lo usen.
    • GROUP_EMAIL_ADDRESS: la dirección de correo 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
       

    Todos los miembros del grupo especificado tienen el rol Usuario de instancia de Cloud SQL y pueden iniciar sesión en las instancias de este proyecto.

    Si quieres conectarte mediante 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 añadir la vinculación de políticas necesaria a las cuentas de usuario y de servicio de gestión de identidades y accesos, 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}"
      ]
    }

    Aplica los cambios

    Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

    Preparar Cloud Shell

    1. Abre Cloud Shell.
    2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

      Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

    Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

      Copia el código de ejemplo en el archivo main.tf que acabas de crear.

      También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

    3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
    4. Guarda los cambios.
    5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
      terraform init

      Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

      terraform init -upgrade

    Aplica los cambios

    1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
      terraform plan

      Haga las correcciones necesarias en la configuración.

    2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply

      Espera hasta que Terraform muestre el mensaje "Apply complete!".

    3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

    Eliminar los cambios

    Para eliminar los cambios, sigue estos pasos:

    1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
      deletion_protection =  "false"
    2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply
    1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

      terraform destroy

    Terraform

    Para añadir la vinculación de políticas necesaria a las cuentas de usuario y de servicio de gestión de identidades y accesos, 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"
      ]
    }

    Aplica los cambios

    Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

    Preparar Cloud Shell

    1. Abre Cloud Shell.
    2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

      Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

    Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

      Copia el código de ejemplo en el archivo main.tf que acabas de crear.

      También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

    3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
    4. Guarda los cambios.
    5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
      terraform init

      Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

      terraform init -upgrade

    Aplica los cambios

    1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
      terraform plan

      Haga las correcciones necesarias en la configuración.

    2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply

      Espera hasta que Terraform muestre el mensaje "Apply complete!".

    3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

    Eliminar los cambios

    Para eliminar los cambios, sigue estos pasos:

    1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
      deletion_protection =  "false"
    2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply
    1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

      terraform destroy

    REST

    Asigna los roles cloudsql.instanceUser y cloudsql.client a ambos tipos de cuentas editando la política de vinculación JSON o YAML que devuelve el comando get-iam-policy. Ten en cuenta que este cambio en la política no entrará en vigor hasta que establezcas 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"
          ]
        }

    Añadir un usuario o una cuenta de servicio de IAM a una instancia de Cloud SQL

    Debes crear una cuenta de usuario para cada usuario de gestión de identidades y accesos o cuenta de servicio que añadas a la instancia de Cloud SQL para acceder a las bases de datos. Si añades un grupo de gestión de identidades y accesos, no tienes que 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 del usuario de IAM y estar en minúsculas. Por ejemplo, example-user@example.com.

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

    Para añadir un usuario o una cuenta de servicio de gestión de identidades y accesos, añade una cuenta de usuario y selecciona Gestión de identidades y accesos como método de autenticación:

    Consola

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

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En el menú de navegación de SQL, selecciona Usuarios.
    4. Haz clic en Añadir cuenta de usuario. Se abre la pestaña Añadir una cuenta de usuario a la instancia instance_name.
    5. Haz clic en el botón de selección Cloud IAM.
    6. Añade la dirección de correo del usuario o de la cuenta de servicio que quieras añadir en el campo Principal.
    7. Haz clic en Añadir. El usuario o la cuenta de servicio ahora se encuentran en la lista de cuentas de usuario.
    8. Si el usuario no tiene asignado el rol de gestión de identidades y accesos cloudsql.instanceUser después de crear la cuenta de usuario, aparecerá el icono triángulo junto al nombre de usuario.

      Para conceder permisos de inicio de sesión al usuario, haga clic en el icono y, a continuación, seleccione Añadir rol de IAM. Si el icono ya no aparece, significa que a la cuenta de usuario se le ha asignado el rol de gestión de identidades y accesos que le da permiso para iniciar sesión.

    gcloud

    Crear una cuenta de usuario

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

    Haz los cambios siguientes:

    • USERNAME: la dirección de correo del usuario.
    • INSTANCE_NAME: el nombre de la instancia a la que quieres autorizar el acceso del usuario.
    gcloud sql users create USERNAME \
    --instance=INSTANCE_NAME \
    --type=cloud_iam_user

    Crear una cuenta de servicio

    Haz los cambios siguientes:

    • SERVICE_ACCT: la dirección de correo de la cuenta de servicio.
    • INSTANCE_NAME: el nombre de la instancia a la que quieres autorizar el acceso de la cuenta de servicio.
    gcloud sql users create SERVICE_ACCT \
    --instance=INSTANCE_NAME \
    --type=cloud_iam_service_account

    Terraform

    Para añadir usuarios y cuentas de servicio de gestión de identidades y accesos en una instancia con la autenticación de bases de datos de gestión de identidades y accesos 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"
        }
      }
    }
    
    # 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"
    }

    Aplica los cambios

    Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

    Preparar Cloud Shell

    1. Abre Cloud Shell.
    2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

      Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

    Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

      Copia el código de ejemplo en el archivo main.tf que acabas de crear.

      También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

    3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
    4. Guarda los cambios.
    5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
      terraform init

      Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

      terraform init -upgrade

    Aplica los cambios

    1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
      terraform plan

      Haga las correcciones necesarias en la configuración.

    2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply

      Espera hasta que Terraform muestre el mensaje "Apply complete!".

    3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

    Eliminar los cambios

    Para eliminar los cambios, sigue estos pasos:

    1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
      deletion_protection =  "false"
    2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply
    1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

      terraform destroy

    REST v1

    Crear una cuenta de usuario

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia de la instancia a la que vas a añadir el usuario
    • USERNAME: la dirección de correo 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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"
    }
    

    Crear una cuenta de servicio

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • SERVICE_ACCT: el correo de la cuenta de servicio
    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia de la instancia a la que vas a añadir 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
    "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 los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia de la instancia a la que vas a añadir el usuario
    • USERNAME: la dirección de correo 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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"
    }
    

    Crear una cuenta de servicio

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • SERVICE_ACCT: el correo de la cuenta de servicio
    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia de la instancia a la que vas a añadir 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
    "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"
    }
    

    Añadir un grupo de IAM a una instancia de Cloud SQL

    Para usar la autenticación de grupos de IAM y añadir un grupo de IAM a una instancia de Cloud SQL, sigue uno de los procedimientos de esta sección. Después de añadir el grupo de gestión de identidades y accesos, no es necesario que añadas a los miembros del grupo a la instancia. Para obtener más información, consulta Añadir automáticamente miembros de un grupo a una instancia de Cloud SQL.

    Los nombres de grupos de IAM tienen las mismas limitaciones de longitud que los identificadores de PostgreSQL y solo pueden tener 63 caracteres.

    Si tienes un grupo de IAM con un nombre que supera la limitación de longitud del nombre de usuario de un motor de base de datos, puedes seguir usándolo para la autenticación de grupos de IAM anidándolo en un grupo de IAM principal cuyo nombre cumpla la limitación de longitud. El grupo de IAM principal debe añadirse a la instancia para que se pueda usar el grupo anidado.

    Consola

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

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En el menú de navegación de SQL, selecciona Usuarios.
    4. Haz clic en Añadir cuenta de usuario. Se abre la pestaña Añadir una cuenta de usuario a la instancia instance_name.
    5. Haz clic en el botón de selección Cloud IAM.
    6. Añade la dirección de correo del grupo que quieras añadir en el campo Principal.
    7. Haz clic en Añadir. El grupo ahora aparece en la lista de usuarios.
    8. Si el grupo no tiene asignado el rol de gestión de identidades y accesos cloudsql.instanceUser después de crear la cuenta de usuario, aparecerá el icono triángulo junto al grupo.

      Para dar permisos de inicio de sesión a los miembros del grupo, haz clic en el icono y, a continuación, selecciona Añadir rol de gestión de identidades y accesos. Si el icono ya no aparece, significa que a todos los miembros del grupo se les ha asignado el rol que otorga el permiso de inicio de sesión.

    gcloud

    Haz los cambios siguientes:

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

    Ejecuta el siguiente comando:

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

    Terraform

    Para añadir usuarios y cuentas de servicio de gestión de identidades y accesos en una instancia con la autenticación de bases de datos de gestión de identidades y accesos 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"
        }
      }
    }
    
    # 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"
      ]
    }

    Aplica los cambios

    Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

    Preparar Cloud Shell

    1. Abre Cloud Shell.
    2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

      Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

    Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

      Copia el código de ejemplo en el archivo main.tf que acabas de crear.

      También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

    3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
    4. Guarda los cambios.
    5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
      terraform init

      Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

      terraform init -upgrade

    Aplica los cambios

    1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
      terraform plan

      Haga las correcciones necesarias en la configuración.

    2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply

      Espera hasta que Terraform muestre el mensaje "Apply complete!".

    3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

    Eliminar los cambios

    Para eliminar los cambios, sigue estos pasos:

    1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
      deletion_protection =  "false"
    2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply
    1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

      terraform destroy

    REST v1

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de la instancia a la que vas a añadir el grupo de Cloud Identity
    • GROUP_EMAIL: la dirección de correo del 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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 los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de la instancia a la que vas a añadir el grupo de Cloud Identity
    • GROUP_EMAIL: la dirección de correo del 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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"
    }
    

    Añadir automáticamente miembros de un grupo a una instancia de Cloud SQL

    Cuando añades 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 añadas a los miembros del grupo de forma individual a la instancia de Cloud SQL. Cuando un miembro de un grupo inicia sesión y se autentica correctamente en la instancia principal por primera vez, Cloud SQL crea una cuenta de usuario de grupo o una cuenta de servicio de grupo para ese miembro. Puedes ver el miembro del grupo en la instancia después de que haya iniciado sesión correctamente por primera vez.

    Tras la conmutación por error, siempre que la instancia de conmutación por error tenga los grupos adecuados, los usuarios del grupo de IAM podrán seguir iniciando sesión y creándose.

    Para obtener más información sobre el inicio de sesión, consulta el artículo Iniciar sesión mediante la autenticación de bases de datos de gestión de identidades y accesos.

    Migrar usuarios de gestión de identidades y accesos para que usen la autenticación de grupos de gestión de identidades y accesos

    Los usuarios de gestión de identidades y accesos de tipo CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT no usan la autenticación de grupos de gestión de identidades y accesos.

    Puedes migrar a estos usuarios para que usen la autenticación de grupos de gestión de identidades y accesos.

    1. Añade estos usuarios a un grupo.

    2. Añade el grupo a tu instancia.

    3. Asigna al grupo los permisos de gestión de identidades y accesos suficientes para que los miembros del grupo puedan conectarse a tus instancias. Estos cambios pueden tardar 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 la base de datos a los usuarios de IAM que vas a migrar al grupo.

    5. Una vez que se hayan aplicado los cambios en la pertenencia al grupo y los permisos de IAM, elimina el usuario de IAM de tu instancia. La próxima vez que el usuario de gestión de identidades y accesos inicie sesión correctamente, se volverá a crear como usuario de grupo de gestión de identidades y accesos, que podrá usar la autenticación de grupo de gestión de identidades y accesos.

    Gestionar los miembros de un grupo en una instancia de Cloud SQL

    Cuando añades un grupo de gestión de identidades y accesos a una instancia de Cloud SQL, todos los miembros (cuentas de usuario o de servicio) de ese grupo heredan el permiso de gestión de identidades y accesos para autenticarse en la instancia. Puedes controlar el acceso a una instancia gestionando el grupo en Cloud Identity. Por ejemplo, si quieres dar acceso a una instancia a un usuario nuevo, añádelo como miembro de un grupo en Cloud Identity. No es necesario que añadas ni quites miembros del grupo por separado a nivel de instancia de Cloud SQL, ya que los cambios en la pertenencia al grupo se propagan automáticamente a la instancia de Cloud SQL. Los cambios en la pertenencia al grupo, como añadir o quitar miembros, tardan unos 15 minutos en propagarse. El retraso de 15 minutos en la propagación de Cloud SQL se produce en paralelo al tiempo necesario para que se propaguen los cambios de IAM.

    Los privilegios de base de datos que se conceden o revocan a un grupo de gestión de identidades y accesos en PostgreSQL se aplican inmediatamente. Por ejemplo, si revocas el acceso a una tabla, los miembros de ese grupo de IAM perderán el acceso a esa tabla al instante.

    Un usuario o una cuenta de servicio pueden ser miembros de varios grupos de gestión de identidades y accesos. Si un usuario o una cuenta de servicio pertenece a varios grupos de gestión de identidades y accesos en una instancia, tendrá todos los permisos de gestión de identidades y accesos y los privilegios de base de datos combinados de cada uno de esos grupos.

    Cuando añades un nuevo miembro (usuario o cuenta de servicio) al grupo de IAM en Cloud Identity e inicia sesión en la instancia por primera vez, hereda automáticamente los privilegios de la base de datos concedidos al grupo.

    Conceder privilegios de base de datos a un usuario o una cuenta de servicio de IAM concretos

    Cuando se añade un usuario o un servicio de gestión de identidades y accesos a una instancia de Cloud SQL, de forma predeterminada, la nueva cuenta no tiene ningún privilegio en ninguna base de datos. Solo pueden ejecutar consultas en objetos de base de datos cuyo acceso se haya concedido a PUBLIC.

    Si necesitan más acceso, se pueden conceder más privilegios mediante la instrucción GRANT. Consulta la página de referencia de GRANT para ver una lista completa de los privilegios que puedes conceder a usuarios y cuentas de servicio. Ejecuta GRANT desde la línea de comandos.

    Haz los cambios siguientes:

    • USERNAME: la dirección de correo del usuario. Debes usar comillas alrededor del correo porque contiene caracteres especiales (@ y .).
    • TABLE_NAME: el nombre de la tabla a la que quieres que tenga acceso el usuario.
    grant select on TABLE_NAME to "USERNAME";

    Conceder privilegios de base de datos a un grupo de gestión de identidades y accesos

    Cuando usas la autenticación de grupos de gestión de identidades y accesos, concedes privilegios de base de datos a grupos de gestión de identidades y accesos en lugar de a usuarios o cuentas de servicio concretos. De forma predeterminada, cuando añades un grupo de gestión de identidades y accesos a una instancia de Cloud SQL, el grupo no tiene privilegios de base de datos.

    Para conceder privilegios de base de datos a un grupo de gestión de identidades y accesos, usa la instrucción GRANT. Después de iniciar sesión en la instancia de Cloud SQL por primera vez, cada miembro del grupo (incluidos los usuarios y las cuentas de servicio) hereda automáticamente los privilegios de la base de datos concedidos al grupo.

    Haz los cambios siguientes:

    • GROUP_NAME: la dirección de correo del grupo de Cloud Identity, incluido el @ y el nombre de dominio. Por ejemplo, si la dirección de correo 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: el nombre de la tabla a la que quieres que tenga acceso el usuario.

    Ejecuta GRANT desde la línea de comandos psql.

    grant select on TABLE_NAME to "GROUP_NAME";

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

    Los privilegios de la base de datos que concedas al grupo de gestión de identidades y accesos se aplicarán inmediatamente.

    Ver los usuarios, las cuentas de servicio y los grupos de IAM añadidos a una instancia de Cloud SQL

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

    Consola

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

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En el menú de navegación de SQL, selecciona Usuarios. En la página se muestra una lista de usuarios de IAM, cuentas de servicio y grupos de Cloud Identity que se han añadido a tu instancia.
    4. Opcional: Para ver una lista de usuarios de gestión de identidades y accesos o cuentas de servicio que ya han iniciado sesión en la instancia, haz clic en Miembros del grupo de gestión de identidades y accesos autenticados.

    gcloud

    Sustituye INSTANCE_NAME por el nombre de la instancia que tiene los grupos que quieres ver.

      gcloud sql users list --instance=INSTANCE_NAME
      

    Los grupos tienen el tipo de usuario CLOUD_IAM_GROUP.

    En el resultado también se muestran las cuentas de usuario y de servicio de tu instancia de Cloud SQL.

    • Las cuentas de usuario que son miembros de un grupo tienen el tipo 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 bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_USER.
    • Las cuentas de servicio que son cuentas de servicio de autenticación de bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_SERVICE_ACCOUNT.

    REST v1

    La siguiente solicitud usa el método users.list para enumerar los usuarios que tienen cuentas en la instancia de Cloud SQL.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia

    Método HTTP y URL:

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

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    
    {
      "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 el tipo de usuario CLOUD_IAM_GROUP.

    En el resultado también se muestran las cuentas de usuario y de servicio de tu instancia de Cloud SQL.

    • Las cuentas de usuario que son miembros de un grupo tienen el tipo 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 bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_USER.
    • Las cuentas de servicio que son cuentas de servicio de autenticación de bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_SERVICE_ACCOUNT.

    REST v1beta4

    La siguiente solicitud usa el método users.list para enumerar los usuarios que tienen cuentas en la instancia de Cloud SQL.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • project-id: tu ID de proyecto
    • instance-id: el ID de instancia que quieras

    Método HTTP y URL:

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

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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 el tipo de usuario CLOUD_IAM_GROUP.

    En el resultado también se muestran las cuentas de usuario y de servicio de tu instancia de Cloud SQL.

    • Las cuentas de usuario que son miembros de un grupo tienen el tipo 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 bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_USER.
    • Las cuentas de servicio que son cuentas de servicio de autenticación de bases de datos de gestión de identidades y accesos individuales tienen el tipo CLOUD_IAM_SERVICE_ACCOUNT.

    Quitar un usuario o una cuenta de servicio de IAM de una instancia de Cloud SQL

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

    Consola

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

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En el menú de navegación de SQL, selecciona Usuarios.
    4. Haga clic en junto al usuario que quiera quitar.
    5. Selecciona Quitar. De esta forma, solo se revoca el acceso a esta instancia.

    gcloud

    Revocar un usuario

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

    Haz los cambios siguientes:

    • USERNAME: la dirección de correo electrónico.
    • INSTANCE_NAME: el nombre de la instancia de la que quieres quitar al usuario.
    gcloud sql users delete USERNAME \
    --instance=INSTANCE_NAME

    Eliminar la cuenta de servicio

    Haz los cambios siguientes:

    • SERVICE_ACCT: la dirección de correo de la cuenta de servicio.
    • INSTANCE_NAME: el nombre de la instancia de la que quieres 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 eliminar la cuenta de usuario especificada.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu ID de proyecto
    • INSTANCE_ID: el ID de instancia que quieras
    • USERNAME: la dirección de correo del usuario o de 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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 eliminar la cuenta de usuario especificada.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu ID de proyecto
    • INSTANCE_ID: el ID de instancia que quieras
    • USERNAME: la dirección de correo del usuario o de 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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"
    }
    

    Quitar miembros de un grupo de IAM de una instancia de Cloud SQL

    Hay dos formas de eliminar miembros de un grupo de IAM de una instancia de Cloud SQL:

    • Retirada automática
    • Retirada manual

    Retirada automática

    Para quitar un miembro de un grupo de IAM, debes eliminar su pertenencia de los grupos de IAM aplicables en Cloud Identity. Una vez que los usuarios del grupo de gestión de identidades y accesos hayan perdido la pertenencia a todos los grupos aplicables de Cloud Identity, Cloud SQL los eliminará automáticamente de la instancia. La única excepción a esta eliminación son los usuarios de grupo que son propietarios de objetos de la base de datos. Estos usuarios del grupo deben eliminarse manualmente.

    Los cambios en la pertenencia a un grupo, como añadir o quitar miembros, tardan unos 15 minutos en propagarse. El retraso de 15 minutos en la propagación de Cloud SQL se produce en paralelo al tiempo necesario para que se propaguen los cambios de IAM.

    Cambiar el nombre de dominio de los miembros de un grupo de gestión de identidades y accesos en una instancia de Cloud SQL

    Si cambias el nombre de dominio de una organización en Cloud Identity, los cambios no se aplican automáticamente a los miembros del grupo de IAM en la instancia de Cloud SQL.

    Por ejemplo, si cambias user@example.com por user@new-example.com en Cloud Identity, user@example.com permanecerá en la instancia de Cloud SQL aunque el nombre de dominio se haya cambiado en Cloud Identity.

    Para cambiar el nombre de dominio de los miembros del grupo de gestión de identidades y accesos, haz lo siguiente:

    1. Sigue el procedimiento para quitar automáticamente miembros de grupos de gestión de identidades y accesos para eliminar de la instancia a los usuarios que utilicen el nombre de dominio antiguo.

    2. Vuelve a crear la cuenta iniciando sesión en la instancia de Cloud SQL como cada miembro del grupo de gestión de identidades y accesos y usando la cuenta con el nuevo nombre de dominio. Para obtener más información, consulta Añadir automáticamente miembros de un grupo a una instancia de Cloud SQL.

    Para cambiar el nombre de dominio de los grupos de gestión de identidades y accesos, sigue estos pasos:

    1. Sigue el procedimiento para eliminar grupos de gestión de identidades y accesos para quitar de la instancia los grupos que usen el nombre de dominio antiguo.

    2. Sigue el procedimiento para crear grupos de gestión de identidades y accesos para añadir el grupo con el nuevo dominio a la instancia.

    3. Vuelve a conceder privilegios de base de datos al grupo de gestión de identidades y accesos.

    Retirada manual

    En los casos en los que no se pueda quitar automáticamente a un usuario de un grupo de gestión de identidades y accesos, puedes quitarlo manualmente. No puedes quitar manualmente un usuario de un grupo de gestión de identidades y accesos de una instancia de Cloud SQL mediante la CLI de gcloud, laGoogle Cloud consola, Terraform o la API Cloud SQL Admin. En su lugar, los usuarios de la base de datos con privilegios de superusuario pueden eliminar manualmente a los usuarios del grupo de gestión de identidades y accesos de la instancia de Cloud SQL mediante una instrucción DROP USER de un cliente de 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 que vuelva a iniciar sesión en la instancia de Cloud SQL.

    Eliminar un grupo de IAM de una instancia de Cloud SQL

    Puede eliminar los grupos de IAM añadidos de la instancia de Cloud SQL. Después de eliminar un grupo de gestión de identidades y accesos de la instancia, todos los usuarios y las cuentas de servicio que pertenezcan al grupo de gestión de identidades y accesos perderán los privilegios de base de datos que se le hayan concedido. Además, se aplican las siguientes condiciones:

    • Los usuarios y las cuentas de servicio que pertenecen al grupo de IAM podrán seguir iniciando sesión hasta que se elimine el permiso de IAM cloudsql.instances.logindel grupo.
    • Si la eliminación de un grupo provoca que los usuarios o las cuentas de servicio del grupo de IAM no pertenezcan a ningún otro grupo de la instancia, Cloud SQL los eliminará de la instancia.
    • Sin embargo, si un usuario de un grupo de gestión de identidades y accesos es el propietario de un objeto de base de datos de la instancia, debes reasignar la propiedad del objeto antes de poder eliminar el usuario manualmente.

    Si elimina todos los grupos de gestión de identidades y accesos de una instancia de Cloud SQL, todos los usuarios y las cuentas de servicio de los grupos de gestión de identidades y accesos perderán todos sus privilegios de base de datos. Además, se aplican las siguientes condiciones:

    • Todos los usuarios y las cuentas de servicio del grupo de gestión de identidades y accesos no pueden iniciar sesión en la instancia.
    • Cloud SQL también elimina automáticamente de la instancia a todos los usuarios de grupos de IAM y a las cuentas de servicio.
    • Sin embargo, si un usuario de un grupo de gestión de identidades y accesos es el propietario de un objeto de base de datos de la instancia, debes reasignar la propiedad del objeto antes de poder eliminar el usuario manualmente.

    Consola

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

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En el menú de navegación de SQL, selecciona Usuarios.
    4. Haz clic en en el grupo que quieras eliminar.
    5. Selecciona Quitar. De esta forma, solo se revoca el acceso a esta instancia.

    gcloud

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

    Haz los cambios siguientes:

    • GROUP_NAME: la primera parte de la dirección de correo del grupo de Cloud Identity. Por ejemplo, si usas la dirección de correo example-group@example.com, el nombre del grupo de Cloud Identity será example-group.
    • INSTANCE_NAME: el nombre de la instancia de Cloud SQL con el grupo de Cloud Identity que quieres eliminar.
    gcloud sql users delete GROUP_NAME \
       --instance=INSTANCE_NAME

    Quitar permisos de inicio de sesión de IAM de un grupo de IAM

    Si revocas el rol cloudsql.instanceUser de un grupo de IAM, todos los miembros del grupo perderán la capacidad de iniciar sesión en cualquier instancia de Cloud SQL del proyecto. Los usuarios o las cuentas de servicio solo pueden iniciar sesión en las instancias si son miembros de otro grupo de gestión de identidades y accesos que siga teniendo permisos de inicio de sesión.

    Para revocar un rol de un grupo de Cloud Identity, consulta Revocar un rol concreto.

    Quitar usuarios de un grupo de gestión de identidades y accesos

    Los miembros de grupos de gestión de identidades y accesos, como usuarios o cuentas de servicio, se pueden quitar del grupo de gestión de identidades y accesos en Cloud Identity.

    Una vez que se haya propagado la eliminación a través de la gestión de identidades y accesos, el usuario ya no podrá iniciar sesión en la base de datos, a menos que haya recibido permisos de inicio de sesión de otro grupo o se le hayan concedido privilegios de inicio de sesión directamente. Además, los usuarios que se quitan de un grupo pierden los privilegios de base de datos del grupo.

    Si un usuario de un grupo de gestión de identidades y accesos no pertenece a ningún grupo de la instancia, Cloud SQL lo elimina automáticamente de la instancia. Sin embargo, si Cloud SQL detecta que un usuario de un grupo de IAM es el propietario de un objeto de la instancia, Cloud SQL no elimina al usuario. Un administrador debe reasignar la propiedad del objeto y eliminar al usuario manualmente.

    Ver información de inicio de sesión en registros de auditoría

    Puede habilitar los registros de auditoría para registrar los inicios de sesión de gestión de identidades y accesos en la base de datos. Si hay problemas de inicio de sesión, puedes usar los registros de auditoría para diagnosticar el problema.

    Una vez configurados, puedes ver los registros de auditoría de acceso a datos de los inicios de sesión correctos con el Explorador de registros.

    En el caso de la autenticación de grupos de gestión de identidades y accesos, los registros de auditoría muestran la actividad y los inicios de sesión de cuentas de usuario y de servicio individuales.

    Por ejemplo, un registro podría tener 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: "..."
    }
    

    Solucionar problemas de inicio de sesión

    Cuando falla un intento de inicio de sesión, PostgreSQL devuelve 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 consultar los registros de errores de PostgreSQL para obtener más información sobre el error. Para obtener más información, consulta Ver registros.

    Por ejemplo, en el caso del error anterior, la siguiente entrada de registro explica la acción que puedes llevar a cabo para resolver el problema.

    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.
    

    Comprueba el mensaje de error que recibes. Si en el mensaje no se indica que has usado la autenticación de usuarios de gestión de identidades y accesos de Cloud SQL o la autenticación de cuentas de servicio de gestión de identidades y accesos de Cloud SQL, comprueba que el tipo de usuario de la base de datos que has usado para iniciar sesión sea CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT. Para comprobarlo, puedes usar la Google Cloud consola o el comando gcloud sql users list. En el caso de un usuario de IAM, comprueba que el nombre de usuario de la base de datos sea el correo del usuario de IAM.

    Si has usado la autenticación de bases de datos de gestión de identidades y accesos, consulta los detalles del mensaje de error. Puede 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 has enviado como contraseña no es válido, puedes usar el comando gcloud auth application-default print-access-token gcloud para consultar los detalles del token, como se indica a continuación:

    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 del usuario o de la cuenta de servicio de IAM previstos y que no haya caducado.

    Si los detalles indican que no se tienen permisos, comprueba que el usuario o la cuenta de servicio de gestión de identidades y accesos tengan el permiso cloudsql.instances.login mediante el rol predefinido Cloud SQL Instance User o el rol personalizado en la política de gestión de identidades y accesos del proyecto de la instancia. Para obtener más ayuda, usa la herramienta para solucionar problemas de políticas de gestión de identidades y accesos.

    Si no se puede iniciar sesión porque la autenticación de la base de datos de IAM no está disponible, el usuario puede iniciar sesión con el usuario y la contraseña predeterminados de PostgreSQL. Con este método de inicio de sesión, el usuario sigue teniendo acceso a toda la base de datos. Verifica que la conexión sea segura.

    Solucionar problemas de cuentas de usuario que usan la autenticación de grupos de gestión de identidades y accesos

    En esta sección se enumeran escenarios de solución de problemas de autenticación de grupos de IAM.

    No se puede añadir un grupo a una base de datos

    Cuando intentas añadir un grupo a una instancia, recibes 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 que has proporcionado sea un grupo válido.

    Si el grupo aún no existe, créalo. Para obtener más información sobre cómo crear grupos, consulta el artículo Crear y gestionar grupos de Google en la consola de Google Cloud .

    Si aparece el siguiente error:

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

    Después, para poder usar la autenticación de grupos de gestión de identidades y accesos, tu instancia de Cloud SQL debe tener la siguiente actualización de mantenimiento:

    R20240514.00_04 o versiones posteriores

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

    Un usuario o una cuenta de servicio de IAM no hereda los privilegios de la base de datos concedidos a su grupo de IAM

    Si un usuario o una cuenta de servicio de IAM no hereda los privilegios de base de datos correctos de su grupo, sigue estos pasos:

    1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

      Ir a IAM

      Verifica que la cuenta sea miembro del grupo añadido a la instancia de Cloud SQL.

    2. Lista los usuarios y las cuentas de servicio de la instancia.

      gcloud sql users list --instance=INSTANCE_NAME

      En el resultado, comprueba si la cuenta de usuario o de servicio aparece como CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT.

    3. Si la cuenta de usuario o de servicio aparece como CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT, quítala de la instancia. La cuenta que vas a quitar es una cuenta de gestión de identidades y accesos individual que no hereda los privilegios de la base de datos del grupo.

    4. Vuelve a iniciar sesión en la instancia con la cuenta de usuario o de servicio.

      Si vuelves a iniciar sesión en la instancia, se volverá a crear la cuenta con el tipo de cuenta correcto: CLOUD_IAM_GROUP_USER o CLOUD_IAM_GROUP_SERVICE_ACCOUNT.

    Siguientes pasos