--authorization-mode
Kubernetes는 kube-apiserver를 통해 정책에 따라 요청에 대한 승인을 한다.
다양한 사용자 또는 그룹, 서비스 계정이 kube-apiserver에 접근하여 요청을 할때, 보안을 강화하기 위하여 여러가지 인증 모드를 통해 최소한의 권한을 부여한다.
kube-apiserver 구성 요소의 플래그이다.
인증 모드(Authorization Mode)
- Node
노드의 kubelet이 kube-apiserver에게 요청을 승인하는데 사용되는 권한 부여 모드이며,
작업을 수행하는 데 필요한 권한이 있는지 확인한다.(사용자 인증을 위한 것이 아니라 kubelet이 권한이 있는지 확인 하는것임)
쉽게 말하면, 승인된 노드만 kube-apiserver와 통신 할 수 있도록 하는 보안기능이다. 승인되지 않은 외부 노드를 방지해서 보안을 유지한다.
- ABAC(Attribute-Based Access Control)
아래와 같은 정책 파일을 생성하여 apiserver에 적용하는데(--authorization-policy-file=SOME_FILENAME), 보안을 추가하거나 변경해야 할때마다 이 정책 파일을 수동으로 수정하고 kube-apiserver를 재기동 해야하기 때문에 관리가 어렵다.
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
- RBAC(Role-Base Access Control)
사용자, 그룹 또는 서비스 계정에 대한
규칙을 만들고 User, Group 또는 ServiceAccount에 맵핑해주는 방식이다.
세분화된 권한을 정의하여 클러스터 내에서 누가 무엇을 할 수 있는지를 세밀하게 제어할 수 있다.
일반적으로 사용되는 인증모드이다.
- Webhook
클러스터 내부가 아닌 외부에서 권한을 관리하고 사용자의 허용 여부를 결정한다.
그 응답에 근거하여 사용자는 액세스 권한을 부여받는다.(인증을 위한 서드파티 제품들 Keycloak, Okta, Dex..)
- AlwaysDeny
모든 요청을 차단한다. 테스트에만 사용한다.
- AlwaysAllow
모든 요청을 허용한다. API 요청에 대한 인가가 필요하지 않은 경우에만 사용한다.
권고 보안 설정
여러 인증 모드들 중 권고하는 설정을 적용하여 보안을 강화한다.
-
권한 검증 부재
--authorization-mode=AlwaysAllow 값 존재할 경우 제거
-
Node 권한 사용
--authorization-mode=Node 값 설정
-
역할 기반 액세스 제어(RBAC)를 사용
--authorization-mode=RBAC 값 설정
권고 설정대로 진행시 kube-apiserver manifest내 플래그가 아래와 같다.
인증 모드는 ','를 기준으로 나열이 가능하며 지정한 순서대로 인증이 진행된다.(Node -> RBAC)

참고
https://infosec.adtcaps.co.kr/liveFile/eqstinsight-file/happyFileDown.do?fileName=20190621080345E90N.pdf&orgFileName=2019
https://kubernetes.io/ko/docs/reference/access-authn-authz/authorization/
https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/23096066#overview