Las Condiciones de IAM te permiten definir y aplicar el control de acceso condicional basado en atributos para los recursos de Google Cloud, incluidas las instancias de Cloud SQL. Para obtener más información sobre las Condiciones de IAM, consulta Descripción general de las Condiciones de IAM.
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 configurar el acceso temporal (por vencer), 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 específica. Puedes usar atributos de fecha y hora en cualquier nivel de la jerarquía de recursos. Para obtener más información, consulta Configura 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 Configura el acceso basado en recursos.
Los casos prácticos incluyen:
Permitir que los usuarios se conecten a instancias específicas
Permitir a los usuarios crear instancias con prefijos o sufijos específicos (por ejemplo, “prueba”).
Limita el acceso a las operaciones de copia de seguridad para instancias de prueba
Permitir que los usuarios borren las instancias de desarrollo y prueba, pero no las instancias de producción.
Permitir a los usuarios realizar operaciones administrativas en ciertas fechas o en ciertos momentos
Permite que los usuarios se conecten a instancias específicas
Supongamos que quieres permitir que un usuario o cuenta de servicio tenga permiso para conectarse solo a una instancia específica de Cloud SQL. Puedes incluir una condición de IAM en la vinculación de la política de IAM que otorgue a esa cuenta los permisos de un rol de Cloud SQL.
De forma predeterminada, el rol predefinido de cliente de Cloud SQL (roles/cloudsql.client
), que contiene el permiso cloudsql.instances.connect
, autoriza al miembro a conectarse a todas las instancias de Cloud SQL de un proyecto. Si ingresas una condición de IAM en la vinculación de la política, puedes otorgar permiso solo a la instancia con nombre.
Console
En este ejemplo, se muestra cómo modificar la vinculación de IAM existente para que el proyecto otorgue un rol de cliente de Cloud SQL a una cuenta de servicio para una instancia específica.
En este ejemplo, se usan las siguientes variables:
- PROJECT_ID: Es el proyecto de Google Cloud.
- INSTANCE_ID: El nombre de la instancia a la que deseas otorgar acceso.
-
En la consola de Google Cloud, ve a la página IAM.
- Haz clic en Agregar.
- En la casilla de entrada Miembros nuevos, ingresa el correo electrónico de la cuenta de servicio.
- Haz clic en la lista desplegable Rol y selecciona el rol Cliente de Cloud SQL.
- Haz clic en Agregar condición:
- Ingresa un título y una descripción.
- Selecciona la pestaña Editor de Condiciones.
- En la sección Creador de Condiciones, haz lo siguiente:
- En Condition type - Resource - Name, ingresa
projects/PROJECT_ID/instances/INSTANCE_ID
. - Asegúrate de que la opción condicional AND esté seleccionada.
- En Tipo de condición - Recurso - Servicio, selecciona
sqladmin.googleapis.com
.
- En Condition type - Resource - Name, ingresa
- 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 la vinculación de la política de IAM existente para que el proyecto otorgue a la cuenta de servicio específica el rol de cliente de Cloud SQL, pero solo para una instancia específica.
En este ejemplo, se usan las siguientes variables:
- PROJECT_ID: Es el proyecto de Google Cloud.
- INSTANCE_ID: El nombre de la instancia a la que deseas otorgar acceso.
- SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico completa de la cuenta de servicio cuyo acceso deseas modificar.
- Obtén las vinculaciones de políticas de IAM existentes y envíalas al archivo
bindings.json
: - Agrega 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 IAM con el archivo
bindings.json
nuevo.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 google_iam_policy
de Terraform y un recurso de Terraform google_project_iam_policy
.
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
- Inicia Cloud Shell
-
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).
-
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 denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
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
-
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.
-
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!”.
- 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:
- Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento
deletion_protection
enfalse
.deletion_protection = "false"
- Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform apply
-
Quita los recursos que se aplicaron antes con tu configuración de Terraform mediante la ejecución del siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform destroy
Limita el acceso a las operaciones de copia de seguridad para instancias de prueba
Supongamos que la topología de tu servicio está configurada para que todas las instancias de prueba tengan un prefijo test
(por ejemplo, test-instance-1
) y todas las instancias de producción tengan un prefijo prod
(por ejemplo, prod-instance-1
).
Puedes limitar el acceso a las operaciones de copia de seguridad de las instancias de prueba para un usuario o una cuenta de servicio. El límite de acceso incluye la restricción de las operaciones CREATE
, GET
, LIST
o DELETE
a copias de seguridad para las instancias de prueba.
Console
-
En la consola de Google Cloud, ve a la página IAM.
- Haz clic en la pestaña PRINCIPALES.
- Ubica la dirección de correo electrónico o la cuenta de servicio (principal) del usuario a la que deseas restringir el acceso.
- Haz clic en el ícono Editar principal a la derecha del principal. Este ícono aparece como un lápiz.
- En el cuadro de diálogo Editar permisos, haz clic en AGREGAR OTRO ROL.
En el campo Filtro del cuadro de diálogo posterior, ingresa
Cloud SQL Admin
. Luego, 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 ahora aparece en el cuadro de diálogo.
- A la derecha del rol Administrador de Cloud SQL, haz clic en el vínculo Agregar condición.
- En el cuadro de diálogo Editar condición, ingresa la siguiente información:
- En el campo Título, ingresa un nombre para la condición que deseas agregar a fin de limitar el acceso a las operaciones de copia de seguridad de instancias de prueba. Por ejemplo, puedes ingresar
Limit access to backup operations
. Haz clic en la pestaña EDITOR DE CONDICIONES y, luego, agrega la siguiente condición:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- En el campo Título, ingresa un nombre para la condición que deseas agregar a fin de limitar el acceso a las operaciones de copia de seguridad de instancias de prueba. Por ejemplo, puedes ingresar
- 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: Es el proyecto de Google Cloud.
- USER_EMAIL: La dirección de correo electrónico del usuario.
- SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico completa de la cuenta de servicio cuyo acceso deseas limitar.
-
Limita el permiso del rol
cloudsql.admin
para un usuario que tiene una dirección de correo electrónico USER_EMAIL.El permiso del rol se limita a los recursos que tienen nombres de recursos que comienzan con
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 permiso del rol
cloudsql.admin
para un usuario que accedió con una cuenta de servicio de SERVICE_ACCOUNT_EMAILgcloud 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"
O
Permite que los usuarios borren las instancias de prueba, pero no las de producción
Supongamos que deseas permitir que una cuenta de servicio borre instancias de prueba, pero no de producción. Puedes hacerlo mediante las etiquetas y si agregas las siguientes dos vinculaciones de políticas para la cuenta de servicio:
- Un rol de editor de Cloud SQL en el recurso en el que otorgaste la función y sus descendientes Si se otorga en el proyecto, el rol se aplica a todas las instancias del proyecto. El rol de Editor de Cloud SQL no contiene el permiso
cloudsql.instances.delete
. - Un rol de Administrador de Cloud SQL en instancias con la etiqueta
test
Console
-
En la consola de Google Cloud, ve a la página IAM.
- Haz clic en Agregar.
- En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la cuenta de servicio.
- Haz clic en la lista desplegable Rol y selecciona el rol Editor de Cloud SQL. No agregues 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 Agregar condición:
- Ingresa un título y una descripción.
- Selecciona la pestaña Editor de Condiciones.
- En la sección Creador de Condiciones, haz lo siguiente:
- En Tipo de condición - Recurso - Nombre, ingresa un nombre para la condición.
- En Tipo de condición - Recurso - Servicio, selecciona
sqladmin.googleapis.com
. - En Tipo de condición - recurso - etiqueta, ingresa el nombre del espacio de nombres de la clave de 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: Es el proyecto de Google Cloud.
- INSTANCE_ID: Es la instancia de Cloud SQL
- REGION: Es la región en la que se encuentra tu instancia de Cloud SQL.
- ORGANIZATION_ID: Es el ID de la organización que será el recurso superior de esta clave de etiqueta, por ejemplo: 12345678901. Para obtener información sobre cómo obtener el ID de tu organización, consulta la sección sobre cómo crear y administrar organizaciones.
- SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico completa de la cuenta de servicio cuyo acceso deseas modificar.
- Crea una clave de etiqueta llamada “env” con los valores de etiqueta “prod” y “test”. Para obtener más información, consulta Crea y define una etiqueta nueva.
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
- Adjunta 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 IAM existentes y envíalas al archivo
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- Agrega 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 las vinculaciones de política de IAM con el archivo
bindings.json
nuevo.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