Microservices architecture is the most famous pattern in the Software Architecture today, there are many articles on the internet that tries to explain the benefits and drawbacks present in this architecture style.
I’ve got a couple of years working with microservices and, for me, the most problematic part is related to apply security in this scenario. There are many patterns and tools which try to solve it, most part of them is related to the languages and framework.
That way we have a sort of problems because we need to apply security in the “Software” layer and it might cause problems like:
Security is a non-functional requirement and in the most part of the companies, there is a specific area which will define standards and manage security in the whole ecosystem. It means define network firewalls, network privileges and so on.
We need to find a way to create a standard for security in our microservice solution. ISTIO a Service Mesh implementation can help us adding security in the platform (a.k.a kubernetes) in an easy way.
Let’s understand that!!!
The explanation about Istio is out of scope in this blog post. If you need some explanations about you can find it in my previous article.
Istio offers two types of authentication. The first one targets the end-users and the second one aims the service-to-service authentication with certificates, we will understand a little deeper about these two models.
This feature aims to authenticate the end-user, it means a person who is trying to access our system or a simple device or application which is trying to access our solution.
Istio enables request level authentication through the JWT specification, the most used security specification for cloud-native applications. Also, Istio enables simple integration with OpenId-Connect specification, another relevant standard for security.
With a couple of configurations like JWT Issuer, JWKS URI, and some paths to include and exclude we are able to protect our microservices with OAuth authentication flow.It is configured by yaml files which one is very simple and intuitive.
This kind of authentication sometimes is called transport authentication, it will verify the client connection to check the communication. Istio offers mtls as a full-stack solution for transport authentication.
Citadel it the component that will provide the digital certificates based on SPIFFE standards for each sidecar a.k.a envoy proxies present in the Data Plane.
In the next sections, I’ll explain how it works in the configuration time and runtime authentication execution. Let’s do it!!!!
Let’s understand how the Citadel component distributes digital certificates for each pod present in the Data Plane.
The following steps describe these interactions:
As we can see in the steps above, the digital certificates are fully managed by Citadel component in the Istio Infrastructure.
That is very important because it makes de digital certificates easy to management and a centralized point to act in the case is something wrong with certificates.
The service-to-service authorization flow follows the steps below:
As we can see the flow is strongly based in envoy (sidecar) features.
In this post, I tried to explain a little bit about microservices authentication with Istio.
As we can see it makes our security configuration in a centralized point, I mean in a couple of files, but the authentication happens in a distributed way en envoys or data plane.