Transcript
This transcript was autogenerated. To make changes, submit a PR.
Hi, my name is Steve Judd, I'm chief architect at Jetstack.
We're part of Venafi, who are a cybersecurity company,
and we in jetstack provide
customers with cloud native Kubernetes professional
services, and quite frequently that
involves security, implementing security best
practices. And often as a result of this, I find myself
having conversations with security teams about the
best approaches they can take in order to implement
security best practices such as zero trust within Kubernetes
environments. And what this talk is all about
is really zero trust. What it is,
the principles behind it, the challenges and
what kind of tools are available to be able to
deploy these into Kubernetes, clusters and environments.
So first of all, I want to go through a
definition from Forrester about what zero trust really is.
So it starts with an information security model
that denies access to applications and data by default.
So essentially default deny any request.
So it continues with threat prevention is achieved
by granting access only to networks and workloads utilizing
policies. So essentially there will be some policies that
define exactly who and what can access or
a particular resource or execute a particular API.
And exactly how to determine
whether the request meets the sort of policy requirements
is informed by this contextual
risk based verification across users
or their devices. So essentially any request that
comes in, whether it comes from a user, whether it comes from a device,
whether it comes from a service, you need to identify
who that service or that user is,
what permissions they've got, in effect,
whether they're allowed to actually access that
resource or execute that API.
To sum up then in a bit more of a concise
manner, never trust, always verify every
single time. So that's kind
of a brief, this is what zero trust is all about.
But let's talk a bit more about, well, what are the key principles
that underpin zero trust. So first off
we've got the principle of least privilege, and essentially that's
saying you should only give the requester
the access they need to execute the
request that they're trying to make. So as an example,
don't give everyone cluster admin access to your Kubernetes
clusters, because for sure they don't
need it. Secondly,
for each request that's made, you need to establish the
identity of the requester and establish what
permissions they have against that particular resource or
API that they're trying to execute. And this has to be
done on a per request basis.
So as you can tell, identity is quite a
key component of zero trust.
So this isn't talking about just users identity it's
also talking about identities for machines,
machines being servers,
virtual machines, IoT devices and so on.
And typically we do this with X 509 certificates.
And then finally, it's not enough to
establish the identity of the requester and figure out whether
they've got the right permissions. You also need to
start looking at the context within which they're making this request.
So, for example, what location is
this request coming from? And is it usual
for that identity? So in the case of
a user that's based in the United Kingdom, would you
expect them to be making a request from, say, Russia?
So that's what I mean by a context based decision
as well. So essentially,
all of these principles are designed
so that if a malicious actor does
manage to gain access to one of your servers, for example,
then it will prevent them from being able to explore
other parts of your network, other servers or other devices and
so on. So that's what I mean by what we mean by lateral
movement within the network.
Okay, so we've talked about what zero trust
is, and we've talked about the principles that underpin
it. Well, inevitably there are
challenges with introducing a zero trust approach
into any environment. So what I'm going to do is spend a
few minutes talking about exactly what those challenges are within
a kind of cloud native Kubernetes world.
So first of all,
machines are in a network, and by this I mean servers,
devices, services,
workloads, pods, jobs, they're increasing
at an exponentially rapid rate.
And given that all of these need a unique
identity based on an X 509 certificate,
then it's really not practical to do this manually
because we're looking at issuing certificates, renewing them,
revoking them and so on. So really
you need some kind of tool to help you with this. As an example,
venify, provide a tool called TPP,
specifically designed for managing expo VI,
nine certificates. Secondly,
access control. So how do you
define this? At what level? How do you update it?
How do you enforce it?
Thirdly, we've got this idea of shift left security,
which is where you move towards the development team,
more responsibility for implementing
security practices. And genuinely,
it's a good idea, but development teams and other
teams have got competing priorities. So kind of
how do you get some traction with this? How do
you actually achieve this? And then finally
you've got the whole governance and oversight aspect.
So who's responsible for defining these policies,
making sure that they're implemented and enforced?
So now that we've kind of talked around zero
trust, its benefits, and also the challenges
that you're going to face when trying to implement it.
How do we actually go about solving these in
a containerized world? And really what I'm talking about is
within your Kubernetes environments. So first
of all, Kubernetes comes up with or has
a bunch of native features that will help with this zero
trust approach. First of all, it has role
based access control, which can be incredibly
granular and really allow you to very tightly
specify exactly what a workload can do within a
cluster. Secondly, if you've got the right CNI
driver, then you can take advantage of network policies and
these will allow you to define what
pod can talk to, what other pods on what ports.
So as I said, something that many
CNI drivers implement, but not all of them.
And then finally you have pod security.
So that allows you to define
within your pod, manifest the constraints
within which the containers in that pod have to run.
And then as part of that you have a pod
security admission controller which is in charge of enforcing
those policies. So basically if your pod manifest
doesn't contain the right constraints, then this admission controller
will prevent that pod from even being deployed into your Kubernetes
cluster. So as well as the
native features within Kubernetes itself,
there are a whole bunch of add ons which also
provide a whole bunch of additional security related features.
So I'm going to go through three of the most important here.
So first of all, you've got Cert manager, which probably
many of you are aware is basically the de facto tool
for managing x 509 certificates within a Kubernetes cluster.
Then you have a variety of service mesh tools
out there such as Linkerd and istio. They provide
out of the box services like mutual tls
between workloads in your cluster. And they provide
things like traffic policies so
you can enhance, if you like, your network policies
to determine exactly where traffic can go and under
what circumstances. And then finally we've got
these policy based admission controllers like Kiverno and
Gatekeeper, and they allow you to specify very
sophisticated security policies that
all your deployments, your pods, your workloads have to adhere to.
Otherwise these admission controllers will deny access
to these pods being deployed.
So that's great. We've now covered a
whole bunch of features and tools within Kubernetes that will help
with zero trust. But exactly where
then does this shift left security
fit into this? Well,
here's the thing. Security teams deeply understand
what security policies need to be introduced,
what they look like, but they
aren't necessarily the right people for actually
implementing those policies because they
probably don't have the right expertise in terms of Kubernetes
knowledge. And there are probably
better teams, let's say, who will be better placed
to do this implementation work. And I'm
kind of specifically thinking about the platform engineers
and the reason for this is that, well they already
have the Kubernetes expertise and they have
the know how in kind of automating everything
that goes on in your Kubernetes world.
And then finally they already are
deeply familiar with the tools that are being run in their Kubernetes
clusters and the tools that they probably want to
run like Istio or Linkerd or cert manager.
So really what I'm trying to say here is
that although the onus is on the security teams to kind of take
the lead and define the policies,
it's really the platform engineers
folk that are going to be the ones responsible
for implementing and probably enforcing these policies.
So what I'm trying to say here is the
platform teams and the security teams
absolutely need to collaborate on ensuring
that zero trust approaches can be
adopted within Kubernetes clusters.
So that really is the end of my talk,
so I hope you found it informative and enjoy the rest
of the conference.