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

En esta página, se describe cómo agregar un usuario o una cuenta de servicio que usa la autenticación de la base de datos de IAM a una base de datos y cómo administrar esos usuarios y esas cuentas de servicio. Para obtener más información sobre la integración de IAM, consulta Autenticación de IAM.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Instala Google Cloud CLI.
  5. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  6. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  7. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  8. Instala Google Cloud CLI.
  9. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  10. Habilita Cloud Key Management Service API.

    Habilita la API

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

    Ir a la página IAM

  12. Habilita la autenticación de la base de datos de IAM en tu instancia de Cloud SQL.
  13. Asegúrate de otorgar acceso de IAM a los usuarios que lo necesiten para cada proyecto que contenga bases de datos a las que los usuarios necesitan acceder. Consulta Otorga, cambia y revoca el acceso a recursos.
  14. Asegúrate de haber agregado una cuenta de servicio para cada servicio que requiera acceso a las bases de datos del proyecto.
  15. Si usas la autenticación de grupos de IAM, asegúrate de haber creado el grupo de Cloud Identity que requiere acceso a las bases de datos en tu proyecto.

Agrega un usuario o una cuenta de servicio de IAM a una instancia de base de datos

Debes crear un usuario de base de datos nuevo para cada usuario de IAM que desees tener acceso a la instancia de la base de datos. El nombre de usuario de la base de datos debe ser la dirección de correo electrónico del usuario de IAM, por ejemplo, test-user@example.com.

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 una cuenta de servicio o un usuario de IAM, agrega un usuario de base de datos nuevo y selecciona IAM como método de autenticación:

Console

  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. Haga clic en Agregar. El usuario ahora está en la lista de usuarios.
  8. Si el usuario no está asignado al rol Usuario de instancia de Cloud SQL, aparecerá un ícono de triángulo a la izquierda del nombre de usuario.

    Para otorgar los privilegios de acceso al usuario, haz clic en el ícono y, luego, selecciona Agregar función de IAM. El ícono ya no aparecerá. El usuario ahora es miembro del rol.

gcloud

Crear una cuenta de usuario

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

Reemplaza lo siguiente:

  • USERNAME: Es la dirección de correo electrónico del usuario.
  • INSTANCE_NAME: Es el nombre de la instancia a la que deseas que el usuario pueda acceder.
gcloud sql users create USERNAME \
--instance=INSTANCE_NAME \
--type=cloud_iam_user

Cree una cuenta de servicio

Reemplaza lo siguiente:

  • SERVICE_ACCT: Es la dirección de correo electrónico de la cuenta de servicio.
  • INSTANCE_NAME: Es el nombre de la instancia a la que deseas que la cuenta de servicio pueda acceder.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Para agregar cuentas de usuario y de servicio de IAM a una instancia con la autenticación de la base de datos de IAM habilitada, usa un recurso de Terraform.

resource "google_sql_database_instance" "default" {
  name             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    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"
}

# Create a new IAM service account

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

# Specify the email address of the IAM service account to add to the instance

