Configurar instancias nuevas y existentes para la autenticación de bases de datos de IAM

En esta página, se incluyen procedimientos para crear o editar instancias de Cloud SQL a fin de permitir que los usuarios o las cuentas de servicio configuradas usen la autenticación de bases de datos de IAM en Cloud SQL. Para obtener más información sobre la integración de IAM en Cloud SQL, consulta Autenticación de IAM.

Una instancia recién creada tiene cuatro bases de datos del sistema:

  • information_schema: Proporciona acceso a los metadatos de la base de datos y la información sobre el servidor de MySQL.
  • mysql: El esquema del sistema. Contiene tablas que almacenan información requerida por el servidor MySQL mientras se ejecuta.
  • performance_schema: Una función para supervisar la ejecución del servidor MySQL a un nivel bajo.
  • sys: Contiene un conjunto de objetos que ayuda a los DBA y los desarrolladores a interpretar los datos recopilados por el esquema de rendimiento.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

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

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

    Go to project selector

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

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

    gcloud init
  10. Asegúrate de tener las funciones de administrador de Cloud SQL y visualizador de Compute en tu cuenta de usuario.

    Ir a la página IAM

    Obtén más información sobre las funciones y los permisos.

Configura instancias nuevas para la autenticación de bases de datos de IAM

Cloud SQL usa una marca para inhabilitar y habilitar las conexiones de usuario de IAM en una instancia. En este procedimiento, habilitas esa marca.

Para configurar una instancia nueva que use la autenticación de bases de datos IAM en Cloud SQL, haz lo siguiente:

Console

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

    Ir a Instancias de Cloud SQL

  2. Haga clic en Crear instancia.
  3. Haga clic en Choose MySQL.
  4. Ingresa un nombre para el ID de la instancia. No incluyas información sensible o de identificación personal en el nombre de tu instancia, ya que es visible de forma externa. No debes incluir el ID del proyecto en el nombre de la instancia. Esto se hace de manera automática cuando es apropiado (por ejemplo, en los archivos de registro).
  5. Ingrese una contraseña para el usuario raíz.
  6. En el menú desplegable Versión de la base de datos, selecciona una versión de base de datos.
  7. En la sección Elige la región y la disponibilidad zonal, selecciona la región y la zona de la instancia. Ubica la instancia en la misma región en la que están los recursos que acceden a ella. No se podrá modificar la región que seleccionaste en un futuro. Por lo general, no es necesario especificar una zona.
  8. En la sección Personaliza tu instancia, haz clic en Mostrar opciones de configuración y, luego, expande Marcas.
  9. Haz clic en Agregar marca.
  10. En el menú desplegable Elige una marca, selecciona la marca cloudsql_iam_authentication. Asegúrate de que la opción Activada esté seleccionada como el valor de esta marca y, luego, haz clic en Listo.
  11. Establece otras opciones de configuración de la instancia, según sea necesario. Para obtener más información sobre la configuración, consulta Configuración.
  12. Haga clic en Crear instancia.

gcloud

Ejecuta gcloud sql instances create con el parámetro --database-flags configurado como cloudsql_iam_authentication=on.

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia nueva
  • MYSQL_VERSION: La versión de MySQL (como MYSQL_5_7 o MYSQL_8_0).
  • NUMBER_OF_CORES: La cantidad de núcleos en la máquina
  • AMOUNT_OF_MEMORY: La cantidad de memoria en la máquina. Se debe proporcionar una unidad de tamaño (como 3,072MiB o 9GiB)
  • ZONE: La zona de Compute Engine preferida (como us-central1-a o us-central1-b)
  • PASSWORD: Crea una contraseña para el usuario raíz
gcloud sql instances create INSTANCE_NAME \
--database-version=MYSQL_VERSION \
--cpu=NUMBER_OF_CORES \
--memory=AMOUNT_OF_MEMORY \
--zone=ZONE_NAME \
--root-password=PASSWORD \
--database-flags=cloudsql_iam_authentication=on

Terraform

Para crear 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
}

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

No incluyas información sensible o de identificación personal (PII) en el nombre de tu instancia, ya que es visible de forma externa.

