En esta página, se describe cómo configurar y usar la federación de identidades de personal (también conocida como autenticación de IAM de terceros) con Cloud SQL. La federación de identidades de personal te permite usar tu proveedor de identidad (IdP) existente, como Microsoft Active Directory o Okta, para acceder a instancias de Cloud SQL sin necesidad de una Google cuenta.
Estos son algunos de los beneficios clave de usar la federación de identidades de personal:
- Menos sobrecarga: No es necesario verificar dominios ni sincronizar identidades con Cloud Identity.
- Seguridad mejorada: Administración centralizada del acceso a la base de datos a través de tu IdP empresarial existente.
- Facilidad de escalabilidad: Adecuado para organizaciones grandes con necesidades complejas de administración de identidades.
Para obtener una descripción detallada de la federación de identidades de personal, consulta la descripción general de la federación de identidades de personal.
Cómo funciona
La federación de identidades de personal permite que los usuarios se autentiquen en Google Cloud con una identidad externa. En el caso de Cloud SQL, esto significa que las entidades principales de un grupo de personal pueden conectarse a instancias de Cloud SQL para PostgreSQL.
Cloud SQL admite la federación de identidades de personal a través del tipo de usuario CLOUD_IAM_WORKFORCE_IDENTITY. Para otorgar acceso, Cloud SQL valida tus credenciales de personal y el permiso de IAM a nivel del proyecto durante el acceso.
Antes de comenzar
Antes de configurar la autenticación de la base de datos de la federación de identidades de personal, asegúrate de cumplir con los siguientes requisitos previos:
- Instala la CLI de gcloud más reciente.
- Configura un grupo y un proveedor de federación de identidades de personal en tu organización de Google Cloud .
- Configura la identidad temporal como cuenta de servicio para tu carga de trabajo.
- Asegúrate de que tu instancia de Cloud SQL ejecute la versión 13 o una posterior de PostgreSQL.
Roles y permisos
Para obtener los permisos que necesitas para configurar y usar la autenticación de la federación de identidades de personal, pídele a tu administrador que te otorgue los siguientes roles de IAM en la organización:
-
Administrar una instancia:
Administrador de Cloud SQL (
roles/cloudsql.admin) -
Conectarse a la instancia:
Usuario de instancia de Cloud SQL (
roles/cloudsql.instanceUser) -
Conéctate a una instancia con el proxy de autenticación de Cloud SQL:
Cliente de Cloud SQL (
roles/cloudsql.client) -
Administrar la política de IAM:
Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Configura la autenticación de la federación de identidades de personal
En las siguientes secciones, se explica cómo configurar tu instancia para que use la autenticación de la federación de identidades de personal.
Habilita la autenticación de IAM en la instancia
Para habilitar la autenticación de IAM, establece la marca cloudsql.iam_authentication en on.
Console
-
En la consola de Google Cloud , ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Haz clic en Editar.
- Expande la sección Personaliza tu instancia.
- Expande la sección Conexiones.
- En Seguridad, selecciona la casilla de verificación Habilitar la autenticación de IAM de Cloud SQL.
- Haz clic en Guardar.
gcloud
Usa el siguiente comando para habilitar la autenticación de IAM:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
Reemplaza INSTANCE_NAME por el nombre de la instancia.
Terraform
Agrega el bloque database_flags a tu recurso google_sql_database_instance:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "POSTGRES_15" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql.iam_authentication" value = "on" } } }
Reemplaza lo siguiente:
INSTANCE_NAME: El nombre de la instancia.REGION: Es la región en la que reside la instancia.
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"
}
Agrega el usuario de identidad de personal a la instancia
Agrega el principal externo a tu instancia con el tipo CLOUD_IAM_WORKFORCE_IDENTITY.
Asegúrate de que el ID de usuario que usas coincida con el valor proporcionado por la asignación de atributos de tu proveedor de identidad de personal. Por lo general, se configura como una dirección de correo electrónico, por ejemplo, cruz@example.com.
Console
-
En la consola de Google Cloud , ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Selecciona Usuarios en el menú de navegación de SQL.
- Haz clic en Agregar cuenta de usuario. Se abrirá el panel Agrega una cuenta de usuario a la instancia INSTANCE_NAME.
- Selecciona Federación de identidades de personal.
- En el campo Usuario de la fuerza laboral, ingresa el ID del usuario que deseas agregar.
- Haz clic en Agregar.
gcloud
Ejecuta el siguiente comando para crear el usuario:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Reemplaza lo siguiente:
USER_ID: Es el ID del usuario que deseas agregar, por ejemplo,cruz@example.com.INSTANCE_NAME: El nombre de la instancia.
Terraform
Usa el recurso google_sql_user para definir el usuario de identidad de personal:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Reemplaza lo siguiente:
USER_ID: Es el ID del usuario que deseas agregar, por ejemplo,cruz@example.com.INSTANCE_NAME: El nombre de la instancia.
REST v1
Crear una cuenta de usuario
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID del proyecto
- INSTANCE_ID: El ID de la instancia a la que le estás agregando el usuario
- USERNAME: la dirección de correo electrónico del usuario
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
Cuerpo JSON de la solicitud:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
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"
}
REST v1beta4
Crear una cuenta de usuario
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID del proyecto
- INSTANCE_ID: El ID de la instancia a la que le estás agregando el usuario
- USERNAME: la dirección de correo electrónico del usuario
Método HTTP y URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
Cuerpo JSON de la solicitud:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
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"
}
Otorga el rol de usuario de la instancia
Otorga el rol de roles/cloudsql.instanceUser a la principal de identidad de la fuerza laboral o a todo el grupo.
Console
-
En la consola de Google Cloud , ve a la página Cuentas de servicio.
- Haz clic en Otorgar acceso.
En el campo Principales nuevas, realiza una de las siguientes acciones:
Para otorgar acceso a un principal individual, ingresa la identidad de la fuerza laboral como
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDPara otorgar acceso a todo el grupo, ingresa el grupo de personal como un
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- En la lista Rol, selecciona Cloud SQL > Usuario de instancia de Cloud SQL.
- Opcional: Si deseas conectarte con el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL, haz clic en Agregar otro rol y, luego, selecciona Cloud SQL > Cliente de Cloud SQL.
- Haz clic en Guardar.
gcloud
Para otorgar acceso a un usuario individual, usa el comando gcloud projects
add-iam-policy-binding:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Reemplaza lo siguiente:
USER_ID: Es el ID del usuario que deseas agregar, por ejemplo,cruz@example.com.POOL_ID: Es el ID del grupo de personal.PROJECT_ID: Es el identificador del proyecto que contiene la instancia.
Para otorgar acceso a todo el grupo de personal, usa el comando gcloud projects
add-iam-policy-binding con el formato de miembro principalSet:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Usa el recurso google_project_iam_member para otorgar el rol
a la principal de la fuerza laboral:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Reemplaza lo siguiente:
USER_ID: Es el ID del usuario que deseas agregar, por ejemplo,cruz@example.com.POOL_ID: Es el ID del grupo de personal.PROJECT_ID: Es el identificador del proyecto que contiene la instancia.
REST
Para otorgar políticas de IAM con la API, recupera la política de IAM del proyecto con el método getIamPolicy.
Luego, agrega la nueva vinculación a la política y, por último, aplica la política actualizada con el método setIamPolicy.
A continuación, se muestra un ejemplo de una carga útil de vinculación que se debe agregar a tu política de IAM:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Reemplaza lo siguiente:
USER_ID: Es el ID del usuario que deseas agregar, por ejemplo,cruz@example.com.POOL_ID: Es el ID del grupo de personal.
Otorga privilegios de base de datos
Puedes especificar los roles de base de datos que se otorgarán cuando crees el usuario de identidad de personal o otorgar manualmente los privilegios de base de datos dentro de la base de datos.
Por ejemplo, para otorgar privilegios de forma manual, sigue estos pasos:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Reemplaza lo siguiente:
TABLE_NAME: Es el nombre de la tabla de la base de datos.USER_ID: Es el ID de usuario de la base de datos de identidad de personal, por ejemplo,cruz@example.com.
Conéctate a la instancia
Ahora puedes conectarte a tu instancia con la gcloud CLI o el proxy de autenticación de Cloud SQL.
Usa la CLI de gcloud
Primero debes autenticarte con tu identidad de personal antes de poder generar un token de acceso.
Para autenticar con la federación de identidades de personal, usa el comando
gcloud auth logincon la marca--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILEReemplaza
CONFIGURATION_FILEpor la ruta de acceso al archivo de configuración generado para tu proveedor de identidad de la fuerza laboral.Para conectarte con un token generado, ejecuta el siguiente comando:
bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"Reemplaza lo siguiente:
INSTANCE_IP: Es la dirección IP de tu instancia de Cloud SQL.USER_ID: Es el ID de usuario del usuario de la fuerza laboral, por ejemplo,cruz@example.com.DB_NAME: Es el nombre de la base de datos a la que deseas conectarte.
Usa el proxy de autenticación de Cloud SQL
Inicia el proxy con la marca --auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Para obtener más información sobre el proxy, consulta Acerca del proxy de autenticación de Cloud SQL.
Restricciones y limitaciones
- ID de usuario duplicado en todos los grupos: Cloud SQL no puede distinguir entre los sujetos con el mismo ID de usuario en diferentes grupos de personal o proveedores de identidad. Si usas varios grupos o proveedores de personal, debes usar políticas de IAM para asegurarte de no otorgar el permiso de acceso
roles/cloudsql.instanceUsera nombres de asunto duplicados de diferentes grupos o proveedores. Esto evita el acceso no autorizado desde otro grupo o proveedor con el mismo ID de usuario. - Cuota de acceso: Hay una cuota de 12,000 accesos por minuto para cada instancia, que incluye los intentos de acceso exitosos y fallidos. Cuando se supera la cuota, los accesos no están disponibles por el momento. Te recomendamos que evites accesos frecuentes y que restrinjas los accesos a través de las redes autorizadas.
¿Qué sigue?
- Obtén más información sobre la federación de identidades de personal.
- Obtén información para configurar instancias para la autenticación de bases de datos de IAM.
- Obtén información para administrar usuarios con autenticación de la base de datos de IAM.
- Obtén información para acceder con la autenticación de la base de datos de IAM.