Configura una extensión de autorización

Service Extensions permite que los balanceadores de cargas de aplicaciones envíen textos destacados a los servicios de backend para insertar procesamiento personalizado en la ruta de procesamiento. Las extensiones de autorización se ejecutan en la ruta de procesamiento de solicitudes cuando el balanceador de cargas recibe encabezados de solicitud y después de que el mapa de URL elige el servicio de backend. En esta página, se describe cómo configurar extensiones de autorización para usar un motor de autorización personalizado definido en una política de autorización.

Para obtener una descripción general de las extensiones del balanceador de cargas de aplicaciones, consulta Descripción general de las extensiones de Cloud Load Balancing.

Introducción

Cloud Load Balancing te permite configurar políticas de autorización que aplican el control de acceso en el tráfico que ingresa a los balanceadores de cargas. A veces, las decisiones de autorización complejas no se pueden expresar fácilmente con una política de autorización.

Puedes configurar políticas de autorización con extensiones de autorización para delegar decisiones de autorización a motores de autorización personalizados. En la ruta de datos, las extensiones de autorización se ejecutan después de las extensiones de ruta, pero antes de las extensiones de tráfico. Para obtener más información sobre las políticas de autorización, consulta Descripción general de las políticas de autorización.

Para cada solicitud de autorización, el proxy reenvía los encabezados de solicitud a la extensión. Según la respuesta del proveedor, el proxy reenvía o rechaza la solicitud.

En la versión preliminar, para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, puedes configurar extensiones de autorización por separado para las políticas de autorización de solicitudes y las políticas de autorización de contenido. Las extensiones que se basan en políticas de autorización de solicitudes se configuran para ejecutarse antes que las que se basan en políticas de autorización de contenido.

Para obtener información sobre los límites relacionados con las extensiones del balanceador de cargas de aplicaciones, consulta la página Cuotas y límites.

Configura una extensión de autorización básica

En el siguiente ejemplo, se muestra cómo configurar una extensión de autorización, my-authz-ext, con una política de autorización para delegar decisiones de autorización para un balanceador de cargas de aplicaciones externo global.

gcloud

  1. Crea los recursos necesarios como se describe en Configura un servicio de backend de texto destacado.

    Para este ejercicio, crea un balanceador de cargas de aplicaciones externo global. Nombra el servicio authz-service y la regla de reenvío fr1.

  2. Configura la extensión de autorización.

    1. Define la extensión en un archivo YAML que la asocie con el servicio de backend, authz-service. Usa los valores de muestra proporcionados.

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      Reemplaza PROJECT_ID por el ID del proyecto.

      Para obtener más información sobre los campos del archivo YAML, consulta ExtensionChain en la documentación de la API.

      El campo forwardAttributes te permite especificar los atributos de solicitud, conexión y ubicación para reenviar a tu servicio de autorización. Puedes configurar un máximo de 16 atributos para cada extensión. Para obtener más información sobre los atributos admitidos, consulta Atributos admitidos.

    2. Importa la extensión de autorización. Usa el gcloud service-extensions authz-extensions import comando con los siguientes valores de muestra.

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      
  3. Configura una política de autorización con la extensión.

    1. Define una política de autorización que asocie la extensión my-authz-ext con la regla de reenvío fr1. Usa los valores de muestra proporcionados. La acción CUSTOM indica que se está usando una extensión.

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. Importa la política de autorización al proyecto. Usa el gcloud network-security authz-policies import comando con los siguientes valores de muestra.

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

Configura extensiones de autorización basadas en perfiles

Puedes configurar extensiones de autorización por separado para las políticas de autorización de solicitudes y las políticas de autorización de contenido.

Para una política de autorización de solicitudes

En el siguiente ejemplo, se muestra cómo configurar una extensión de autorización que aplica una política de autorización de solicitudes a una regla de reenvío en us-west1. La política requiere que el tráfico pase la autenticación TLS mutua desde una entidad de seguridad específica antes de que se le permita llegar al destino, example.com/mcp.

