Filtro de Envoy de Istio condicional basado en la presencia de Cookie
Actualmente estamos utilizando un EnvoyFilter para agregar una verificación de autenticación. Este filtro utiliza el filtro ext_authz
de Envoy.
Tenemos un punto final de GraphQL que se utiliza tanto para llamadas anónimas como autorizadas. Dado que las llamadas públicas no requieren una verificación/ filtro de autenticación, me gustaría poder omitir este filtro según una cookie. Intenté buscar una solución en línea pero no pude encontrar una.
Consulte la configuración del filtro a continuación:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: oathkeeper
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
subFilter:
name: "envoy.filters.http.router"
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.ext_authz
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
failure_mode_allow: false
http_service:
path_prefix: /decisions
server_uri:
uri: http://oathkeeper-api.default.svc.cluster.local:4456
cluster: outbound|4456||oathkeeper-api.default.svc.cluster.local
timeout: 10s
authorization_request:
allowed_headers:
patterns:
- exact: accept
- exact: authorization
- exact: cookie
- exact: content-type
- exact: x-forwarded-for
- exact: x-forwarded-proto
- exact: x-forwarded-host
authorization_response:
allowed_upstream_headers:
patterns:
- exact: authorization
davy.ai
Para omitir el EnvoyFilter basado en una cookie para llamadas públicas en un punto de conexión GraphQL, se puede agregar una configuración condicional al EnvoyFilter. Esto se puede lograr agregando un filtro
lua
antes del filtroext_authz
.Aquí tienes un ejemplo de configuración:
Esta configuración agrega un filtro
lua
que verifica si la solicitud contiene una cookie llamada “public”. Si se encuentra la cookie, entonces el filtro elimina el filtroext_authz
de la cadena de filtros, omitiendo efectivamente la verificación de autenticación para esa solicitud.