Openshift Service Mesh 2.0 provides an easy way to connect microservices in a secure and consistent manner, and to build distributed, modulable and scalable applications on top of it.
Connecting microservices and securing these connections is rather simple thanks to custom ressources such as VirtualService and DestinationRule. But what about securing the access to the resulting applications? In an enterprise context, it might be desirable to have some high-level filtering - complementary to network-based filtering - regarding which users or teams can access which applications.
Istio - the control plane of Openshift Service Mesh 2.0 - provides natively some mechanisms for such filtering, based on a JSON Web Token (JWT) that a user would embed in a cookie when requesting an application. However, the retrieval and the embedding of the JWT is left to the user, and no native mechanism exists yet to provide a full automated workflow.
In this blog post, we go through these native authentication/authorization mechanisms, and explore a way to implement a full automated workflow based on OIDC. Red Hat Single Sign-On (RHSSO) is used as the authentication/authorization entity. All the code and more detailed READMEs for each approach are available in this repository.
This tutorial assumes that a running OCP 4.6 cluster and cluster-admin user are available.
Requirements
- have an OCP 4.6 running cluster
- have a user with cluster-admin role
- have Service Mesh 2.0 installed
- have a RHSSO platform inside the cluster deployed using the RHSSO operator
- have bookinfo service mesh application example deployed
Approach 1: Using Istio native mechanisms for JWT-based authorization
In this approach, access to the bookinfo
application is restricted using Istio-related CRD RequestAuthentication and AuthorizationPolicy deployed in the cluster. A user can access the application by providing a JWT token in its HTTP request (through the HTTP Header Authorization
).
The workflow is as follows:
- the user authenticates to RHSSO and get a JWT token (not shown in the above picture);
- the user performs an HTTP request to
https://<route>/productpage
and passes along this request the JWT token; - the Istio ingress gateway (default one) forwards the request and the JWT token to the istio-proxy container of the productpage pod;
- the istio-proxy container of the productpage pod checks the validity of the JWT token depending on the
RequestAuthentication
andAuthorizationPolicy
objects deployed beforehand; - if the JWT token is valid, user accesses
/productpage
- otherwise, an error message is returned to the user (code 404, message "RBAC denied" or others).
Pros:
- the simplest approach (only 2 CR to be deployed)
- fine-grained authorization based on JWT token fields
Cons:
- no OIDC workflow: the user must get a JWT token on its own, and pass it with the HTTP request on its own
- need to define
RequestAuthentication
andAuthorizationPolicy
objects for each application to protect inside the service mesh
Approach 2: Injecting oauth2-proxy container inside the Istio ingress gateway to implement an OIDC workflow
In this approach, access to the bookinfo
application is restricted by injecting an oauth2-proxy sidecar container to the Istio ingress gateway. The oauth2-proxy will enforce user authentication with RHSSO before forwarding any request to the istio-proxy (the default container of the Istio ingress gateway). In this approach, the OIDC workflow between the user, oauth2-proxy and RHSSO is perfomed automatically.
The workflow is as follows:
- the user performs an unauthenticated HTTP request to
https://<route>/productpage
; - the oauth2-proxy inside the Istio ingress gateway pod initiates the OIDC workflow to authenticate the user; user authenticates to RHSSO (not shown on the picture);
- the user performs an authenticated HTTP request to
https://<route>/productpage
; the authentication is checked by the oauth2-proxy using HTTP cookies; - the oauth2-proxy forwards locally (same pod) the request to the istio-proxy container of the Istio ingress gateway, which in turn forwards the request to the istio-proxy container of the productpage pod;
- user accesses
/productpage
.
Pros:
- authentication enforced at the ingress gateway level (no need to define
RequestAuthentication
andAuthorizationPolicy
objects for each application) - automated OIDC workflow to authenticate the user
Cons:
- coarse-grained authorization (authenticated == authorized)
- complex setup (involve patches)
Approach 3: Combining JWT-based authorization and OIDC workflow
This approach combines the use of RequestAuthentication
and AuthorizationPolicy
objects as done for approach 1, and the injection of the oauth2-proxy container as done in the approach 2. In this approach, the oauth2-proxy container extracts the JWT token from the authentication cookie, and forwards it to the istio-proxy container alongside the HTTP request (using the X-Forwarded-Access-Token
HTTP header). As a result, an automated OIDC workflow to authenticate the user is performed, and can be, if needed, combined to a fine-grained authorization based on JWT token fields (e.g. simple auth for 'non-secure' apps, auth + JWT field for more secure apps).
The workflow is as follows:
- the user performs an unauthenticated HTTP request to
https://<route>/productpage
; - the oauth2-proxy inside the Istio ingress gateway pod initiates the OIDC workflow to authenticate the user; user authenticates to RHSSO (not shown on the picture);
- the user performs an authenticated HTTP request to
https://<route>/productpage
; the authentication is checked by the oauth2-proxy using HTTP cookies; - the oauth2-proxy extracts the JWT token from the authentication cookie and forwards it locally (same pod) alongside the HTTP request to the istio-proxy container of the Istio ingress gateway;
- the istio-proxy container of the Istio ingress gateway forwards the request and the JWT token to the istio-proxy container of the productpage pod;
- the istio-proxy container of the productpage pod checks the validity of the JWT token depending on the
RequestAuthentication
andAuthorizationPolicy
objects deployed beforehand; - if the JWT token is valid, user accesses
/productpage
- otherwise, an error message is returned to the user (code 404, message "RBAC denied" or others).
Pros:
- authentication enforced at the ingress gateway level
- automated OIDC workflow to authenticate the user
- if needed, fine-grained authorization based on JWT token fields
Cons:
- complex setup (currently involves deployment / service / route patches)
References
Sobre el autor
Navegar por canal
Automatización
Las últimas novedades en la automatización de la TI para los equipos, la tecnología y los entornos
Inteligencia artificial
Descubra las actualizaciones en las plataformas que permiten a los clientes ejecutar cargas de trabajo de inteligecia artificial en cualquier lugar
Nube híbrida abierta
Vea como construimos un futuro flexible con la nube híbrida
Seguridad
Vea las últimas novedades sobre cómo reducimos los riesgos en entornos y tecnologías
Edge computing
Conozca las actualizaciones en las plataformas que simplifican las operaciones en el edge
Infraestructura
Vea las últimas novedades sobre la plataforma Linux empresarial líder en el mundo
Aplicaciones
Conozca nuestras soluciones para abordar los desafíos más complejos de las aplicaciones
Programas originales
Vea historias divertidas de creadores y líderes en tecnología empresarial
Productos
- Red Hat Enterprise Linux
- Red Hat OpenShift
- Red Hat Ansible Automation Platform
- Servicios de nube
- Ver todos los productos
Herramientas
- Training y Certificación
- Mi cuenta
- Soporte al cliente
- Recursos para desarrolladores
- Busque un partner
- Red Hat Ecosystem Catalog
- Calculador de valor Red Hat
- Documentación
Realice pruebas, compras y ventas
Comunicarse
- Comuníquese con la oficina de ventas
- Comuníquese con el servicio al cliente
- Comuníquese con Red Hat Training
- Redes sociales
Acerca de Red Hat
Somos el proveedor líder a nivel mundial de soluciones empresariales de código abierto, incluyendo Linux, cloud, contenedores y Kubernetes. Ofrecemos soluciones reforzadas, las cuales permiten que las empresas trabajen en distintas plataformas y entornos con facilidad, desde el centro de datos principal hasta el extremo de la red.
Seleccionar idioma
Red Hat legal and privacy links
- Acerca de Red Hat
- Oportunidades de empleo
- Eventos
- Sedes
- Póngase en contacto con Red Hat
- Blog de Red Hat
- Diversidad, igualdad e inclusión
- Cool Stuff Store
- Red Hat Summit