Las condiciones de IAM te permiten definir y aplicar controles de acceso condicionales basados en atributos paraGoogle Cloud recursos, incluidas las instancias de Cloud SQL. Para obtener más información sobre las condiciones de gestión de identidades y accesos, consulta la página Descripción general de las condiciones de gestión de identidades y accesos.
Introducción
En Cloud SQL, puedes aplicar el acceso condicional en función de los siguientes atributos:
- Atributos de fecha y hora: se usan para definir el acceso temporal (con caducidad), programado o de duración limitada a los recursos de Cloud SQL. Por ejemplo, puedes permitir que un usuario acceda a una instancia de base de datos hasta una fecha concreta. Puede usar atributos de fecha y hora en cualquier nivel de la jerarquía de recursos. Para obtener más información, consulta el artículo sobre cómo configurar el acceso temporal.
- Atributos de recursos: se usan para configurar el acceso condicional en función de una etiqueta, un nombre de recurso, un tipo de recurso o un atributo de servicio de recurso. En Cloud SQL, puedes usar atributos de instancias de bases de datos para configurar el acceso condicional. Por ejemplo, puedes permitir que un usuario solo acceda a instancias con una etiqueta específica. Para obtener más información, consulta el artículo sobre cómo configurar el acceso basado en recursos.
Se puede usar, por ejemplo, en estos casos:
Permitir que los usuarios se conecten a instancias específicas.
Permitir que los usuarios creen instancias con prefijos o sufijos específicos (por ejemplo, "prueba").
Limitar el acceso a las operaciones de copia de seguridad de las instancias de prueba
Permitir que los usuarios eliminen instancias de desarrollo y de prueba, pero no instancias de producción.
Permitir que los usuarios realicen operaciones administrativas en determinadas fechas o a determinadas horas.
Permitir que los usuarios se conecten a instancias específicas
Supongamos que quieres dar permiso a un usuario o a una cuenta de servicio para que se conecte solo a una instancia de Cloud SQL específica. Puedes incluir una condición de gestión de identidades y accesos en el enlace de la política de gestión de identidades y accesos que concede a esa cuenta los permisos de un rol de Cloud SQL.
De forma predeterminada, el rol Cliente de Cloud SQL predefinido (roles/cloudsql.client
), que contiene el permiso cloudsql.instances.connect
, autoriza a su miembro a conectarse a todas las instancias de Cloud SQL de un proyecto. Si introduces una condición de gestión de identidades y accesos en el enlace de la política, puedes conceder permiso solo a la instancia con el nombre especificado.
Consola
En este ejemplo se muestra cómo modificar la vinculación de gestión de identidades y accesos (IAM) del proyecto para asignar el rol Cliente de Cloud SQL a una cuenta de servicio en una instancia específica.
En este ejemplo se usan las siguientes variables:
- PROJECT_ID: tu Google Cloud proyecto.
- INSTANCE_ID: el nombre de la instancia a la que quieres conceder acceso.
-
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
- Haz clic en Añadir.
- En el cuadro de entrada Miembros nuevos, introduce el correo de la cuenta de servicio.
- Haz clic en la lista desplegable Rol y selecciona el rol Cliente de Cloud SQL.
- Haz clic en Añadir condición.
- Introduce un título y una descripción.
- Selecciona la pestaña Editor de condiciones.
- En la sección Creador de condiciones:
- En Tipo de condición - Recurso - Nombre, escribe
projects/PROJECT_ID/instances/INSTANCE_ID
. - Asegúrate de que la condición Y esté seleccionada.
- En Tipo de condición - Recurso - Servicio, selecciona
sqladmin.googleapis.com
.
- En Tipo de condición - Recurso - Nombre, escribe
- Haz clic en Guardar para guardar la condición.
- Haz clic en Guardar para guardar la política.
gcloud
En este ejemplo se muestra cómo modificar el enlace de la política de gestión de identidades y accesos de un proyecto para asignar el rol Cliente de Cloud SQL a una cuenta de servicio específica, pero solo para una instancia concreta.
En este ejemplo se usan las siguientes variables:
- PROJECT_ID: tu Google Cloud proyecto.
- INSTANCE_ID: el nombre de la instancia a la que quieres conceder acceso.
- SERVICE_ACCOUNT_EMAIL: la dirección de correo completa de la cuenta de servicio cuyo acceso quieras modificar.
- Obtén las vinculaciones de políticas de gestión de identidades y accesos y guárdalas en el archivo
bindings.json
: - Añade la siguiente vinculación de rol condicional al archivo
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.client", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID' && resource.service == 'sqladmin.googleapis.com'" } } ], "etag": "BwWKmjvelug=", "version": 3 }
- Actualiza la política de gestión de identidades y accesos con el nuevo archivo
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
Terraform
Para permitir que los usuarios se conecten a instancias específicas, usa un recurso de datos de google_iam_policy
Terraform y un google_project_iam_policy
recurso de Terraform.
Aplica los cambios
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
Eliminar los cambios
Para eliminar los cambios, sigue estos pasos:
- Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor
false
al argumentodeletion_protection
.deletion_protection = "false"
- Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
-
Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce
yes
en la petición:terraform destroy
Limitar el acceso a las operaciones de copia de seguridad de las instancias de prueba
Supongamos que la topología de tu servicio está configurada de forma que todas las instancias de prueba tengan el prefijo test
(por ejemplo, test-instance-1
) y todas las instancias de producción tengan el prefijo prod
(por ejemplo, prod-instance-1
).
Puedes limitar el acceso a las operaciones de copia de seguridad a tus instancias de prueba para un usuario o una cuenta de servicio. Limitar el acceso implica restringir las operaciones CREATE
, GET
, LIST
o DELETE
a las copias de seguridad de tus instancias de prueba.
Consola
-
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
- Haz clic en la pestaña PRINCIPALS (Principales).
- Busca la dirección de correo electrónico o la cuenta de servicio (principal) del usuario al que quieras restringir el acceso.
- Haz clic en el icono Editar principal situado a la derecha del principal. Este icono tiene forma de lápiz.
- En el cuadro de diálogo Editar permisos, haz clic en AÑADIR OTRO ROL.
En el campo Filter (Filtro) del cuadro de diálogo siguiente, introduce
Cloud SQL Admin
. A continuación, selecciona el rol Administrador de Cloud SQL que aparece.El cuadro de diálogo Editar permisos está activo y el rol Administrador de Cloud SQL aparece en el cuadro de diálogo.
- A la derecha del rol Administrador de Cloud SQL, haz clic en el enlace Añadir condición.
- En el cuadro de diálogo Editar condición, proporciona la siguiente información:
- En el campo Título, introduce un nombre para la condición que vas a añadir para limitar el acceso a las operaciones de copia de seguridad de las instancias de prueba. Por ejemplo, puedes escribir
Limit access to backup operations
. Haga clic en la pestaña EDITOR DE CONDICIONES y, a continuación, añada la siguiente condición:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- En el campo Título, introduce un nombre para la condición que vas a añadir para limitar el acceso a las operaciones de copia de seguridad de las instancias de prueba. Por ejemplo, puedes escribir
- Haz clic en GUARDAR.
- En el cuadro de diálogo Editar permisos, haz clic en GUARDAR.
gcloud
En este ejemplo se usan las siguientes variables:
- PROJECT_ID: tu Google Cloud proyecto.
- USER_EMAIL: la dirección de correo del usuario.
- SERVICE_ACCOUNT_EMAIL:la dirección de correo completa de la cuenta de servicio cuyo acceso quieres limitar.
-
Limita el ámbito del rol
cloudsql.admin
a un usuario cuya dirección de correo sea USER_EMAIL.El ámbito del rol se limita a los recursos cuyos nombres de recurso empiecen por
projects/PROJECT_ID/instances/test
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
-
Limita el ámbito del rol
cloudsql.admin
de un usuario que ha iniciado sesión con una cuenta de servicio de SERVICE_ACCOUNT_EMAIL.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
OR
Permitir que los usuarios eliminen instancias de prueba, pero no instancias de producción
Supongamos que quieres permitir que una cuenta de servicio elimine instancias de prueba, pero no instancias de producción. Para ello, puedes usar etiquetas y añadir las dos vinculaciones de políticas siguientes a la cuenta de servicio:
- El rol Editor de Cloud SQL en el recurso en el que has concedido el rol y sus descendientes. Si se concede en el proyecto, el rol se aplica a todas las instancias del proyecto. El rol Editor de Cloud SQL
no contiene el permiso
cloudsql.instances.delete
. - Un rol de administrador de Cloud SQL en instancias con la etiqueta
test
.
Consola
-
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
- Haz clic en Añadir.
- En el campo Miembros nuevos, introduce el correo de la cuenta de servicio.
- Haz clic en la lista desplegable Rol y selecciona el rol Editor de Cloud SQL. No añadas nada más para este rol.
- Haz clic en Guardar para guardar la condición.
- Haz clic en el menú Rol de la misma cuenta y selecciona el rol Administrador de Cloud SQL.
- Haz clic en Añadir condición.
- Introduce un título y una descripción.
- Selecciona la pestaña Editor de condiciones.
- En la sección Creador de condiciones:
- En Tipo de condición - Recurso - Nombre, introduce un nombre para la condición.
- En Tipo de condición - Recurso - Servicio, selecciona
sqladmin.googleapis.com
. - En Tipo de condición - Recurso - Etiqueta, introduce el nombre con espacio de nombres de la clave de la etiqueta. En este ejemplo, el operador es
matches
y el valor es815471563813/env/test
.
- Haz clic en Guardar para guardar la condición.
- Haz clic en Guardar para guardar la política.
gcloud
En este ejemplo se usan las siguientes variables:
- PROJECT_ID: tu Google Cloud proyecto.
- INSTANCE_ID: tu instancia de Cloud SQL.
- REGION: la región en la que se encuentra tu instancia de Cloud SQL.
- ORGANIZATION_ID: ID de la organización que será el recurso principal de esta clave de etiqueta. Por ejemplo: 12345678901. Para saber cómo obtener el ID de tu organización, consulta el artículo Crear y gestionar organizaciones.
- SERVICE_ACCOUNT_EMAIL:la dirección de correo completa de la cuenta de servicio cuyo acceso quieras modificar.
- Crea una clave de etiqueta llamada "env" con los valores de etiqueta "prod" y "test". Para obtener más información, consulta el artículo
Crear y definir una etiqueta.
gcloud alpha resource-manager tags keys create env \ --parent=organizations/ORGANIZATION_ID gcloud alpha resource-manager tags values create prod \ --parent=env gcloud alpha resource-manager tags values create test \ --parent=env
- Asigna la etiqueta `env` con el valor `test` a tus instancias de Cloud SQL del entorno de prueba. Para obtener más información, consulta la página Etiquetas de Cloud SQL.
- Obtén las vinculaciones de políticas de gestión de identidades y accesos y guárdalas en el archivo
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- Añade las siguientes vinculaciones condicionales al archivo
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.editor", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] }, { "role": "roles/cloudsql.admin", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')" } } ], "etag": "BwWKmjvelug=" "version": 3 }
- Actualiza los enlaces de la política de gestión de identidades y accesos con el nuevo archivo
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud alpha resource-manager tags bindings create \ --tag-value=test \ --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \ --location=REGION