No debes incluir el ID del proyecto en el nombre de la instancia. El ID de proyecto se incluye de forma automática cuando hace falta (por ejemplo, en los archivos de registro).

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

  • INSTANCE_ID: el ID de instancia deseado
  • REGION: la región deseada, como us-east-1
  • PROJECT_ID: el ID de tu proyecto
  • LOCATION_ID: el ID de ubicación
  • DATABASE_VERSION: Es la string de enumeración de la versión de la base de datos. Por ejemplo: MYSQL_8_0.
  • PASSWORD: Es la contraseña para el usuario raíz.
  • MACHINE_TYPE: Es la string de enumeración del tipo de máquina (nivel) como: db-custom-[CPUS]-[MEMORY_MBS].

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    },
    "databaseFlags": [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}

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/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
Para ver cómo se realiza la solicitud a la API de REST subyacente en esta tarea, consulta el Explorador de APIs en la página instances:insert.

REST v1beta4

No incluyas información sensible o de identificación personal (PII) en el nombre de tu instancia, ya que es visible de forma externa.

No debes incluir el ID del proyecto en el nombre de la instancia. El ID de proyecto se incluye de forma automática cuando hace falta (por ejemplo, en los archivos de registro).

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

  • INSTANCE_ID: el ID de instancia deseado
  • REGION: la región deseada, como us-east-1
  • PROJECT_ID: el ID de tu proyecto
  • LOCATION_ID: el ID de ubicación
  • DATABASE_VERSION: Es la string de enumeración de la versión de la base de datos. Por ejemplo: MYSQL_8_0.
  • PASSWORD: Es la contraseña para el usuario raíz.
  • MACHINE_TYPE: Es la string de enumeración del tipo de máquina (nivel) como: db-custom-[CPUS]-[MEMORY_MBS].

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    },
    "databaseFlags": [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}

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": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
Para ver cómo se realiza la solicitud a la API de REST subyacente en esta tarea, consulta el Explorador de APIs en la página instances:insert.

Configura instancias existentes para la autenticación de bases de datos de IAM en Cloud SQL

Para configurar la autenticación de bases de datos de IAM en una instancia existente, sigue estos pasos:

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. Haz clic en Edit.
  4. En la sección Personaliza tu instancia, expande Marcas.
  5. Haz clic en Agregar marca.
  6. En el menú desplegable Elige una marca, selecciona la marca cloudsql_iam_authentication. Asegúrate de que la opción Activada esté seleccionada como el valor de esta marca y, luego, haz clic en Listo.
  7. Establece otras opciones de configuración de la instancia, según sea necesario. Para obtener más información sobre la configuración, consulta Configuración.
  8. Haz clic en Guardar.

gcloud

Para obtener información sobre cómo instalar y comenzar a usar la CLI de gcloud, consulta Instala la CLI de gcloud. Para obtener información sobre cómo iniciar Cloud Shell, consulta Usa Cloud Shell.

Para este procedimiento, usa gcloud sql instances patch.

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia nueva
gcloud sql instances patch INSTANCE_NAME \
--database-flags=cloudsql_iam_authentication=on

Esto restablece todas las demás configuraciones de marcas de la base de datos existentes. Para obtener más orientación sobre cómo configurar las marcas de la base de datos, consulta Establece una marca de base de datos.


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
  • LOCATION_ID: el ID de ubicación
  • INSTANCE_ID: el ID de instancia deseado
  • REGION: Es la región que elegiste.
  • DATABASE_VERSION: Es la string de enumeración de la versión de la base de datos. Por ejemplo: MYSQL_8_0.
  • PASSWORD: Es la contraseña para el usuario raíz.
  • MACHINE_TYPE: Es la string de enumeración del tipo de máquina (nivel) como: db-custom-[CPUS]-[MEMORY_MBS].

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}

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/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/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
  • LOCATION_ID: el ID de ubicación
  • INSTANCE_ID: el ID de instancia deseado
  • REGION: Es la región que elegiste.
  • DATABASE_VERSION: Es la string de enumeración de la versión de la base de datos. Por ejemplo: MYSQL_8_0.
  • PASSWORD: Es la contraseña para el usuario raíz.
  • MACHINE_TYPE: Es la string de enumeración del tipo de máquina (nivel) como: db-custom-[CPUS]-[MEMORY_MBS].

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}

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": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

¿Qué sigue?