Hi, I'm Brendan Burns from Microsoft Azure and I'm going to talk about Role Based Access Control in Kubernetes.

Let's see about why you're interested in access control.

Well, obviously, you have multiple people on your teams and they're accessing your Kubernetes cluster.

But each of these people may need to have some amount of security from one another.

At the simplest level, you simply don't want this person interfering with the other person accidentally.

For example, one developer might accidentally delete someone else's work or gain visibility into a project that's being developed that maybe secret.

There's a wide variety of reasons why you want to slice apart your Kubernetes into a place where user one can see and a place for user two can see, and have them not be able to see into each other's work.

When you think about the differences between developers and operators, cluster administrators, it becomes even more clear that there are different capabilities that need to be associated with different types of roles within that Kubernetes cluster, and that's where the notion of RBAC or role-based access control comes into play.

RBAC in Kubernetes is the way that you restrict who can access what within the cluster.

So in order to understand how RBAC works in Kubernetes, it's important to understand how role-based access control works in general.

The role in role-based access control defines a notion of a verb something like get or a list, and a set of nouns, something like pods, volumes, etc.

So a role defines what you can do to a set of resources.

This is a resource within Kubernetes just like everything else.

So this is a restful resource and there's a number of them that are predefined, and you can also create them yourself using a YAML file.

So you can represent any arbitrary set of privileges onto the resources within the Kubernetes cluster.

But by itself, the role doesn't actually grant any permissions, because we haven't associated this role with anyone who might make API calls, and so that's where a binding comes into play.

So you can create a role binding which is basically a mapping between a person, let's say me, and a particular role, let's say cluster admin.

So the role binding takes these two pieces together and therefore, I have the privileges defined in this role.

Now, I can have multiple roles.

I might get edit as well or any number or custom role that's been designed.

I can have access to any number of roles, and you can also use groups.

Oftentimes, actually, this is a much better way to manage things if you define a group.

For example, the dev team, you can associate that dev team with a particular role.

In that way, anyone who joins that team or is removed from that team either gains access or loses access to those particular privileges.

Now within Kubernetes, there's actually two different kinds of resources.

There are namespace resources and there are non, there are cluster resources.

An example of a cluster resource would be something like a custom resource definition that is defined for the entire cluster.

An example of a namespace resource might be something like a service or a pod, they exist within a namespace.

These namespaces also become the scopes for resource control.

So you can actually say not only does somebody have access to pods, but maybe they only have access to pods under the namespace "my-team", so you can limit, and then "your-team".

I might have access to pods in my team but I won't have access to pods in your team.

The way that you do this is by creating a role binding within this namespace.

So there's two different types of role bindings that you can create.

One is the cluster role binding, and obviously, by its name, a cluster role binding provides you with permissions for the entire cluster.

It can provide you with permissions for cluster resources and it can also provide you with permissions for resources within any namespace within a cluster.

Obviously, cluster role bindings are very powerful, and you want to be careful with how you apply them because they apply not only to any existing namespaces but to any future namespaces that you might create as well.

There are also role bindings and they provide privileges within the context of a particular namespace.

So obviously, a cluster role binding is a cluster level object, a role binding is a namespace object.

So if for example, I have my "my-team" namespace, if I create a role binding here, that is a binding say to the edit role.

This provides me with the ability, if it is a role binding between edit and me, this provides me with access to editing within the context of this namespace, but not any other namespace.

So the fact that the role binding exists within the context of this namespace, defines the scope for that role binding.

If I instead gave myself a cluster role binding at the top level, it would provide me with access to binding, it would provide me with access to the entire cluster.

I definitely encourage people to check out all of the different roles that are predefined inside of Kubernetes.

There's a lot of them that can give you an idea and you can even use to build up your own access control, and take a deep look into how you want to manage the different roles inside of your cluster so that you can provide a secure cluster where two developers or two operators can't step on each other's toes, see each others secrets, or otherwise, interfere with one another.


안녕하세요, 저는 Microsoft Azure의 Brendan Burns입니다. Kubernetes의 역할 기반 액세스 제어에 대해 이야기하겠습니다.

액세스 제어에 관심이있는 이유를 살펴 보겠습니다.

분명히 팀에 여러 사람이 있고 그들은 Kubernetes 클러스터에 액세스하고 있습니다.

그러나 이들 각각은 서로로부터 어느 정도의 보안을 가져야 할 수도 있습니다.

가장 단순한 수준에서,이 사람이 우연히 다른 사람을 방해하는 것을 원하지 않습니다.

예를 들어, 한 개발자가 실수로 다른 사람의 작업을 삭제하거나 개발중인 프로젝트에 대한 가시성을 확보 할 수 있습니다.

Kubernetes를 사용자 1이 볼 수있는 장소와 사용자 2가 볼 수있는 장소로 분리하여 서로의 작업을 볼 수 없도록하는 데에는 다양한 이유가 있습니다.

개발자와 운영자, 클러스터 관리자 간의 차이점을 생각할 때 해당 Kubernetes 클러스터 내에서 다양한 유형의 역할과 연결되어야하는 다양한 기능이 있다는 것이 더욱 분명해집니다. 바로 여기에서 RBAC 또는 역할 기반의 개념입니다. 액세스 제어가 작동합니다.

Kubernetes의 RBAC는 클러스터 내에서 액세스 할 수있는 사용자를 제한하는 방법입니다.

