본문 바로가기
네트워크/k8s

[k8s] 31. Authorization - RBAC, Role, RoleBinding

by Lauren X Ming 2021. 2. 24.

Authorization - RBAC, Role, RoleBinding

1. RBAC(Role, RoleBinding) Overview

  • 쿠버네티스가 자원을 지원하는 방법
  • 역할기반으로 자원을 분배
  • 쿠버네티스는 Node, PV, Namespace와 같이 클러스터 단위로 관리되는 자원과
  • Pod, Svc와 같이 네임스페이스 단위로 관리되는 자원이 있음
  • 네임스페이스를 만들면 자동적으로 Service Account가 만들어지거나 추가적으로 더 만들 수 있음
  • Service Account에 Role과 Role Binding을 어떻게 설정하느냐에 따라 해당 Service Account는 네임스페이스 자원에만 접근할 수 있거나 클러스터 자원에도 접근할 수 있음

RoleBinding

  • Role은 여러 개를 만들 수 있고, 각 Role은 Namespace 내 자원에 대해 조회나 생성이 가능하도록 권한을 줄 수 있음
  • RoleBinding은 Role과 Service Account를 연결해주는 역할
  • Role은 하나만 지정할 수 있고, Service Account는 여러 개 지정할 수 있음
  • 그림에서 보면 SA와 SA1은 Role1과 연결 돼 Namespace A의 Pod와 SVC에 접근할 수 있음

ClusterRoleBinding

  • ClusterRole: 클러스터 단위의 오브젝트를 지정할 수 있음
  • ClusterRoleBinding에 SA를 추가하면 Namespace A에 있는 SA에서도 클러스터 자원에 접근할 수 있는 권한을 얻음

Namespace B를 보자

  • SA --> RoleBinding --> ClusterRole2 --> Namespace B 구조로 연결되어 있음
  • 이렇게 연결되면 Namespace B는 Cluster 내의 자원은 못쓰고 Namespace B의 자원만 사용 가능
  • 아니 이럴거면 RoleBinding만 쓰지 왜 이렇게 복잡하게 ClusterRole2에 연결하고 그럴까
  • 그 이유는, 모든 Namespace의 RoleBinding 내용을 한 번에 관리하기 위함
    • ClusterRole에 연결하는 구조가 아니라 각 네임스페이스마다 RoleBinding을 따로 두게 되면
    • Role에 대한 변경을 전체적으로 하고 싶을 때, 일일이 들어가서 해야하는 번거로움과 오류 위험이 있음
    • 따라서 ClusterRole에 각 네임스페이스의 RoleBinding을 연결해서 한 번에 관리하기 위함
  • 모든 네임스페이스에 같은 권한을 만들어서 관리를 해야할 때 유용한 방법

2. Role, RoleBinding Detail

nm-01

  • 한 네임스페이스에 파드와 서비스가 있음
  • 네임스페이스를 만들면 자동으로 생성되는 Service Account와 token이 있는 Secret이 있음
  • Role이 있음(파드)
    • apiGroups: [""]
      • 파드는 코어 API여서 내용이 없어도 됨
    • resources: pods
    • verbs: get, list
      • 조회만 가능하게 하도록 내용을 줌
    • 리소스가 작을 경우 apiGroups: ["batch"], resources: [jobs]
  • RoleBinding을 만듦
    • roleRef: Role 연결
    • subejects: SA 연결
  • 이렇게 연결되면 Secret에 토큰 값을 가지고 사용자가 Kubernetes API Server에 접속 가능
  • 이 토큰에 있는 권한에 따라 파드에만 접근 가능

nm-02

  • Service Account를 admin의 권한처럼 모든 클러스터에 접근 가능하도록 하려고 함
  • ClusterRole
    • apiGroups: [*]
    • resources: [*]
    • verbs: [*]
  • ClusterRoleBinding
    • roleRef: ClusterRole 연결
    • subjects: SA 연결
  • 외부에 있는 사용자는 이 토큰을 갖고 Kubernets API Server에 접근
  • 다른 Namespace 자원 및 클러스터 내 자원 조회 가능

출처

인프런 - 대세는 쿠버네티스