Node Authorizer 설정 점검

Node authorizer와 올바른 노드 인증 주체로 kubelet 권한을 제한하세요.

설명

Node authorizer는 kubelet이 노드 작업에 필요한 API 권한을 사용하도록 제어합니다. 필요한 Secret과 ConfigMap 등의 접근을 해당 노드에 배치된 파드와 연계하므로, 노드에 불필요한 권한을 주는 구성을 줄이는 데 중요합니다.

운영 환경에서는 Node와 RBAC를 함께 사용하는 구성이 일반적입니다. 단순 허용 모드나 불완전한 조합은 권한 통제를 약하게 만들 수 있습니다.

잠재적 영향

  • 노드 관련 요청에 대한 권한 통제가 기대보다 느슨해질 수 있습니다.
  • 다른 설정 실수와 결합되면 불필요한 리소스 접근이 허용될 수 있습니다.
  • 제어면 권한 모델이 운영 표준과 달라져 보안 검증이 어려워질 수 있습니다.

해결 방법

  • --authorization-mode 또는 사용하는 AuthorizationConfiguration에서 Node authorizer를 활성화하세요.
  • 일반적으로 RBAC,Node 조합을 사용하고, kubelet 인증 주체가 system:nodes 그룹과 system:node:<nodeName> 형식인지 확인하세요. NodeRestriction으로 노드의 변경 권한도 제한하세요.
  • API 서버 시작 인자를 정기적으로 점검해 AlwaysAllow 같은 약한 모드가 남아 있지 않은지 확인하세요.

예시

API 서버 인자 발췌입니다. 이미지는 실제 클러스터 버전에 맞추세요. kubelet 인증 정보, RBAC 바인딩과 나머지 API 서버 설정은 생략했습니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--authorization-mode=AlwaysAllow"]

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--authorization-mode=RBAC,Node"]

설명:

  • 변경 전: AlwaysAllow는 요청을 일괄 허용하므로 필요한 권한 범위를 강제하지 않습니다.
  • 변경 후: RBAC,Node를 활성화합니다. 올바른 노드 인증 주체와 최소 권한 바인딩도 함께 구성해야 합니다.

참조