[CKA] Kubernetes 권한 부여
Kubernetes 권한 부여의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
이전까지 인증에 관련된 내용을 정리하며 클러스터에 엑세스할 수 있는 다양한 방법을 알아보았습니다.
Authorization
클러스터 관리자로써 우리는 모든 종류의 작업을 수행할 수 있었습니다.
하지만 다른 사람 혹은 서비스가 클러스터에 엑세스하는 경우를 위해 여러 방식으로 인증 절차를 만들지만 같은 수준의 권한을 갖는 것을 원하지 않습니다.
특정 엑세스 권한은 거부하지만 특정 엑세스는 허용하는 것을 원합니다.
이를 위해 클러스터 내 권한 부여를 사용하면 도움이 될 수 있습니다.
Authorization Mechanisms
Node
Node Authorization은 kubelet을 위한 인가 방식이다. 사용자를 위한 방법이 아니다. kubelet은 각 노드에서 실행되는 에이전트로 파드와 컨테이너를 관리하는 임무를 받았다. 파드와 컨테이너를 관리하기 위해서는 api-server를 통해 파드 관련 정보를 얻거나 상태를 변경해야 한다. Node Authorization에서는 관련된 연산을 허용한다.
Node Authorization의 주요 목적은 kubelet이 노드, 파드, 서비스 등과 관련된 리소스에 대해 읽기 및 쓰기 작업을 수행할 수 있도록 하는 것
- kubelet은 특별한 그룹에 속한 사용자로 인증됩니다 (system:nodes 그룹).
- 각 kubelet은 system:node:nodeName 형식의 사용자 이름을 가집니다.
ABAC
Attribute Base Authorization 사용자나 사용자 그룹을 허용 그룹으로 연결합니다.
json 형식으로 생성하며 추가하거나 변경할 때마다 정책 파일을 수동으로 수정하고 kube-apiserver를 재시작해야하기 때문에, 관리의 어려움으로 잘 사용되지 않습니다.
RBAC
역할 기반 엑세스 컨트롤은 훨씬 쉽게 만들어줍니다.
사용자나 그룹을 권한 집합으로 직접 연결하는 대신 역할을 정의하여 사용자를 역할에 연결합니다.
사용자의 엑세스에 변화가 필요할 때마다 역할만 수정하면 됩니다. 즉시 반영되며 엑세스 관리에 대해 표준적인 접근법을 제공합니다.
Webhook
외부에 위탁하는 방식으로 외부에서 권한을 관리하고 싶을 때 사용합니다.
api-server를 거쳐 open policy agent에 api 콜을 통해 사용자 권한과 엑세스 정보를 받습니다.
AlwaysAllow / AlwaysDeny
항상 모든 요청을 허용하고, 막을 수 있습니다.
해당 모드는 kube-apiserver의 인증 모드 옵션을 통해 설정되며 해당 옵션을 지정하지 않으면 언제나 Allow로 설정합니다.
체인 형식으로 하나가 거부 될 때마다 다음 단계의 모듈로 넘어가며 요청이 승인된다면 넘어가지 않고 승인을 받아 종료됩니다.