Configurar políticas de autorización para balanceadores de carga de aplicaciones

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

Antes de empezar

Configurar el balanceador de carga

Si no has creado un balanceador de carga, consulta las siguientes páginas para configurar el balanceador de carga de aplicaciones que prefieras:

Crear y asociar cuentas de servicio o etiquetas a Google Cloud máquinas virtuales

En el caso de los balanceadores de carga de aplicaciones internos, puedes aplicar políticas de autorización basadas en cuentas de servicio o etiquetas asociadas a diferentes Google Cloud recursos.

En este documento se explica cómo crear una política de autorización basada en cuentas de servicio o etiquetas asociadas a instancias de Google Cloud máquina virtual (VM). Cualquier solicitud que proceda de una máquina virtual cliente vinculada a una cuenta de servicio o etiqueta específica se puede permitir, denegar o delegar en un servicio externo. En la sección Política de autorización basada en cuentas de servicio o etiquetas de este documento se proporciona un ejemplo de una política de autorización que usa cuentas de servicio y etiquetas para aplicar el control de acceso.

No se pueden aplicar políticas de autorización basadas en cuentas de servicio o etiquetas a balanceadores de carga de aplicaciones externos.

Asociar cuentas de servicio a máquinas virtuales de cliente

Para obtener instrucciones sobre cómo asociar una cuenta de servicio a una instancia de VM, consulta los siguientes documentos:

Asigna etiquetas a la plantilla del grupo de instancias

Antes de vincular una etiqueta con la plantilla del grupo de instancias, debes crear una clave y un valor de etiqueta. Cuando crees una etiqueta, asígnale un GCE_FIREWALLpropósito Google Cloud .Las funciones de redes, como el proxy web seguro y las políticas de autorización, requieren que se aplique el GCE_FIREWALLpropósito Google Cloud a la etiqueta.

Crear una clave y un valor de etiqueta

Para crear etiquetas, necesitas el rol Administrador de etiquetas (roles/resourcemanager.tagAdmin).

Consola

  1. En la Google Cloud consola, ve a la página Etiquetas.

    Vaya a Etiquetas.

  2. Haz clic en Crear.

  3. En el campo Descripción de la clave de etiqueta, introduce una descripción.

  4. Seleccione la casilla Para usar con el cortafuegos de red.

  5. En la lista Proyecto, selecciona el Google Cloud proyecto en el que quieras crear la etiqueta.

  6. En el campo Red, selecciona LB_NETWORK.

  7. Haz clic en Añadir valor.

  8. En el campo Valor de la etiqueta, introduce TAG_VALUE. El valor debe ser numérico.

  9. En el campo Descripción del valor de la etiqueta, introduce una descripción.

  10. Cuando haya terminado de añadir valores de etiqueta, haga clic en Crear clave de etiqueta.

gcloud

  1. Crea la clave de la etiqueta.

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=organizations/ORG_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=LB_NETWORK
    

    Haz los cambios siguientes:

    • TAG_KEY: el nombre de la clave de la etiqueta.
    • ORG_ID: el ID de tu organización.
    • LB_NETWORK: el nombre de tu red de VPC.
  2. Añade el valor de la etiqueta a la clave de etiqueta numérica.

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=ORG_ID/TAG_KEY
    

    Sustituye TAG_VALUE por un valor de etiqueta numérica.

Vincular la etiqueta a la plantilla del grupo de instancias

Los administradores de etiquetas pueden vincular etiquetas a instancias de VM concretas o a la plantilla del grupo de instancias, así como adjuntar el valor de la etiqueta a los backends de las VMs o de la plantilla.

