[Kubernetes](Security)What is RBAC ? ( Role based access control )

업데이트:

Purpose

When lots of users use a cluster, we can seperate access rights with namespace or API.

클러스터 하나를 여러 명이 사용할 때는 API나 네임스페이스별로 권한을 구분해서 권한이 있는곳에만 접근하도록 만들 수 있다.


Kubernetes API Access Control type

ABAC(Attribute-based access control)

access control paradigm whereby access rights are granted to users through the use of policies which combine attributes together.

RBAC(Role-based access control)

method of regulating access to computer or network resources based on the roles of individual users within your organization.


RBAC architecture in kubernetes


Role - Role / ClusterRole

특정 API나 자원 사용 권한들을 명시해둔 규칙의 집합.

일반 롤, 클러스터 롤 두가지가 존재.

Role - 일반 롤

해당 롤이 속한 네임스페이스에만 적용. 추가로 네임스페이스에 한정되지 않은 자원과 API들의 사용 권한을 설정할 수 있다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default #1 이 롤이 속한 기본 네임스페이스
  name: read-role # 롤의 이름
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

metadata.namespace 항목을 이용하여 특정 네임스페이스에 권한 적용

ClusterRole - 클러스터롤

특정 네임스페이스 사용 권한이 아닌 클러스터 전체 사용 권한을 관리한다.

kind: ClusterRole #1
apiVersion: rbac.authorization.k8s.io/v1 #2
metadata:
  name: read-clusterrole
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

일반 롤과 달리 namespace 항목이 없다. 클러스터 전체에 적용


RoleBinding - RoleBinding / ClusterRoleBinding

롤과 사용자를 묶는 역할.

권한 → 롤과 클러스터롤로 구분

바인딩 → 롤바인딩과 클러스터롤바인딩으로 구분

RoleBinding - 롤바인딩

특정 네임스페이스 하나에 적용

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-rolebinding
  namespace: default
subjects: #1
- kind: ServiceAccount
  name: myuser
  apiGroup: ""
roleRef: #2
  kind: Role
  name: read-role
  apiGroup: rbac.authorization.k8s.io

#1 metadata.subjects

어떤 유형의 사용자 계정과 연결하는지 설정.

apiGroup: “” → 핵심 API 그룹으로 설정했다는 뜻.

#2 metadata.roleRef

사용자에게 어떤 롤을 할당할지를 설정.

roleRef.kind → Role or ClusterRole

ClusterRoleBinding - 클러스터 롤바인딩

한번 설정 했을 때 클러스터 전체에 적용

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: myuser
  namespace: default #1
  apiGroup: "" #2
roleRef: #3
  kind: ClusterRole
  name: read-clusterrole
  apiGroup: rbac.authorization.k8s.io

#1 subjects.namespace

클러스터 관련 설정이므로 .metadata 하위가 아닌 .subjects[] 하위에 .namespace 필드가 있다.

#2 subjects.apiGroup

어떤 유형의 사용자 계정과 연결하는지 설정.

apiGroup: “” → 핵심 API 그룹으로 설정했다는 뜻.

#2 roleRef

사용자에게 어떤 롤을 할당할지를 설정.

roleRef.kind → Role or ClusterRole

댓글남기기