따라서 Kubernetes에서 RBAC가 작동하는 방식을 이해하려면 역할 기반 액세스 제어가 일반적으로 작동하는 방식을 이해하는 것이 중요합니다.

역할 기반 액세스 제어의 역할은 get 또는 list와 같은 동사의 개념과 포드, 볼륨 등과 같은 명사 집합을 정의합니다.

따라서 역할은 리소스 집합에 대해 수행 할 수있는 작업을 정의합니다.

이것은 다른 모든 것과 마찬가지로 Kubernetes 내의 리소스입니다.

따라서 이것은 편안한 리소스이며 미리 정의 된 여러 리소스가 있으며 YAML 파일을 사용하여 직접 만들 수도 있습니다.

따라서 Kubernetes 클러스터 내의 리소스에 대한 임의의 권한 집합을 나타낼 수 있습니다.

그러나 그 자체로는이 역할을 API 호출을 할 수있는 사람과 연결하지 않았기 때문에 실제로 권한을 부여하지 않습니다. 그래서 바인딩이 작동합니다.

따라서 기본적으로 사람 (예 : 나)과 특정 역할 (예 : 클러스터 관리자) 간의 매핑 인 역할 바인딩을 만들 수 있습니다.

따라서 역할 바인딩은이 두 부분을 함께 사용하므로이 역할에 정의 된 권한이 있습니다.

이제 여러 역할을 할 수 있습니다.

편집이나 디자인 된 사용자 지정 역할도받을 수 있습니다.

여러 역할에 액세스 할 수 있으며 그룹을 사용할 수도 있습니다.

종종 실제로 이것은 그룹을 정의하는 경우 사물을 관리하는 훨씬 더 나은 방법입니다.

예를 들어 개발 팀은 특정 역할에 해당 개발 팀을 연결할 수 있습니다.

이러한 방식으로 해당 팀에 가입하거나 해당 팀에서 제거 된 사람은 해당 특정 권한에 대한 액세스 권한을 얻거나 액세스 권한을 잃게됩니다.

이제 Kubernetes에는 실제로 두 가지 유형의 리소스가 있습니다.

네임 스페이스 리소스가 있고 비가 있고 클러스터 리소스가 있습니다.

클러스터 리소스의 예는 전체 클러스터에 대해 정의 된 사용자 지정 리소스 정의와 같은 것입니다.

네임 스페이스 리소스의 예는 서비스 또는 포드와 같은 것일 수 있으며 네임 스페이스 내에 있습니다.

이러한 네임 스페이스는 리소스 제어의 범위가됩니다.

따라서 실제로 누군가가 포드에 액세스 할 수있을뿐만 아니라 "my-team"네임 스페이스 아래에있는 포드에만 액세스 할 수 있으므로 제한 한 다음 "your-team"이라고 말할 수 있습니다.

내 팀의 팟 (Pod)에 액세스 할 수 있지만 귀하의 팀의 팟 (Pod)에 액세스 할 수 없습니다.

이를 수행하는 방법은이 네임 스페이스 내에 역할 바인딩을 작성하는 것입니다.

따라서 만들 수있는 두 가지 유형의 역할 바인딩이 있습니다.

하나는 클러스터 역할 바인딩이며, 이름에 따라 클러스터 역할 바인딩은 전체 클러스터에 대한 권한을 제공합니다.

클러스터 리소스에 대한 권한을 제공 할 수 있으며 클러스터 내 모든 네임 스페이스 내의 리소스에 대한 권한도 제공 할 수 있습니다.

분명히 클러스터 역할 바인딩은 매우 강력하며 기존 네임 스페이스뿐만 아니라 앞으로 만들 수있는 모든 네임 스페이스에도 적용되기 때문에 적용 방법에주의해야합니다.

역할 바인딩도 있으며 특정 네임 스페이스의 컨텍스트 내에서 권한을 제공합니다.

따라서 클러스터 역할 바인딩은 클러스터 수준 개체이고 역할 바인딩은 네임 스페이스 개체입니다.

예를 들어 내 "my-team"네임 스페이스가있는 경우 여기에서 역할 바인딩을 생성하면 편집 역할에 대한 바인딩 말입니다.

이렇게하면 편집과 나 사이의 역할 바인딩 인 경우이 네임 스페이스의 컨텍스트 내에서 편집 할 수 있지만 다른 네임 스페이스에서는 액세스 할 수 없습니다.

따라서 역할 바인딩이이 네임 스페이스의 컨텍스트 내에 존재한다는 사실은 해당 역할 바인딩의 범위를 정의합니다.

대신 최상위 수준에서 클러스터 역할 바인딩을 부여하면 바인딩에 대한 액세스 권한이 제공되고 전체 클러스터에 대한 액세스 권한이 제공됩니다.

사람들이 Kubernetes 내부에 사전 정의 된 다양한 역할을 모두 확인하도록 권장합니다.

아이디어를 제공 할 수 있고 자체 액세스 제어를 구축하는 데 사용할 수도 있으며, 보안 클러스터를 제공 할 수 있도록 클러스터 내부의 다양한 역할을 관리하는 방법을 자세히 살펴볼 수 있습니다. 두 명의 개발자 또는 두 명의 운영자가 서로의 발끝을 밟거나 서로의 비밀을 보거나 다른 방식으로 서로 간섭 할 수 없습니다.

  • No labels
Write a comment…