Crear un nivel de acceso personalizado

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 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:

  1. Abre la página de Access Context Manager en la Google Cloud consola.

    Abrir la página de Access Context Manager

  2. Si se le solicita, selecciona tu organización.

  3. En la parte superior de la página Access Context Manager, haz clic en Nuevo.

  4. En el panel Nivel de acceso nuevo, haz lo siguiente:

    1. 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.

    2. En Crear condiciones en, selecciona Modo avanzado.

    3. 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.

    4. 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
Tipo string
Descripción

Obligatorio.

El nombre del recurso del nivel de acceso. El POLICY_ID es el nombre numérico de la política de acceso de tu organización. El SHORT_NAME debe comenzar con una letra y solo puede incluir letras, números y guiones bajos.

Formato:

            accessPolicies/policy_id/accessLevels/short_name
            
title
Tipo string
Descripción

Una etiqueta legible por humanos para el nivel de acceso. Los niveles de acceso deben tener nombres únicos.

description
Tipo string
Descripción

Una descripción del nivel de acceso.

custom
Tipo string
Descripción

Las expresiones CEL para tu nivel de acceso personalizado. La expresión completa debe resolverse como un valor booleano.

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)