Configura políticas de autorización para balanceadores de cargas de aplicaciones

En esta página, se muestra cómo configurar políticas de autorización para los balanceadores de cargas de aplicaciones.

Antes de comenzar

Configura el balanceador de cargas

Si aún no creaste un balanceador de cargas, consulta las siguientes páginas para configurar el balanceador de cargas de aplicaciones que prefieras:

Crea una política de autorización

Para crear una política de autorización, crea un archivo YAML que defina el destino y las reglas y, luego, importa el archivo con el comando gcloud network-security authz-policies.

En esta sección, se proporcionan instrucciones para crear políticas de autorización adjuntas a la regla de reenvío de los balanceadores de cargas de aplicaciones.

Para obtener más información sobre cómo crear una política de autorización para un Agent Gateway que delega la autorización con Service Extensions, consulta Delega la autorización con Service Extensions.

Para obtener más información sobre cómo crear una política de autorización para un Secure Web Proxy, consulta Configura políticas de autorización para Secure Web Proxy.

Política de autorización para rechazar solicitudes

En esta sección, se proporcionan ejemplos de políticas de autorización que rechazan solicitudes en función de ciertos atributos de solicitud.

Rechazar solicitudes basadas en rangos de direcciones IP

En esta sección, se proporciona un ejemplo de política de autorización que rechaza las solicitudes en función de las solicitudes que se originan en rangos de direcciones IP específicos.

Global y entre regiones

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-deny.yaml para la regla de reenvío LB_FORWARDING_RULE en la ubicación global. La política deniega a los clientes con direcciones IP en el rango 10.0.0.0/24 para acceder a la ruta de URL /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: Es el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regional

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-deny.yaml para la regla de reenvío LB_FORWARDING_RULE en una regiónGoogle Cloud . La política deniega el acceso a la ruta de URL /api/payments a los clientes con direcciones IP en el rango 10.0.0.0/24.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: Es tu región de Google Cloud .
    • LB_FORWARDING_RULE: Es el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

Rechaza solicitudes según las principales del certificado de cliente

En esta sección, se proporciona un ejemplo de política de autorización que rechaza las solicitudes en función de las principales de certificados de cliente.

Global y entre regiones

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-deny.yaml para la regla de reenvío LB_FORWARDING_RULE en la ubicación global. La política deniega el acceso a la ruta de URL /api/payments a los clientes que tienen www.example.com en los SAN de nombre de DNS de su certificado de cliente.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regional

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-deny.yaml para la regla de reenvío LB_FORWARDING_RULE en una regiónGoogle Cloud . La política deniega el acceso a la ruta de URL /api/payments a los clientes que tienen www.example.com en los SAN de nombre de DNS de su certificado de cliente.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: Es tu región de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

Política de autorización para permitir solicitudes

En esta sección, se proporciona un ejemplo de política de autorización que permite solicitudes que se originan en rangos de direcciones IP específicos.

Global y entre regiones

Si usas un balanceador de cargas de aplicaciones externo global o un balanceador de cargas de aplicaciones interno entre regiones, sigue estos pasos para crear una política de autorización:

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-allow.yaml para la regla de reenvío LB_FORWARDING_RULE en la ubicación global. La política permite que los clientes con direcciones IP en el rango 10.0.0.0/24 accedan a la ruta de URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=global
    

Regional

Si usas un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno regional, sigue estos pasos para crear e importar una política de autorización:

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-allow.yaml para la regla de reenvío LB_FORWARDING_RULE en una región Google Cloud específica. La política permite que los clientes con direcciones IP en el rango 10.0.0.0/24 accedan a la ruta de URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: Es tu región de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

Política de autorización basada en cuentas de servicio o etiquetas

Puedes aplicar una política de autorización basada en cuentas de servicio o etiquetas seguras adjuntas a varios recursos de Google Cloud .

En este ejemplo, se da por sentado que ya hiciste lo siguiente:

Cuenta de servicio

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-deny.yaml para la regla de reenvío LB_FORWARDING_RULE de un balanceador de cargas de aplicaciones interno regional. La política está configurada para rechazar las solicitudes de un recurso de Google Cloud , como una VM de Compute Engine, con la cuenta de servicio my-sa-123@PROJECT_ID.iam.gserviceaccount.com para alcanzar la ruta de acceso /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones internos regionales y entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: Es tu región de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

    Reemplaza LOCATION por tu región de Google Cloud .

Etiqueta

  1. Define la política de autorización en un archivo YAML.

    En el siguiente ejemplo, se crea un archivo authz-policy-allow.yaml para la regla de reenvío LB_FORWARDING_RULE de un balanceador de cargas de aplicaciones interno regional. La política solo permite solicitudes que se originan en un recurso de Google Cloud , como una VM de Compute Engine, con un valor de etiqueta segura TAG_VALUE_PERMANENT_ID para acceder a la ruta de URL de/api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE_PERMANENT_ID"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones internos regionales y entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: Es tu región de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
    • TAG_VALUE_PERMANENT_ID: Es el ID permanente de un valor de etiqueta.
  2. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

    Reemplaza lo siguiente:

    • LOCATION: Es tu región de Google Cloud .

