Atributos admitidos

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 forwardAttributes de 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.