Cuando configuras extensiones con complementos o textos destacados para servicios de backend basados en ext-proc, puedes especificar los atributos de conexión y solicitud para reenviarlos a esos servicios. En esta página, se describen los atributos admitidos y se especifican cuáles están disponibles para cada tipo de extensión.
Si configuras extensiones para que reenvíen atributos específicos, puedes lograr lo siguiente:
- Tomar decisiones de enrutamiento dinámicas
- Enriquecer los encabezados de solicitud con información del cliente
- Implementa políticas de seguridad personalizadas basadas en la ubicación del cliente o los parámetros de TLS.
- Generar registros personalizados detallados
Puedes especificar atributos con el campo forwardAttributes en la configuración de YAML para las extensiones de complementos y llamadas. Por ejemplo, para las extensiones de ubicación, consulta Cómo configurar una extensión de ubicación.
Se admite la especificación de atributos con forwardAttributes para las extensiones de autorización, borde, ruta y tráfico. Puedes implementar forwardAttributes con complementos de Wasm o llamadas externas (con el protocolo ext_proc) en los siguientes productos:
- Balanceadores de cargas de aplicaciones regionales externos
- Balanceadores de cargas de aplicaciones internos regionales
- Balanceadores de cargas de aplicaciones externos globales
- Balanceadores de cargas de aplicaciones internos entre regiones
En la siguiente tabla, se enumeran los atributos y las extensiones admitidos:
| Atributo | Descripción | Extensiones |
|---|---|---|
request.origin |
Es el valor del encabezado de origen en una solicitud para casos de uso de uso compartido de recursos entre dominios (CORS). | tráfico |
request.method |
Es el método de solicitud HTTP, como GET o POST. |
autorización, borde, ruta, tráfico |
request.mcp_method |
Es el método de solicitud HTTP, como GET o POST. |
autorización |
request.host |
Es un equivalente de conveniencia a request.headers['host']. |
autorización, borde, ruta, tráfico |
request.path |
La ruta de URL HTTP solicitada. | autorización, borde, ruta, tráfico |
request.query |
Es la consulta de URL HTTP, en el formato name1=value&name2=value2, como aparece en la primera línea de la solicitud HTTP. No se realiza ninguna decodificación. |
autorización, borde, ruta, tráfico |
request.scheme |
Es el esquema de URL HTTP, como HTTP o HTTPS. Los valores de este atributo están en minúsculas. |
autorización, borde, ruta, tráfico |
request.backend_service_name |
Es el servicio de backend al que se reenvía la solicitud. | autorización, tráfico |
request.backend_service_project_number |
Cuando se usa la VPC compartida, el número de proyecto del servicio de backend al que se reenvía la solicitud. | autorización, tráfico |
request.mcp_param |
Es el parámetro de MCP. | autorización |
request.user_agent_family |
Es el tipo de navegador del cliente, derivado de los valores del encabezado User-Agent. Estos valores hacen referencia a la cadena de texto sin procesar que los clientes HTTP entrantes (como navegadores web, apps para dispositivos móviles o herramientas automatizadas) envían en el encabezado de la solicitud User-Agent HTTP estándar. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales y balanceadores de cargas de aplicaciones externos regionales) |
request.device_request_type |
Es el tipo de dispositivo del cliente. Los valores posibles para este atributo son APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NETFRONT, NOKIA, OBIGO, OPERA, OPENWAVE, OTHER, POLARIS, SEMC, SMIT, TELECA o USER_DEFINED. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales y balanceadores de cargas de aplicaciones externos regionales) |
response.cdn_cache_id |
El código de ubicación y el ID de la instancia de caché que se usan para entregar la solicitud. Este es el mismo valor que se propaga en el campo jsonPayload.cacheId de los registros de solicitudes de Cloud CDN.
|
Tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
response.cdn_cache_status |
Es el estado actual de la instancia de caché que se usa para entregar la solicitud. Los valores posibles para este
atributo pueden ser hit, miss,
revalidated, stale,
uncacheable o disabled. |
Tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
source.ip |
La dirección IP del cliente. | borde, ruta, tráfico |
source.port |
El puerto de origen del cliente. | borde, ruta, tráfico |
source.client_region |
Es el país o la región asociados a la dirección IP del cliente.
El valor es un código regional CLDR de Unicode, como US o FR. Para la mayoría de los países, estos códigos corresponden directamente a los códigos ISO-3166-2. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales y balanceadores de cargas de aplicaciones externos regionales) |
source.client_region_subdivision |
Subdivisión (por ejemplo, una provincia o un estado) del país asociado a la dirección IP del cliente. Este es un ID de subdivisión CLDR de Unicode, como USCA o CAON. Estos códigos Unicode se derivan de las subdivisiones definidas por el estándar ISO-3166-2. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
source.client_city |
Nombre de la ciudad desde la que se originó la solicitud. Por ejemplo, Mountain View para Mountain View, California.
No hay una lista canónica de valores válidos para esta variable.
Los nombres de las ciudades pueden contener letras, números, espacios y los siguientes caracteres de US-ASCII: !#$%&'*+-.^_`|~. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
source.client_city_lat_long |
La latitud y longitud de la ciudad desde la que se originó la solicitud, por ejemplo, 37.386051,-122.083851 para una solicitud de Mountain View. |
borde, tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
connection.client_encrypted |
El valor es true si la conexión entre el cliente y el balanceador de cargas está encriptada (con HTTPS, HTTP/2 o HTTP/3); de lo contrario, es false. |
tráfico |
connection.client_rtt_msec |
Es el tiempo estimado de transmisión de ida y vuelta entre el balanceador de cargas y el cliente HTTP(S), en milisegundos. Este es el parámetro de tiempo de ida y vuelta suavizado (SRTT) (según se define en RFC 2988) que mide la pila TCP del balanceador de cargas. | Tráfico (solo para balanceadores de cargas de aplicaciones externos globales) |
connection.client_protocol |
El protocolo HTTP que se usa para la comunicación entre el cliente y el balanceador de cargas. Puede ser uno de los siguientes: HTTP/1.0,
HTTP/1.1, HTTP/2,
o HTTP/3. |
tráfico |
connection.server_ip_address |
La dirección IP del balanceador de cargas al que se conecta el cliente.
Este valor puede ser útil cuando varios balanceadores de cargas comparten backends comunes. Es igual a la última dirección IP en el encabezado X-Forwarded-For. |
tráfico |
connection.server_port |
El número de puerto de destino al que se conecta el cliente. | tráfico |
connection.sni |
Indicación del nombre del servidor (como se define en RFC 6066), si el cliente la proporciona durante el protocolo de enlace de TLS o QUIC. El nombre de host se convierte en minúsculas y se quita cualquier punto final. | autorización, perimetral, tráfico |
connection.tls_version |
Versión de TLS negociada entre el cliente y el balanceador de cargas durante el protocolo de enlace SSL. Los valores posibles son TLSv1, TLSv1.1, TLSv1.2 y TLSv1.3. Si el cliente se conecta con QUIC en lugar de TLS, el valor es QUIC. |
borde, tráfico |
connection.sha256_peer_certificate_digest |
Es el hash SHA256 con codificación hexadecimal del certificado de intercambio de tráfico en la conexión TLS downstream, si está presente. | autorización, perimetral, tráfico |
connection.tls_cipher_suite |
El conjunto de algoritmos de cifrado negociado durante el protocolo de enlace TLS. El valor son cuatro dígitos hexadecimales definidos por el registro del conjunto de algoritmos de cifrado TLS de IANA, por ejemplo, 009C para TLS_RSA_WITH_AES_128_GCM_SHA256. Este valor está vacío para QUIC y las conexiones de cliente no encriptadas. |
tráfico |
connection.tls_ja3_fingerprint |
La huella digital de JA3 TLS/SSL si el cliente se conecta con HTTPS, HTTP/2 o HTTP/3. |
tráfico |
connection.tls_ja4_fingerprint |
La huella digital de JA4 TLS/SSL si el cliente se conecta con HTTPS, HTTP/2 o HTTP/3. |
borde, tráfico |
connection.client_cert_present |
El valor es true si el cliente proporcionó un
certificado durante el protocolo de enlace TLS; de lo contrario, es false. |
autorización, tráfico |
connection.client_cert_chain_verified |
El valor es true si la cadena de certificados de cliente se verifica con un TrustStore configurado. De lo contrario, es false. |
autorización, tráfico |
connection.client_cert_error |
Son cadenas predefinidas que representan las condiciones de error. Para obtener más información sobre las cadenas de error, consulta los modos de validación del cliente de mTLS. | autorización, tráfico |
connection.client_cert_serial_number |
El número de serie del certificado de cliente. Si el número de serie tiene más de 50 bytes, client_cert_error se establece en client_cert_serial_number_exceeded_size_limit y el número de serie se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_spiffe_id |
Es el ID de SPIFFE del campo Nombre alternativo del sujeto (SAN). Si el valor no es válido o supera los 2,048 bytes, el ID de SPIFFE se establece en una cadena vacía. Si el ID de SPIFFE supera los 2,048 bytes, client_cert_error se establece en client_cert_spiffe_id_exceeded_size_limit. |
autorización, tráfico |
connection.client_cert_uri_sans |
Lista separada por comas y codificada en Base64 de las extensiones de SAN de tipo URI. Las extensiones SAN se extraen del
certificado de cliente. El ID de SPIFFE no está incluido en el campo client_cert_uri_sans. Si client_cert_uri_sans tiene más de 512 bytes, client_cert_error se establece en client_cert_uri_sans_exceeded_size_limit y la lista separada por comas se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_dnsname_sans |
Lista separada por comas y codificada en Base64 de las extensiones de SAN de tipo DNSName. Las extensiones SAN se extraen del certificado de cliente. Si client_cert_dnsname_sans tiene más de 512 bytes, client_cert_error se establece en client_cert_dnsname_sans_exceeded_size_limit y la lista separada por comas se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_valid_not_before |
Marca de tiempo (string con formato de fecha RFC 3339) antes de la cual el certificado de cliente no es válido, por ejemplo, 2022-07-01T18:05:09+00:00.
|
autorización, tráfico |
connection.client_cert_valid_not_after |
Marca de tiempo (en formato de cadena de fecha RFC 3339) después de la cual el certificado de cliente no es válido, por ejemplo, 2022-07-01T18:05:09+00:00.
|
autorización, tráfico |
connection.client_cert_issuer_dn |
Es la codificación DER codificada en Base64 del campo Issuer completo del certificado. Si client_cert_issuer_dn tiene más de 512 bytes, la cadena client_cert_issuer_dn_exceeded_size_limit se agrega a client_cert_error y client_cert_issuer_dn se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_subject_dn |
Es la codificación DER codificada en Base64 del campo Subject completo del certificado. Si client_cert_subject_dn tiene más de 512 bytes, la cadena client_cert_subject_dn_exceeded_size_limit se agrega a client_cert_error y client_cert_subject_dn se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_leaf |
El certificado de hoja del cliente para una conexión mTLS establecida
en la que el certificado pasó la validación. La codificación del certificado cumple con RFC 9440. Esto significa que el certificado binario DER está codificado en Base64 y delimitado con dos puntos en ambos lados. Si client_cert_leaf supera los 16 KB sin codificar, la cadena client_cert_validated_leaf_exceeded_size_limit se agrega a client_cert_error y client_cert_leaf se establece en una cadena vacía. |
autorización, tráfico |
connection.client_cert_chain |
La lista delimitada por comas de certificados, en orden TLS estándar, de la cadena de certificados de cliente para una conexión mTLS establecida en la que el certificado de cliente pasó la validación, sin incluir el certificado de hoja. La codificación del certificado cumple con RFC 9440. Si el tamaño combinado de client_cert_leaf y client_cert_chain antes de la codificación en Base64 supera los 16 KB, la cadena client_cert_validated_chain_exceeded_size_limit se agrega a client_cert_error y client_cert_chain se establece en una cadena vacía. |
autorización, tráfico |
Limitaciones
Disponibilidad de atributos: No todos los atributos son compatibles con todos los tipos de extensiones. Para obtener más información, consulta la tabla de esta página.
Configuración obligatoria: Para enviar atributos a la extensión, debes enumerar explícitamente los atributos en el campo
forwardAttributesde la configuración de la extensión. Si no incluyes un atributo en este campo, el balanceador de cargas no reenvía ese atributo específico a tu extensión.Límites de tamaño: Puedes configurar un máximo de 16 atributos para una sola extensión.
Atributos de mTLS: Los atributos del certificado de cliente (
connection.client_cert_*) se propagan en los datos que se pasan a tu extensión solo si habilitaste mTLS y el cliente presenta un certificado.