Service Extensions permite que los balanceadores de cargas de aplicaciones envíen llamadas 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 al 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 las 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 la Descripción general de las políticas de autorización.
Para cada solicitud de autorización, el proxy reenvía los encabezados de la 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 basadas en políticas de autorización de solicitudes se configuran para ejecutarse antes que las basadas 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
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. Asigna el nombre
authz-serviceal servicio yfr1a la regla de reenvío.Configura la extensión de autorización.
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 EOFReemplaza
PROJECT_IDpor 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. Para obtener información sobre los atributos admitidos, consulta Atributos admitidos.
Importa la extensión de autorización. Usa el comando
gcloud service-extensions authz-extensions importcon los siguientes valores de muestra.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalSi quieres establecer el protocolo en
ext_authz, usa el comandogcloud beta service-extensions authz-extensions importen su lugar.
Configura una política de autorización con la extensión.
Define una política de autorización que asocie la extensión
my-authz-extcon la regla de reenvíofr1. Usa los valores de muestra proporcionados. La acciónCUSTOMindica 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" EOFImporta la política de autorización al proyecto. Usa el comando
gcloud network-security authz-policies importcon 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 según los perfiles
Puedes configurar las extensiones de autorización por separado para las políticas de autorización de solicitudes y 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 principal específica antes de que se le permita llegar al destino, example.com/mcp.
gcloud
Configura un servicio de backend de devolución de llamada llamado
lb-request-authz-serviceenus-west1con una regla de reenvío llamadafr2.Para el servicio, configura un balanceador de cargas de aplicaciones externo regional con backends de grupos de instancias de VM.
Configura la extensión de autorización.
Define la extensión en un archivo YAML que asocie la extensión 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 EOFReemplaza
PROJECT_IDpor el ID del proyecto.La extensión debe estar en la misma región que tu servicio de backend.
De forma predeterminada, todas las llamadas de Service Extensions usan el protocolo de procesamiento externo de Envoy o
ext_proc. En el caso de las llamadas de autorización, el protocolo de autorización externa oext_authztambién se admite en la vista previa. Cuando la opciónwireFormatse establece enEXT_AUTHZ_GRPC, la llamada utiliza el protocoloext_authz. Si no se especifica la opción, el texto destacado usa el protocoloext_proc.En el caso de las políticas de autorización de solicitudes, el valor de
wireFormatpuede serEXT_AUTHZ_GRPCpara que la llamada use el protocoloext_authz, aunque también se admite el protocoloext_proc.De forma predeterminada,
failOpense configura comofalse. Si la extensión agota el tiempo de espera o falla, se detiene el procesamiento de la solicitud. Esta opción predeterminada es preferible cuando se prioriza la seguridad o la integridad por sobre la disponibilidad.Importa la extensión de autorización. Usa el comando
gcloud beta service-extensions authz-extensions importcon 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
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 autenticación de TLS mutua de una principal 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.Define una política de autorización que asocie la extensión
my-lb-request-authz-extcon la regla de reenvíofr2. 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" EOFEn el caso de las políticas de autorización de solicitudes, el valor de
policyProfiledebe serREQUEST_AUTHZ. Este valor indica que el proveedor de políticas personalizadas actúa sobre las solicitudes para permitir o denegar el tráfico.La acción
CUSTOMindica que hay una extensión asociada al proxy.Para obtener más información sobre un recurso de política de autorización, consulta la documentación de referencia de
authzPolicy.Importa la política de autorización al proyecto. Usa el comando
gcloud beta network-security authz-policies importcon 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 un servicio de saneamiento de contenido para realizar una inspección profunda de las cargas útiles de tu aplicación y permitir o rechazar solicitudes, o bien mutar las solicitudes y respuestas, según sea necesario.
gcloud
Configura un servicio de backend de devolución de llamada llamado
lb-content-authz-serviceenus-west1con una regla de reenvío llamadafr3.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 protocolo
ext_procen el modo de procesamiento del cuerpoFULL_DUPLEX_STREAMEDy admite todos los eventos.Configura la extensión de autorización.
Define la extensión en un archivo YAML que asocie la extensión 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" EOFEn el caso de las políticas de autorización de contenido, el valor de
policyProfiledebe serCONTENT_AUTHZ.En el caso de las políticas de
CONTENT_AUTHZ, no es necesario establecer el valor dewireFormatde forma explícita comoEXT_PROC_GRPC. De forma predeterminada, la llamada usa el protocoloext_proc.Importa la extensión de autorización. Usa el comando
gcloud beta service-extensions authz-extensions importcon 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
Configura una política de autorización con la extensión.
Define una política de autorización que asocie la extensión
my-lb-content-authz-extcon 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" EOFEl valor de
policyProfiledebe serCONTENT_AUTHZ.Importa la política de autorización al proyecto. Usa el comando
gcloud beta network-security authz-policies importcon 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 de las extensiones de autorización
A continuación, se incluyen 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 aplicables a todas las extensiones, consulta Limitaciones de las extensiones.
¿Qué sigue?
- Consulta ejemplos de Python y Go de servidores
ext_authzyext_procen el repositorio de GitHub de Service Extensions. - Configura una extensión de ruta
- Configura una extensión de tráfico
- Administrar extensiones