Para vincular etiquetas, necesitas el rol de usuario de etiquetas (roles/resourcemanager.tagUser).

  1. Define el prefijo del nombre completo de tu proyecto y tu zona:

    FULL_NAME_PREFIX=//compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/instances/
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • ZONE: la zona en la que se encuentra el grupo de instancias gestionado.
  2. Obtén el ID de la plantilla del grupo de instancias:

    TEMPLATE_ID=$(gcloud compute instance-templates describe TEMPLATE_NAME --region=LOCATION --format='value(id)')
    

    Haz los cambios siguientes:

    • TEMPLATE_NAME: el nombre de la plantilla del grupo de instancias.
    • LOCATION: tu Google Cloud región.
  3. Concatenar los valores de FULL_NAME_PREFIX y TEMPLATE_ID:

    PARENT="$FULL_NAME_PREFIX$TEMPLATE_ID"
    echo $PARENT
    
  4. Crea los enlaces.

    gcloud resource-manager tags bindings create \
        --location LOCATION \
        --tag-value ORG_ID/TAG_KEY/TAG_VALUE \
        --parent PARENT
    

    Haz los cambios siguientes:

    • ORG_ID: el ID de tu organización.
    • LOCATION: tu Google Cloud región.
    • TAG_KEY: el nombre de tu clave de etiqueta segura.
    • TAG_VALUE: valor numérico de la etiqueta.

Crear una política de autorización

Para crear una política de autorización, crea un archivo YAML en el que se definen el destino y las reglas, y, a continuación, importa el archivo con el comando gcloud beta network-security authz-policies.

En esta sección se proporcionan instrucciones para crear diferentes tipos de políticas de autorización asociadas a la regla de reenvío de un balanceador de carga.

Política de autorización para denegar solicitudes

En esta sección se proporciona un ejemplo de política de autorización que deniega solicitudes basadas en principales de certificados de cliente.

Global y entre regiones

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

  1. Crea un archivo YAML de política de autorización para denegar determinadas solicitudes.

    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. Esta política deniega el acceso a la ruta de URL /api/payments a los clientes que tengan www.example.com en los SANs del 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
            exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso del balanceador de carga de aplicación externo global, define el esquema como EXTERNAL_MANAGED. En el caso de los balanceadores de carga de aplicación internos entre regiones, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización:

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

Regional

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

  1. Crea un archivo YAML de política de autorización para denegar determinadas solicitudes.

    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 . Esta política deniega el acceso a la ruta de URL /api/payments a los clientes que tengan www.example.com en los SANs del 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"
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso de los balanceadores de carga de aplicación externos regionales, define el esquema como EXTERNAL_MANAGED. En el caso de los balanceadores de carga de aplicaciones internos regionales, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LOCATION: tu Google Cloud región.
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización en la región LOCATION:

    gcloud beta 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 procedentes de intervalos de direcciones IP específicos.

Global y entre regiones

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

  1. Crea un archivo YAML de política de autorización para permitir determinadas solicitudes.

    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 del intervalo 10.0.0.1/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.1"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso del balanceador de carga de aplicación externo global, define el esquema como EXTERNAL_MANAGED. En el caso de los balanceadores de carga de aplicación internos entre regiones, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización:

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

Regional

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

  1. Crea un archivo YAML de política de autorización para permitir determinadas solicitudes.

    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 del intervalo 10.0.0.1/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"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.1"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. Si usas un balanceador de carga de aplicación externo regional, define el esquema como EXTERNAL_MANAGED. Si usas un balanceador de carga de aplicación interno regional, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LOCATION: tu Google Cloud región.
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización en la región LOCATION:

    gcloud beta 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

Solo puedes aplicar políticas de autorización basadas en cuentas de servicio o etiquetas en balanceadores de carga de aplicaciones internos. El tráfico procedente de una VM de cliente vinculada a una cuenta de servicio o etiqueta específica se puede permitir, denegar o delegar en un servicio externo.

Si quieres crear y adjuntar cuentas de servicio o etiquetas a máquinas virtuales, consulta la sección Crear y adjuntar cuentas de servicio o etiquetas a máquinas virtuales de este documento. Google Cloud Google Cloud

Cuenta de servicio

  1. Crea un archivo YAML de política de autorización para denegar determinadas solicitudes.

    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 carga de aplicaciones interno regional. La política se ha configurado para denegar las solicitudes de cualquier máquina virtual cliente con la cuenta de servicio my-sa-123@PROJECT_ID.iam.gserviceaccount.com para acceder a la ruta /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"
    httpRules:
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso de un balanceador de carga de aplicaciones interno regional, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LOCATION: tu Google Cloud región.
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización en la región Google Cloud especificada.

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

    Haz los cambios siguientes:

    • LOCATION: tu Google Cloud región.

