En esta página, se explica cómo crear niveles de acceso con Access Context Manager y cómo aplicarlos en la documentación protegida con recursos de Identity-Aware Proxy (IAP).
Descripción general
Un nivel de acceso es un conjunto de atributos asignados a solicitudes en función de su origen. Mediante la información, como el tipo de dispositivo, la dirección IP y la identidad del usuario, puedes designar el nivel de acceso que se otorgará. Por ejemplo, puedes asignar un nivel “High_Trust” a las conexiones desde tu red corporativa, y “Trust_Trust” en dispositivos externos que ejecutan sistemas operativos aprobados.
La información del dispositivo se recopila y se hace referencia a ella en los niveles de acceso una vez que configuras la verificación de extremos. La verificación de extremos crea un inventario de todos los dispositivos corporativos y personales que acceden a tus recursos corporativos.
Se aplica un nivel de acceso cuando se agrega como una condición de administración de identidades y accesos (IAM) en tu recurso protegido con IAP. IAP te permite aplicar un modelo de control de acceso detallado a nivel de recurso en lugar de usar firewalls a nivel de red. Por ejemplo, puedes especificar que, si bien muchos recursos están disponibles para “Medium_Trust”, ciertos recursos más sensibles requieren el nivel “High_Trust”.
Para obtener más información, consulta la descripción general de Access Context Manager.
Antes de comenzar
Antes de comenzar, debes hacer lo siguiente:
- Proteger un recurso con IAP
- Configura la Endpoint Verification. Ten en cuenta que esto solo es necesario si quieres limitar el acceso a tus recursos en función de la información del dispositivo del usuario, como el estado de encriptación del almacenamiento.
Asegúrate de tener una de las siguientes funciones otorgadas en tu proyecto.
- Administrador de Access Context Manager
- Editor de Access Context Manager
Crear un nivel de acceso
Mediante el siguiente proceso, se crea un nivel de acceso.
En este ejemplo, supongamos que deseas crear un nivel de acceso que permita que un grupo de auditores internos accedan a la Observabilidad de Google Cloud para un proyecto. Todos los dispositivos para los auditores tienen IP asignadas en una subred que está entre 203.0.113.0
y 203.0.113.127
. También debes asegurarte de que sus dispositivos estén encriptados. Sabes que no habrá ningún dispositivo asignado a esa subred que los que usan los auditores.
Console
Ve a la página de Access Context Manager en la consola de Google Cloud.
Si se te solicita, selecciona tu organización.
En la parte superior de la página Access Context Manager, haz clic en New.
En el panel Nuevo nivel de acceso, en la sección Condiciones, haz clic en Agregar atributo y, luego, en Política de dispositivo.
Haz clic en el menú desplegable Encriptación de almacenamiento y selecciona Encriptado. Ten en cuenta que esta regla solo funciona una vez que configuras Endpoint Verification en los dispositivos de tus empleados.
Vuelve a hacer clic en Agregar atributo y selecciona Subredes de IP.
En el cuadro Subredes IP, ingrese uno o más rangos IPv4 o IPv6 formateados como bloques CIDR.
En este ejemplo, para limitar el acceso a los auditores, debes ingresar
203.0.113.0/25
en el cuadro Subredes de IP.Haga clic en Save.
gcloud
Crea un archivo .yaml para un nivel de acceso que incluya uno o más rangos de IPv4 o IPv6 con formato de bloques CIDR.
En este ejemplo, para limitar el acceso solo a los auditores, debes ingresar lo siguiente en el archivo .yaml:
- ipSubnetworks: - 203.0.113.0/25 - devicePolicy: allowedEncryptionStatuses - ENCRYPTED
Para obtener una lista de los atributos de nivel de acceso y su formato YAML, consulta Atributos de nivel de acceso. Consulta este archivo YAML de nivel de acceso de ejemplo para obtener un archivo YAML integral de todos los atributos posibles.
Ten en cuenta que la regla
devicePolicy
solo funciona una vez que configuras Endpoint Verification en los dispositivos de tus empleados.Guarde el archivo. En este ejemplo, el archivo se llama CONDITIONS.yaml.
Crea el nivel de acceso:
gcloud access-context-manager levels create NAME \ --title TITLE \ --basic-level-spec CONDITIONS.yaml \ --policy=POLICY_NAME
Aquí:
NAME es el nombre único para el nivel de acceso. Debe comenzar con una letra y, además, incluir solo letras, números y guiones bajos.
TITLE es un título legible. Debe ser único para la política.
POLICY_NAME es el nombre de la política de acceso de tu organización.
Deberías ver un resultado similar a este:
Create request issued for: NAME Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done. Created level NAME.
API
Crea un cuerpo de solicitud para crear un recurso
AccessLevel
que incluya uno o más rangos IPv4 o IPv6 con formato de bloques CIDR y una política de dispositivo que requiera almacenamiento encriptado.En este ejemplo, para limitar el acceso solo a los auditores, debes ingresar lo siguiente en el cuerpo de la solicitud:
{ "name": "NAME", "title": "TITLE", "basic": { "conditions": [ { "ipSubnetworks": [ "203.0.113.0/25" ] }, { "devicePolicy": [ "allowedEncryptionStatuses": [ "ENCRYPTED" ] ] } ] } }
Aquí:
NAME es el nombre único para el nivel de acceso. Debe comenzar con una letra y, además, incluir solo letras, números y guiones bajos.
TITLE es un título legible. Debe ser único para la política.
Para crear el nivel de acceso, llama a
accessLevels.create
.POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
Aquí:
- POLICY_NAME es el nombre de la política de acceso de tu organización.
Aplica un nivel de acceso
Un recurso protegido con IAP tiene una política de IAM que vincula la función IAP al recurso.
Si agregas una vinculación condicional de IAM a la política de IAM, el acceso a tus recursos estará más restringido según los atributos de solicitud. Estos incluyen lo siguiente:
- Niveles de acceso
- Ruta de acceso/host de URL
- Fecha/hora
Ten en cuenta que deben ser exactos los valores de solicitud que se comparen con request.host
y request.path
especificados en una vinculación condicional de IAM. Por ejemplo, si restringes el acceso a rutas de acceso que empiezan con /internal admin
, es posible evitar la restricción si se accede a /internal%20admin
. Consulta Usa las condiciones de ruta de acceso y nombre de host para obtener más información.
En los siguientes pasos, se muestra cómo agregar tu nivel de acceso a un recurso protegido con IAP mediante la actualización de su política de IAM.
Console
Ve a la página de administrador de IAP.
Selecciona la casilla de verificación junto a los recursos para los que deseas actualizar los permisos de IAM.
En el panel de información a la derecha, haz clic en Agregar principal.
En el cuadro Principal nueva, ingresa las principales a las que deseas asignarles un rol.
En la lista desplegable Seleccionar una función, selecciona la función Usuario de aplicación web protegida con IAP.
Para especificar los niveles de acceso existentes, selecciónalos en la lista desplegable Niveles de acceso. Debes seleccionar la función Usuario de aplicación web protegida con IAP y tener permisos a nivel de organización para ver los niveles de acceso existentes.
Cuando aplicas varios niveles de acceso a un recurso, los usuarios obtienen acceso al recurso cuando cumplen con las condiciones especificadas en al menos uno de los niveles de acceso que seleccionas (es un O lógico de los niveles de acceso en la lista). Si quieres que los usuarios cumplan con las condiciones en más de un nivel de acceso (un nivel de acceso lógico y de acceso), crea un nivel de acceso que contenga varios niveles de acceso.
Si deseas agregar más funciones para los principales, haz clic en Agregar otra función.
Cuando hayas agregado todas las funciones que necesitas, haz clic en Guardar.
gcloud
Actualmente, solo puedes usar gcloud CLI para establecer vinculaciones condicionales a nivel del proyecto.
Para establecer vinculaciones condicionales, edita el archivo policy.yaml
de tu proyecto mediante el siguiente proceso:
Abre la política de IAM de la aplicación con el siguiente comando de gcloud:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
Edita el archivo
policy.yaml
para especificar lo siguiente:- Los usuarios y los grupos a los que deseas aplicar la condición de IAM
- La función
iap.httpsResourceAccessor
para otorgarles acceso a los recursos - La condición de IAM con tu nivel de acceso
La siguiente condición otorga acceso al usuario y al grupo si se cumplen los requisitos de nivel de acceso ACCESS_LEVEL_NAME y la ruta de URL del recurso comienza con
/
.... - members: - group:EXAMPLE_GROUP@GOOGLE.COM - user:EXAMPLE_USER@GOOGLE.COM role: roles/iap.httpsResourceAccessor condition: expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/") title: CONDITION_TITLE ...
Vincula la política a la aplicación con el comando
set-iam-policy
.gcloud projects set-iam-policy PROJECT_ID policy.yaml
API
A fin de editar el archivo policy.json
de tu aplicación, sigue el proceso que se muestra a continuación para tu tipo de aplicación. Consulta Administra el acceso a los recursos protegidos por IAP a fin de obtener más información sobre cómo usar la API de IAM para administrar las políticas de acceso.
Antes de completar los pasos específicos de la API que se indican a continuación, exporta lo siguiente: variables:
export PROJECT_NUM=PROJECT_NUMBER export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
App Engine
Exporta las siguientes variables de App Engine:
# The APP_ID is usually the project ID export GAE_APP_ID=APP_ID export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}
Obtén la política de IAM para la aplicación de App Engine con el método
getIamPolicy
. El bit de datos vacío al final convierte la solicitudcurl
en POST en lugar de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
Agrega tu vinculación condicional de IAM al archivo JSON de la política de IAM. El siguiente es un ejemplo de un archivo
policy.json
editado que vincula eliap.httpsResourceAccessor
rol a dos usuarios y otorgarles acceso a Chrome Enterprise Premium, recursos protegidos. Se agregó una condición de IAM para otorgarles acceso a los recursos solo si se cumple el requisito de nivel de acceso ACCESS_LEVEL_NAME y la ruta de URL del recurso comienza con/
. Solo puede haber una condición por vinculación.
Archivo policy.json de ejemplo{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group:EXAMPLE_GROUP@GOOGLE.COM", "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
Configura tu nuevo archivo
policy.json
con el métodosetIamPolicy
.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
Servicios y versiones de App Engine
También puedes actualizar la política de IAM para un servicio de App Engine, todas las versiones o una versión específica de un servicio. Para hacerlo en una versión específica de un servicio, haz lo siguiente:
- Exporta las siguientes variantes adicionales.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- Actualiza la variante GAE_BASE_URL exportada.
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
- Obtén y establece la política de IAM para la versión con los comandos
getIamPolicy
ysetIamPolicy
que se muestran arriba.
GKE y Compute Engine
Exporta el ID del proyecto de tu servicio de backend.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
Obtén la política de IAM para la aplicación de Compute Engine con el método
getIamPolicy
. El bit de datos vacío al final convierte la solicitudcurl
en POST en lugar de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''
Agrega tu vinculación condicional de IAM al archivo JSON de la política de IAM. A continuación, se muestra un ejemplo de un archivo
policy.json
editado que vincula la funcióniap.httpsResourceAccessor
a dos usuarios y les otorga acceso a los recursos protegidos por Chrome Enterprise Premium. Se agregó una condición de IAM para otorgarles acceso a los recursos solo si se cumple el requisito de nivel de acceso ACCESS_LEVEL_NAME y la ruta de URL del recurso comienza con/
. Solo puede haber una condición por vinculación.
Archivo policy.json de ejemplo{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group":EXAMPLE_GROUP@GOOGLE.COM, "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
Configura tu nuevo archivo
policy.json
con el métodosetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \ -d @${JSON_NEW_POLICY}