Política de autorización para delegar decisiones de autorización

En los ejemplos de esta sección, se crea una política de autorización que delega las decisiones de autorización a los siguientes servicios a través de las extensiones de servicio:

Delega la decisión de autorización a un servicio administrado por el usuario

Puedes configurar una política de autorización para delegar la decisión de autorización en un servicio administrado por el usuario a través de extensiones de servicio, específicamente una extensión de autorización.

  • Para los balanceadores de cargas globales y entre regiones, la extensión de autorización se puede ejecutar en un servicio de backend de Google Cloud administrado por el usuario.

  • En el caso de los balanceadores de cargas regionales, la extensión de autorización se puede ejecutar tanto en un servicio de backend de Google Cloud administrado por el usuario como en un servicio basado en FQDN.

En este ejemplo de configuración, se supone que creaste un servicio de backend Google Cloud administrado por el usuario, también conocido como servicio de backend de texto destacado, llamado authz-service. Para obtener más información sobre cómo crear uno, consulta Configura un servicio de backend de texto destacado administrado por el usuario.

Para un servicio basado en FQDN, en esta configuración de ejemplo, se supone que el servicio personalizado se implementa en tu propia VPC, admite el protocolo ext_authz y se puede acceder a él con el nombre de dominio completamente calificado mycustomauthz.internal.net.

Global y entre regiones

Si usas un balanceador de cargas de aplicaciones externo global o un balanceador de cargas de aplicaciones interno entre regiones, sigue estos pasos para delegar la decisión de autorización al servicio administrado por el usuario.

  1. Define la extensión de autorización en un archivo YAML. La extensión de autorización se ejecuta en un servicio de backend (authz-service) y admite el protocolo ext_authz.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    
  2. Importa el archivo YAML de la extensión de autorización con el comando gcloud service-extensions authz-extensions import para crear la extensión de autorización.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=global
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  3. Define la política de autorización en un archivo YAML. La política de autorización delega la autorización a la extensión de autorización en el campo customProvider.

    La política llama a la extensión de autorización my-authz-ext para todo el tráfico a la ruta de URL example.com/api/payments cuando la solicitud contiene un encabezado Authorization no vacío.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - hosts:
          - exact: "example.com"
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  4. Para crear la política de autorización, importa el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=global
    

Regional

Si usas un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno regional, sigue estos pasos para delegar la decisión de autorización a un servicio administrado por el usuario.

  1. Define la extensión de autorización en un archivo YAML. La extensión de autorización puede ejecutarse en un servicio de backend o en un servicio basado en FQDN.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: BACKEND_SERVICE_URI_OR_FQDN
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • BACKEND_SERVICE_URI_OR_FQDN: El servicio puede ser cualquiera de los siguientes:
      • un URI de recurso de servicio de backend regional con el formato https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service.
      • un nombre de dominio completamente calificado (por ejemplo, mycustomauthz.extension.net) que Cloud DNS pueda resolver.
  2. Importa el archivo YAML de la extensión de autorización con el comando gcloud service-extensions authz-extensions import para crear la extensión de autorización.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se configura el servicio de backend de texto destacado.

  3. Define la política de autorización en un archivo YAML. La política de autorización delega la autorización a la extensión de autorización en el campo customProvider.

    La política llama a la extensión de autorización my-authz-ext para todo el tráfico a la ruta de URL example.com/api/payments cuando la solicitud contiene un encabezado Authorization no vacío.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: La Google Cloud región
    • LB_FORWARDING_RULE: Es el nombre de la regla de reenvío del balanceador de cargas.
  4. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se configuró el balanceador de cargas.

Para obtener más información sobre las extensiones de autorización, consulta Configura una extensión de autorización.

Delega la decisión de autorización a Model Armor

Puedes configurar una política de autorización para delegar la decisión de autorización a Model Armor.

Antes de comenzar, crea una plantilla de Model Armor. En esta configuración de ejemplo, la política de autorización apunta a una extensión de autorización, que, a su vez, apunta a Model Armor.

Si usas un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno regional, sigue estos pasos para delegar la decisión de autorización a Model Armor.

Regional

  1. Define la extensión de autorización en un archivo YAML. La extensión de autorización apunta a las plantillas de solicitud y respuesta de Model Armor.

    cat >authz-extension.yaml <<EOF
    name: my-authz-extension
    loadBalancingScheme: INTERNAL_MANAGED
    service: modelarmor.LOCATION.rep.googleapis.com
    metadata:
      model_armor_settings: '[
        {
        "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID",
        "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID"
        }
      ]'
    failOpen: true
    EOF
    

    Reemplaza lo siguiente:

    • LOCATION: Es la ubicación de la plantilla.
    • PROJECT_ID: Es el ID del proyecto al que pertenece la plantilla.
    • RESPONSE_TEMPLATE_ID: ID de la plantilla de respuesta
    • REQUEST_TEMPLATE_ID: Es el ID de la plantilla de solicitud.
  2. Importa el archivo YAML de la extensión de autorización con el comando gcloud service-extensions authz-extensions import para crear la extensión de autorización.

    gcloud service-extensions authz-extensions import my-authz-ext \
      --source=authz-extension.yaml \
      --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se encuentra el balanceador de cargas.

  3. Define la política de autorización en un archivo YAML. La política de autorización delega la autorización a la extensión de autorización en el campo customProvider.

    El valor de policyProfile es CONTENT_AUTHZ.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: INTERNAL_MANAGED
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: CONTENT_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: La Google Cloud región
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  4. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-custom \
      --source=authz-policy-custom.yaml \
      --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se configuró el balanceador de cargas.

