Puedes usar niveles de acceso personalizados en Access Context Manager para controlar el acceso a Google Cloud los recursos mediante expresiones booleanas escritas en un subconjunto de Common Expression Language (CEL). Puedes evaluar los atributos de la solicitud, como el proyecto de red de origen, la dirección IP, la identidad y los datos del dispositivo de los servicios de seguridad de terceros, para aplicar requisitos de acceso detallados y sensibles al contexto.
Para usar atributos del dispositivo en expresiones de nivel de acceso personalizadas, debes tener una suscripción pagada. Para obtener detalles sobre la creación de expresiones CEL, consulta la especificación del nivel de acceso personalizado. Después de crear un nivel de acceso personalizado, puedes administrarlo de la misma manera que un nivel de acceso básico.
Antes de comenzar
- Crea una política de acceso para tu organización.
Crea un nivel de acceso personalizado
Puedes crear un nivel de acceso personalizado con la Google Cloud consola,
la herramienta de línea de comandos de gcloudla API de REST o RPC.
Console
Para crear un nivel de acceso personalizado con la Google Cloud consola de, haz lo siguiente:
Abre la página de Access Context Manager en la Google Cloud consola.
Si se le solicita, selecciona tu organización.
En la parte superior de la página Access Context Manager, haz clic en Nuevo.
En el panel Nivel de acceso nuevo, haz lo siguiente:
En el cuadro de texto Título del nivel de acceso, ingresa un título para el nivel de acceso. El título debe tener un máximo de 50 caracteres y comenzar con una letra, y solo puede contener números, letras, guiones bajos y espacios.
En Crear condiciones en, selecciona Modo avanzado.
En la sección Condiciones, ingresa las expresiones para tu nivel de acceso personalizado. La condición debe resolverse en un solo valor booleano.
Para obtener ejemplos y más información sobre la compatibilidad con Common Expression Language (CEL) y los niveles de acceso personalizados, consulta la especificación del nivel de acceso personalizado.
Haga clic en Save.
gcloud
Para crear un nivel de acceso personalizado con la herramienta de línea de comandos de gcloud, usa el
gcloud access-context-manager levels create comando.
gcloud access-context-manager levels create LEVEL_NAME \ --title=TITLE \ --custom-level-spec=FILE \ --description=DESCRIPTION \ --policy=POLICY_NAME
Reemplaza lo siguiente:
LEVEL_NAME: Es un nombre único para el nivel de acceso. El nombre debe comenzar con una letra y solo puede incluir letras, números y guiones bajos. El nombre puede tener un máximo de 50 caracteres.TITLE: Es el título corto y legible por humanos para el nivel de acceso.FILE: Es un archivo YAML que contiene tu expresión CEL con el formato de un solo par clave-valor:expression: "CEL_EXPRESSION".Para obtener ejemplos y más información sobre la compatibilidad con Common Expression Language (CEL) y los niveles de acceso personalizados, consulta la especificación del nivel de acceso personalizado.
DESCRIPTION: Es una descripción legible por humanos del nivel de acceso.POLICY_NAME: Es el nombre numérico de la política de acceso de tu organización.
De manera opcional, puedes incluir cualquiera de las
gcloud-wide flags.
Archivo YAML custom-level-spec
Cuando usas la herramienta de línea de comandos de gcloud para crear un nivel de acceso personalizado, debes proporcionar un archivo YAML para la opción custom-level-spec. El archivo YAML define una expresión CEL que se resuelve en un solo valor booleano. El archivo YAML
debe contener un solo par clave-valor con el formato
expression: "CEL_EXPRESSION". El valor de expression debe ser una cadena.
Archivo YAML de ejemplo
expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"
Comando de ejemplo
gcloud access-context-manager levels create Custom_Trust \
--custom-level-spec=customspec.yaml \
--description="Custom access level for corp." \
--title="Custom Trust Level" \
--policy=1521580097614100
REST
Para crear un nivel de acceso personalizado con la API de REST, usa el
accessPolicies.accessLevels.create
método.
Cuerpo de la solicitud
En el cuerpo de la solicitud de la llamada, incluye una instancia del objeto AccessLevel.
{
"name": string,
"title": string,
"description": string,
"custom": {
"expr": {
"expression": string,
"title": string,
"description": string
}
}
}
En el campo custom, crea un objeto que incluya las expresiones CEL para tu nivel de acceso personalizado. La expresión completa debe resolverse como un valor booleano. Los campos title y description son opcionales.
Ejemplo
{
"name": "example_custom_level",
"title": "Example custom level",
"description": "An example custom access level.",
"custom": {
"expr": {
"expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
"title": "Check for known devices",
"description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
}
}
}
RPC
Para crear un nivel de acceso personalizado con RPC, llama a
CreateAccessLevel.
En el campo access_level, incluye una instancia de AccessLevel.
| Campos | |||||
|---|---|---|---|---|---|
name
|
|
||||
title
|
|
||||
description
|
|
||||
custom
|
|
||||
Ejemplos de niveles de acceso personalizados
En esta sección, se proporcionan ejemplos de niveles de acceso personalizados.
Restringe el acceso según el proyecto de origen
Puedes restringir el acceso a los recursos para permitir solo las solicitudes que provienen de proyectos Google Cloud específicos y proyectos de arrendatario relacionados. La restricción de acceso basada en proyectos es útil para proteger las interacciones con identidades para cargas de trabajo, que son identidades no humanas que pertenecen a un Google Cloud proyecto. Las identidades para cargas de trabajo incluyen cuentas de servicio, identidades de federación de identidades para cargas de trabajo, identidades para cargas de trabajo administradas y identidades de agente.
La siguiente expresión otorga acceso si la solicitud proviene de projects/123456789:
originatesFromProjects(origin, ["projects/123456789"])
Restringe el acceso de Workload Identity a su propio proyecto de red
Puedes restringir una Workload Identity de modo que solo pueda realizar solicitudes desde redes asociadas a un Google Cloud proyecto que posee la Workload Identity. El proyecto puede ser un proyecto de nivel superior o proyectos de arrendatario del proyecto de nivel superior. La restricción de acceso basada en proyectos es útil para proteger las interacciones de Workload Identity. A diferencia de originatesFromProjects, no necesitas especificar números de proyecto en la expresión, lo que te permite volver a usar el mismo nivel de acceso en varios proyectos.
La siguiente expresión otorga acceso si el proyecto de red de origen (o sus proyectos de arrendatario asociados) coincide con el proyecto que posee la identidad para cargas de trabajo que llama:
request.auth.matchesNetworkProject(origin)