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 para permitir que los usuarios, las cuentas de servicio o los grupos configurados 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 una base de datos postgres.

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

    Go to project selector

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

  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. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  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

Si deseas configurar una instancia de Cloud SQL nueva para la autenticación de la base de datos de IAM, debes habilitar la marca cloudsql.iam_authentication. Después de habilitar esta marca, puedes agregar usuarios, cuentas de servicio o grupos de IAM a la instancia de Cloud SQL.

Para configurar una instancia de Cloud SQL nueva para usar la autenticación de la base de datos de IAM, 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. Haga clic en Crear instancia.
  3. Haz clic en Elegir PostgreSQL.
  4. Ingresa un nombre para el ID de la instancia.
  5. 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).
  6. Ingresa una contraseña para el administrador predeterminado.
  7. En el menú Versión de la base de datos, selecciona una versión de base de datos.
  8. 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.
  9. En la sección Personaliza tu instancia, haz clic en Mostrar opciones de configuración y, luego, expande Marcas.
  10. Haz clic en Agregar marca.
  11. En el menú 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.
  12. 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.
  13. 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: es el nombre de la instancia nueva.
  • POSTGRES_VERSION: es la versión de PostgreSQL (como POSTGRES_9_6, POSTGRES_10, POSTGRES_11 o POSTGRES_12).
  • NUMBER_OF_CORES: es la cantidad de núcleos en la máquina.
  • AMOUNT_OF_MEMORY: es la cantidad de memoria en la máquina. Se debe proporcionar una unidad de tamaño (como 3,072MiB o 9GiB)
  • ZONE: es 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=POSTGRES_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             = "postgres-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

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. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Borra los cambios

Para borrar tus cambios, haz lo siguiente:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

    terraform destroy

REST v1

No incluyas información sensible o información 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: es el ID de instancia deseado
  • REGION: es la región deseada, como us-east-1
  • PROJECT_ID: El ID del proyecto
  • LOCATION_ID: es el ID de ubicación
  • DATABASE_VERSION: la string de enumeración de la versión de la base de datos. Por ejemplo: POSTGRES_12.
  • PASSWORD: la contraseña para el usuario raíz.
  • MACHINE_TYPE: 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/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/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/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
Para ver cómo se construye 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 información 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: es el ID de instancia deseado
  • REGION: es la región deseada, como us-east-1
  • PROJECT_ID: El ID del proyecto
  • LOCATION_ID: es el ID de ubicación
  • DATABASE_VERSION: la string de enumeración de la versión de la base de datos. Por ejemplo: POSTGRES_12.
  • PASSWORD: la contraseña para el usuario raíz.
  • MACHINE_TYPE: 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 construye 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

Para configurar una instancia de Cloud SQL existente para la autenticación de bases de datos de IAM, debes habilitar la marca cloudsql.iam_authentication. Después de habilitar esta marca, puedes agregar usuarios, cuentas de servicio o grupos de IAM a la instancia de Cloud SQL.

Para configurar una instancia de Cloud SQL existente para usar la autenticación de bases de datos de IAM, 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. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Haz clic en Editar.
  4. En la sección Personaliza tu instancia, expande Marcas.
  5. Haz clic en Agregar marca.
  6. En el menú 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: es 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 del proyecto
  • LOCATION_ID: es el ID de ubicación
  • INSTANCE_ID: es el ID de instancia deseado
  • REGION: es la región que elegiste
  • DATABASE_VERSION: la string de enumeración de la versión de la base de datos. Por ejemplo: POSTGRES_12.
  • PASSWORD: la contraseña para el usuario raíz.
  • MACHINE_TYPE: 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/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/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/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PROJECT_ID: El ID del proyecto
  • LOCATION_ID: es el ID de ubicación
  • INSTANCE_ID: es el ID de instancia deseado
  • REGION: es la región que elegiste
  • DATABASE_VERSION: la string de enumeración de la versión de la base de datos. Por ejemplo: POSTGRES_12.
  • PASSWORD: la contraseña para el usuario raíz.
  • MACHINE_TYPE: 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?