gcloud

  1. Configura un servicio de backend de texto destacado llamado lb-request-authz-service en us-west1 con una regla de reenvío llamada fr2.

    Para el servicio, configura un balanceador de cargas de aplicaciones externo regional con backends de grupos de instancias de VM.

  2. Configura la extensión de autorización.

    1. Define la extensión en un archivo YAML que la asocie con el servicio de backend, lb-request-authz-service. Usa los valores de muestra proporcionados.

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      Reemplaza PROJECT_ID por el ID del proyecto.

      La extensión debe estar en la misma región que tu servicio de backend.

      De forma predeterminada, todos los textos destacados de Service Extensions usan el protocolo de procesamiento externo de Envoy o ext_proc. En el caso de los textos destacados de autorización, el protocolo de autorización externa o ext_authz también es compatible con la versión preliminar. Cuando la opción wireFormat se establece en EXT_AUTHZ_GRPC, el texto destacado usa el protocolo ext_authz. Si no se especifica la opción, el texto destacado usa el protocolo ext_proc.

      Para las políticas de autorización de solicitudes, el valor wireFormat puede ser EXT_AUTHZ_GRPC para que el texto destacado use el protocolo ext_authz, aunque también se admite el protocolo ext_proc.

      De forma predeterminada, failOpen se establece en false. Si la extensión agota el tiempo de espera o falla, se detiene el procesamiento de la solicitud. Se prefiere esta opción predeterminada cuando se prioriza la seguridad o la integridad sobre la disponibilidad.

    2. Importa la extensión de autorización. Usa el gcloud beta service-extensions authz-extensions import comando con los siguientes valores de muestra.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. En el mismo proyecto, configura una política de autorización con la extensión.

    Para cualquier solicitud a example.com/mcp, la política requiere la autenticación de TLS mutua de una entidad de seguridad específica y delega aún más la decisión de autorización a la extensión de autorización, my-lb-authz-request-ext.

    1. Define una política de autorización que asocie la extensión my-lb-request-authz-ext con la regla de reenvío fr2. Usa los valores de muestra proporcionados.

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      Para las políticas de autorización de solicitudes, el valor de policyProfile debe ser REQUEST_AUTHZ. Este valor indica que el proveedor de políticas personalizadas actúa en las solicitudes para permitir o rechazar el tráfico.

      La acción CUSTOM indica que una extensión está asociada con el proxy.

      Para obtener más información sobre un recurso de política de autorización, consulta la authzPolicy documentación de referencia.

    2. Importa la política de autorización al proyecto. Usa el gcloud beta network-security authz-policies import comando con los siguientes valores de muestra.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

Para una política de autorización de contenido

En el siguiente ejemplo, se muestra cómo configurar una extensión de autorización que aplica una política de autorización de contenido a una regla de reenvío en us-west1. La política requiere que un servicio de desinfección de contenido realice una inspección detallada de las cargas útiles de tu aplicación para permitir o rechazar solicitudes, o bien mutar las solicitudes y respuestas, según sea necesario.

gcloud

  1. Configura un servicio de backend de texto destacado llamado lb-content-authz-service en us-west1 con una regla de reenvío llamada fr3.

    Para el servicio, configura un balanceador de cargas de aplicaciones externo regional con backends de grupos de instancias de VM.

    Configura el servidor de extensiones con el ext_proc protocolo en FULL_DUPLEX_STREAMED el modo de procesamiento de cuerpo y admite todos los eventos.

  2. Configura la extensión de autorización.

    1. Define la extensión en un archivo YAML que la asocie con el servicio de backend, lb-content-authz-service. Usa los valores de muestra proporcionados.

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      Para las políticas de autorización de contenido, el valor de policyProfile debe ser CONTENT_AUTHZ.

      Para las políticas CONTENT_AUTHZ, no es necesario establecer el valor wireFormat de forma explícita como EXT_PROC_GRPC. De forma predeterminada, el texto destacado usa el protocolo ext_proc.

    2. Importa la extensión de autorización. Usa el gcloud beta service-extensions authz-extensions import comando con los siguientes valores de muestra.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. Configura una política de autorización con la extensión.

    1. Define una política de autorización que asocie la extensión my-lb-content-authz-ext con la regla de reenvío, fr3. Usa los valores de muestra proporcionados.

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      El valor de policyProfile debe ser CONTENT_AUTHZ.

    2. Importa la política de autorización al proyecto. Usa el gcloud beta network-security authz-policies import comando con los siguientes valores de muestra.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

Limitaciones para las extensiones de autorización

Las siguientes son algunas limitaciones de las extensiones de autorización:

  • Una política de autorización solo puede tener una extensión de autorización.
  • Se puede usar una regla de reenvío con varias políticas de autorización, de las cuales solo una puede ser una política de autorización personalizada.

Para conocer las limitaciones que se aplican a todas las extensiones, consulta Limitaciones para las extensiones.

¿Qué sigue?