Delega la decisión de autorización a Identity-Aware Proxy

En el caso de los balanceadores de cargas de aplicaciones externos globales y los balanceadores de cargas de aplicaciones internos entre regiones, no puedes delegar la decisión de autorización a IAP a través de una extensión de autorización. Para estos balanceadores de cargas, puedes delegar la decisión de autorización a IAP a través del campo customProvider en el recurso de la política de autorización.

En el caso de los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, puedes configurar una política de autorización para delegar la decisión de autorización a IAP a través de una extensión de autorización.

Global y entre regiones

En el siguiente ejemplo, todas las decisiones de autorización se delegan a IAP para todas las solicitudes que se originan en el bloque de direcciones IP 10.0.0.0/24. Si las solicitudes se originan en cualquier dirección IP fuera de 10.0.0.0/24, no coinciden con esta política y no las evalúa IAP según esta regla específica.

  1. Define la política de autorización en un archivo YAML. La política de autorización delega la autorización a IAP a través del campo customProvider.

    cat >authz-policy-iap.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
      - from:
          sources:
          - ipBlock:
            - prefix: "10.0.0.0"
              length: 24
    action: CUSTOM
    customProvider:
      cloudIap: {}
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos globales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos entre regiones, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  2. Para crear la política de autorización, importa el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-iap.yaml \
        --location=global
    

Regional

Si usas un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno regional, sigue estos pasos para delegar la decisión de autorización a IAP con una extensión de autorización.

  1. Define la extensión de autorización en un archivo YAML. La extensión de autorización apunta a IAP.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
  2. Importa el archivo YAML de la extensión de autorización con el comando gcloud service-extensions authz-extensions import para crear la extensión de autorización.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se configura la extensión de autorización.

  3. Define la política de autorización en un archivo YAML. La política de autorización delega la autorización a la extensión de autorización en el campo customProvider.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Reemplaza lo siguiente:

    • LB_SCHEME: Es el esquema de balanceo de cargas. Para los balanceadores de cargas de aplicaciones externos regionales, establece el esquema en EXTERNAL_MANAGED. Para los balanceadores de cargas de aplicaciones internos regionales, establece el esquema en INTERNAL_MANAGED.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • LOCATION: La Google Cloud región
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de cargas.
  4. Crea la política de autorización importando el archivo YAML de la política de autorización con el comando gcloud network-security authz-policies import.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Reemplaza LOCATION por la región de Google Cloud en la que se configuró el balanceador de cargas.

Comprende los registros de la política de autorización en Cloud Logging

Para comprender cómo se registran las políticas de autorización cuando se permite o se rechaza una solicitud, consulta las siguientes secciones.

La solicitud no coincide con las políticas ALLOW ni DENY

Cuando una solicitud no coincide con las políticas ALLOW ni DENY, la política DENY permite la solicitud y la registra como allowed_as_no_deny_policies_matched_request. Por el contrario, la política ALLOW rechaza la solicitud y la registra como denied_as_no_allow_policies_matched_request. Debido a que una de las políticas rechaza la solicitud, esta se rechaza.

  • Si usas un balanceador de cargas de aplicaciones externo global, statusDetails se establece en denied_by_authz_policy en el registro. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Si usas un balanceador de cargas de aplicaciones interno regional, un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno entre regiones, proxyStatus se establece en error=\"http_request_error\"; details=\"denied_by_authz_policy\" en el registro. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

La solicitud coincide con la política DENY

Cuando una solicitud coincide con la política DENY, se rechaza y se registra la política que la rechazó.

  • Si usas un balanceador de cargas de aplicaciones externo global, statusDetails se establece en denied_by_authz_policy en el registro, y el nombre de la política que rechazó la solicitud se registra en policies. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Si usas un balanceador de cargas de aplicaciones interno regional, un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno entre regiones, proxyStatus se establece en error=\"http_request_error\"; details=\"denied_by_authz_policy\" y el nombre de la política se registra en policies. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

La solicitud no coincide con la política DENY, pero sí con la política ALLOW

Cuando una solicitud no coincide con la política DENY, pero coincide con la política ALLOW, se permite la solicitud. En el registro, esta acción se registra como allowed_as_no_deny_policies_matched_request para la política DENY. También se registra la política que permitió la solicitud.

  • Si usas un balanceador de cargas de aplicaciones externo global, no hay statusDetails en el registro. La política que permitió la solicitud también se registra en policies. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Si usas un balanceador de cargas de aplicaciones interno regional, un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno entre regiones, no hay un campo proxyStatus en el registro. La política que permitió la solicitud también se registra en policies. Consulta el siguiente ejemplo:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

¿Qué sigue?