resource "google_sql_user" "iam_service_account_user" {
  name     = google_service_account.default.email
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Aplica los cambios

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  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. Inicialice 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 de tu proyecto
  • instance-id es el ID de la instancia a la que le estás agregando el usuario
  • username es la dirección de correo electrónico del usuario
  • operation-id es el ID de la operación

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

Cuerpo JSON de la solicitud:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Cree una cuenta de servicio

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

  • service-acct: El correo electrónico de tu cuenta de servicio
  • project-id: el ID de tu proyecto
  • instance-id es el ID de la instancia a la que agregarás la cuenta de servicio
  • operation-id es el ID de la operación

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

Cuerpo JSON de la solicitud:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Para enviar tu solicitud, expande una de estas opciones:

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

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

Crear una cuenta de usuario

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

  • project-id: el ID de tu proyecto
  • instance-id es el ID de la instancia a la que le estás agregando el usuario
  • username es la dirección de correo electrónico del usuario
  • operation-id es el ID de la operación

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Cree una cuenta de servicio

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

  • service-acct: El correo electrónico de tu cuenta de servicio
  • project-id: el ID de tu proyecto
  • instance-id es el ID de la instancia a la que agregarás la cuenta de servicio
  • operation-id es el ID de la operación

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Para enviar tu solicitud, expande una de estas opciones:

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

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Agrega un grupo a la base de datos

Para configurar la autenticación de grupos de IAM de tu instancia, haz lo siguiente:

  1. Si aún no creaste un grupo de Cloud Identity, crea uno en el proyecto en el que administras tus instancias de Cloud SQL. Para obtener más información, consulta Descripción general de Cloud Identity.

  2. Ejecuta el siguiente comando para agregar el grupo a tu instancia de Cloud SQL.

    Console

    La opción para agregar grupos a una instancia no está disponible a través de la consola de Google Cloud durante la vista previa.

    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
       

    REST v1

    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 la instancia a la que agregarás el grupo de Cloud Identity
    • GROUP_EMAIL: la dirección de correo electrónico del grupo/li>
    • OPERATION_ID es el ID de la operación

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "name": "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 de tu 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
    • OPERATION_ID es el ID de la operación

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "name": "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 usuarios o cuentas de servicio en un grupo a una instancia de base de datos

Agregar un grupo de Cloud Identity a una instancia no agrega automáticamente miembros del grupo como usuarios a la instancia. Cuando un miembro accede a la instancia por primera vez, se crea un usuario o una cuenta de servicio en la instancia.

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

Administra cuentas de usuario o de servicio en un grupo en una instancia

Puedes controlar el acceso a una instancia si administras la membresía del grupo de Cloud Identity. Para obtener más información, consulta Descripción general de Cloud Identity.

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

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

Después de que los cambios se propaguen, el usuario o la cuenta de servicio deberá salir y volver a acceder para que se apliquen los cambios. Sin embargo, el otorgamiento o la revocación de privilegios de base de datos para un grupo en MySQL se aplica de inmediato. Por ejemplo, si revocas el acceso a una tabla, los miembros de ese grupo de Cloud Identity perderán el acceso a esa tabla de inmediato, sin necesidad de salir y volver a acceder.

Cuando se agrega una Cloud Identity adicional a una instancia, los usuarios deben salir y volver a acceder para recibir los permisos del grupo nuevo.

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, test-user@example.com. Debes 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. Haga 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 y Cliente de Cloud SQL.
  5. Para los usuarios individuales y las cuentas de servicio, 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: la dirección de correo electrónico del usuario.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Vuelve a ejecutar gcloud projects add-iam-policy-binding con la marca --role=roles/cloudsql.client.

Agrega una vinculación de políticas a una cuenta de servicio

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que deseas que el usuario pueda usar.
  • SERVICE_ACCT: la dirección de correo electrónico de la cuenta de servicio.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

Vuelve a ejecutar gcloud projects add-iam-policy-binding con la marca --role=roles/cloudsql.client.

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.

La autenticación de grupos de IAM está en vista previa.

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

Aplica los cambios

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  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. Inicialice 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:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Otorga privilegios de base de datos al usuario de IAM

Cuando se agrega un usuario de IAM a una instancia de base de datos, a ese usuario nuevo no se le otorgan privilegios en ninguna base de datos de forma predeterminada.

Para otorgar acceso y otros privilegios al usuario, usa 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 de mysql.

Reemplaza lo siguiente:

  • USERNAME: En una cuenta de usuario, esta es la dirección de correo electrónico del usuario de IAM con la string @ y la string de dominio truncada. Por ejemplo, si la dirección de correo electrónico del usuario de IAM es test-user@example.com, el nombre de usuario sería test-user. En el caso de una cuenta de servicio, esta es la dirección de correo electrónico de la cuenta de servicio sin el dominio @project-id.iam.gserviceaccount.com.
  • DATABASE_NAME: el nombre de la base de datos que aloja la tabla
  • TABLE_NAME: Es el nombre de la tabla a la que deseas que se otorgue acceso al usuario.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
    

    Otorga privilegios de base de datos a un grupo

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

    Para otorgar privilegios de base de datos a usuarios dentro del grupo de Cloud Identity, usa la declaración GRANT.

    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.
    • HOSTNAME: la segunda parte de la dirección de correo electrónico representa el nombre de host del grupo de Cloud Identity. Por ejemplo, con la dirección de correo electrónico example-group@example.com, el nombre de host es example.com.
    • DATABASE_NAME: el nombre de la base de datos que aloja la tabla
    • TABLE_NAME: el nombre de la tabla a la que deseas que los miembros del grupo de Cloud Identity tengan acceso.

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

    grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
    

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

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

    Visualiza grupos, usuarios de IAM y cuentas de servicio

    Para ver los grupos de Cloud Identity que se agregaron a tu instancia, ejecuta el siguiente comando.

    Console

    La visualización de grupos en una instancia no está disponible a través de la consola de Google Cloud durante la vista previa.

    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.

    Quita una cuenta de servicio o un usuario de IAM de la base de datos

    Para quitar un usuario o una cuenta de servicio de la base de datos, debes borrar la cuenta de la instancia:

    Console

    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 test-user@example.com, para identificar al usuario.

    Reemplaza lo siguiente:

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

    Borra la cuenta de servicio

    Reemplaza lo siguiente:

    • SERVICE_ACCT: Es la dirección de correo electrónico de la cuenta de servicio.
    • INSTANCE_NAME: El nombre de la instancia de la que deseas quitar al usuario.
    gcloud sql users delete SERVICE_ACCT \
    --instance=INSTANCE_NAME
    

    REST v1

    En la siguiente solicitud, se usa el método users:delete para borrar la cuenta de usuario que se especificó.

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

    • PROJECT_ID: el ID de tu proyecto
    • INSTANCE_ID: el ID de instancia deseado
    • USERNAME: la dirección de correo electrónico del usuario o la cuenta de servicio

    Método HTTP y URL:

    DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

    Para enviar tu solicitud, expande una de estas opciones:

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "user@example.com",
      "insertTime": "2020-02-07T22:38:41.217Z",
      "startTime": "2020-02-07T22:38:41.217Z",
      "endTime": "2020-02-07T22:38:44.801Z",
      "operationType": "DELETE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    En la siguiente solicitud, se usa el método users:delete para borrar la cuenta de usuario que se especificó.

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

    • PROJECT_ID: el ID de tu proyecto
    • INSTANCE_ID: el ID de instancia deseado
    • USERNAME: la dirección de correo electrónico del usuario o la cuenta de servicio

    Método HTTP y URL:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

    Para enviar tu solicitud, expande una de estas opciones:

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "user@example.com",
      "insertTime": "2020-02-07T22:38:41.217Z",
      "startTime": "2020-02-07T22:38:41.217Z",
      "endTime": "2020-02-07T22:38:44.801Z",
      "operationType": "DELETE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    Borra cuentas de usuario o de servicio de autenticación de grupos de IAM

    No puedes usar gcloud CLI para borrar cuentas de usuario o de servicio que se crean con la autenticación de grupos de IAM. Cloud SQL crea estas cuentas de forma automática después de que la cuenta de usuario o de servicio acceden por primera vez.

    La única forma de borrar estas cuentas es a través del cliente MySQL con un usuario que tiene privilegios de superusuario.

    Si quieres generar una consulta para borrar cuentas de usuario o de servicio, consulta la documentación de MySQL.

    Borrar un grupo de una instancia

    Si borras un grupo de Cloud Identity de una instancia, todos las cuentas de usuario y de servicio que pertenecen al grupo de Cloud Identity pierden los privilegios de base de datos que se otorgaron al grupo de Cloud Identity. Los usuarios y las cuentas de servicio que pertenecen al grupo de Cloud Identity aún pueden acceder hasta que los permisos de acceso de IAM se quiten del grupo.

    Console

    La eliminación de grupos de una instancia no está disponible a través de la consola de Google Cloud durante la vista previa.

    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.
    • HOSTNAME: la segunda parte de la dirección de correo electrónico representa el nombre de host del grupo de Cloud Identity. Por ejemplo, con la dirección de correo electrónico example-group@example.com, el nombre de host es example.com.
    • 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 \
       --host=HOSTNAME \
       --instance=INSTANCE_NAME
    

    Quita los permisos de acceso de IAM de un grupo

    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

    Se pueden quitar los usuarios de un grupo de Cloud Identity.

    Después de que la eliminación se haya propagado a través de IAM, es posible que el usuario aún pueda acceder a una base de datos si tiene los permisos de IAM adecuados. Sin embargo, cuando vuelvan a acceder, los usuarios ya no tendrán privilegios de base de datos que pertenezcan al grupo de Cloud Identity del que se los quitó.

    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. La autenticación de grupos de IAM está en vista previa.

    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, MySQL muestra un mensaje de error mínimo por motivos de seguridad. Por ejemplo:

    $MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
    --ssl-cert=client-cert.pem --ssl-key=client-key.pem   --host=ip_address --user=testuser
    Access denied for user 'testuser'@'...' (using password: NO)
    

    Puedes revisar los registros de errores de MySQL 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. Para un usuario de IAM, verifica que el nombre de usuario de la base de datos sea la dirección de correo electrónico del usuario de IAM sin el @ ni el dominio. Para una cuenta de servicio, verifica que sea el correo electrónico de la cuenta de servicio sin el @project-id.iam.gserviceaccount.com.

    Si usaste la autenticación de la base de datos de IAM, verifica los detalles del mensaje de error. Puedes encontrar el mensaje de error en el registro de errores de la base de datos. Si indica que el token de acceso (OAuth 2.0) que enviaste como contraseña no es válido, puedes usar el comando gcloud de gcloud auth application-default print-access-token para encontrar detalles del token, de la siguiente manera:

    curl -H "Content-Type: application/x-www-form-urlencoded" \
    -d "access_token=$(gcloud auth application-default print-access-token)" \
    https://www.googleapis.com/oauth2/v1/tokeninfo
    

    Verifica que el token sea para la cuenta de servicio o el usuario de IAM previsto y que no haya vencido.

    Si los detalles indican 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 MySQL. 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 la creación de grupos, consulta Descripción general de Cloud Identity.

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

    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?