Authorization
사용자가 클러스터에 접근하여 할 수 있는 것을 정의한다.
예시 )
- 관리자 : Pod, Node, Deployment와 같은 객체 확인/생성/삭제
- 개발자 : 클러스터 구성 수정 제한, 애플리케이션 Deployment 접근 허용
- Service Account : 외부 애플리케이션 접근 허용
- 여러 조직 또는 팀과 클러스터 공유 시, 클러스터를 네임스페이스로 분리하여 접근 통제
권한 부여 메커니즘
Node authorization
kubelet은 apiserver에 접근하여 service, endpoint, node, pod의 정보를 읽거나 node 상태와 같은 정보를 apiserver에 전달한다. 이러한 요청은 node authorizer에 의해 처리되며, 사용자 이름이 system:nodes 그룹에 속해야 한다.
Attribute based authorization
사용자 또는 사용자 그룹을 권한 집합과 연결시키는 방법으로, json 형식의 정책 집합 파일을 생성하여 apiserver에 전달한다. 변경 또는 추가가 필요할 때마다 파일을 수정하고 api-server를 재시작해야 한다는 번거로움이 존재한다.
Role based authorization
권한 집합으로 역할을 생성하여 사용자를 역할에 연결시키는 방법으로, 변경이 필요한 경우 역할을 수정하는 방식으로 반영할 수 있다.
AWS IAM의 role과 유사한 방식의 관리 방법이라고 생각할 수 있을 듯하다.
Webhook
외부에서 인증을 관리하는 방법으로, 사용자 정보과 요청 정보를 이용해 인증 에이전트의 API를 호출하여 승인 여부를 결정하도록 한다. API response에 기반하여 접근을 제어한다.
AlwaysAllow
모든 요청을 인증 없이 허용하는 방식이다.
AlwaysDeny
모든 요청을 거부하는 방식이다.
권한 부여 메커니즘은 kube-apiserver에서 --authorization-mode 옵션을 사용하여 설정할 수 있으며, 별도로 지정하지 않으면 AlwaysAllow 모드로 설정된다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --authorization-mode=Node,RBAC
...
메커니즘은 쉼표로 구분하여 여러 매커니즘을 사용하도록 설정할 수 있으며, 선언된 순서대로 승인 매커니즘이 동작한다. 요청을 거부하면 다음 승인 매커니즘이 동작하며, 요청을 승인하며 다음 인증 매커니즘은 동작하지 않는다.