Etiqueta

  1. Crea un archivo YAML de política de autorización para permitir determinadas solicitudes.

    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 carga de aplicación interno regional. La política solo permite que las solicitudes que procedan de una máquina virtual con la etiqueta de recurso TAG_VALUE 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"
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso de un balanceador de carga de aplicaciones interno regional, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LOCATION: tu Google Cloud región.
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización en la regiónGoogle Cloud especificada:

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

    Haz los cambios siguientes:

    • LOCATION: tu Google Cloud región.

Política de autorización para delegar en una extensión de servicio

Antes de empezar, configura un motor de autorización externo. Para obtener más información sobre las extensiones de servicio, consulta la descripción general de las llamadas de atención de Cloud Load Balancing.

Global y entre regiones

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

  1. Crea un archivo de política de autorización para delegar determinadas solicitudes en un servicio externo.

    En el siguiente ejemplo se crea un archivo authz-policy-custom.yaml para la regla de reenvío LB_FORWARDING_RULE en la ubicación global. La política llama a la extensión AUTHZ_EXTENSION para todo el tráfico a la ruta de URL /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:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "https://networkservices.googleapis.com/v1/projects/PROJECT_ID/locations/global/authzExtensions/AUTHZ_EXTENSION"
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso del balanceador de carga de aplicación externo global, define el esquema como EXTERNAL_MANAGED. En el caso de los balanceadores de carga de aplicación internos entre regiones, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
    • AUTHZ_EXTENSION: el nombre de la extensión de autorización.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización:

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

Regional

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

  1. Crea un archivo YAML de política de autorización para delegar determinadas solicitudes en un servicio externo.

    En el siguiente ejemplo se crea un archivo authz-policy-custom.yaml para la regla de reenvío LB_FORWARDING_RULE en una región Google Cloud de un balanceador de carga de aplicación interno regional. La política llama a la extensión AUTHZ_EXTENSION para todo el tráfico a la ruta de URL /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"
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "https://networkservices.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION"
    EOF
    

    Haz los cambios siguientes:

    • LB_SCHEME: tu esquema de balanceo de carga. En el caso de los balanceadores de carga de aplicación externos regionales, define el esquema como EXTERNAL_MANAGED. En el caso de los balanceadores de carga de aplicaciones internos regionales, define el esquema como INTERNAL_MANAGED.
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • LOCATION: tu Google Cloud región.
    • LB_FORWARDING_RULE: el nombre de la regla de reenvío del balanceador de carga.
    • AUTHZ_EXTENSION: el nombre de la extensión de autorización.
  2. Crea una política de autorización e importa el archivo YAML.

    El siguiente comando de ejemplo importa el archivo de política creado anteriormente y crea una política de autorización en la región LOCATION:

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

Probar una política de autorización

Para probar una política de autorización, envía tráfico al balanceador de carga. Para obtener más información, consulta las siguientes páginas:

Información sobre los registros de políticas de autorización en Cloud Logging

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

La solicitud no se ajusta a las políticas de ALLOW ni a las de 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. Como una de las políticas deniega la solicitud, esta se deniega.

  • Si usas un balanceador de carga de aplicación externo global, statusDetails se define como 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 carga de aplicación interno regional, un balanceador de carga de aplicación externo regional o un balanceador de carga de aplicación interno entre regiones, proxyStatus se define como 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 cumple la política de DENY

Cuando una solicitud coincide con la política DENY, se deniega y se registra la política que ha denegado la solicitud.

  • Si usas un balanceador de carga de aplicación externo global, statusDetails se define como denied_by_authz_policy en el registro y el nombre de la política que ha denegado 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 carga de aplicación interno regional, un balanceador de carga de aplicación externo regional o un balanceador de carga de aplicación interno entre regiones, proxyStatus se define como 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 cumple la política de DENY, pero sí la de ALLOW

Si una solicitud no cumple la política de DENY, pero sí la de ALLOW, se permite. 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 ha permitido la solicitud.

  • Si usas un balanceador de carga de aplicación externo global, no hay statusDetails en el registro. La política que ha permitido 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 carga de aplicación interno regional, un balanceador de carga de aplicación externo regional o un balanceador de carga de aplicación interno entre regiones, no hay ningún campo proxyStatus en el registro. La política que ha permitido 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"
      }
    

Siguientes pasos