Authorization Mode가 AlwaysAllow로 설정됨

AlwaysAllow 대신 구성요소에 맞는 인가 정책으로 요청 권한을 제한하세요.

설명

AlwaysAllow는 인증을 통과한 요청에 대해 작업별 권한을 제한하지 않습니다. 인증과 인가는 별개이므로 인증된 사용자나 허용된 익명 요청에도 필요한 권한 경계가 사라질 수 있습니다. kube-apiserver와 kubelet의 인가 설정을 각각 확인하세요.

잠재적 영향

  • 필요 이상의 리소스 조회·변경이나 노드 작업을 허용할 수 있습니다.
  • 침해된 계정이나 워크로드가 제어 평면 또는 노드 권한을 악용하면 영향이 다른 워크로드로 확산될 수 있습니다.

해결 방법

  • kube-apiserver는 필요한 역할과 바인딩을 준비하고 AlwaysAllow를 RBAC 등 실제 권한을 검사하는 구성으로 바꾸세요.
  • kubelet은 API 서버에 인가를 위임하는 Webhook과 필요한 연결·권한을 구성하세요. kubelet에 RBAC 모드를 직접 지정하는 방식은 사용하지 마세요.
  • 실행 인자와 설정 파일을 함께 확인하고, 변경 후 필요한 요청은 허용되며 권한 없는 요청은 거부되는지 시험하세요.

예시

과거 Kubernetes 1.6 API 서버의 실행 인자 비교입니다. 지원되는 버전으로 이전하고 나머지 제어 평면 설정은 별도로 준비하세요. 두 예시 모두 익명 인증을 비활성화하며, 변경 후에는 필요한 RBAC 역할과 바인딩이 있어야 합니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args:
        ["--anonymous-auth=false", "--authorization-mode=AlwaysAllow"]
  restartPolicy: OnFailure

인증된 요청을 AlwaysAllow로 인가하여 작업별 권한을 제한하지 않습니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args:
        ["--anonymous-auth=false", "--authorization-mode=RBAC"]
  restartPolicy: OnFailure

RBAC 정책에 따라 요청을 인가합니다. 관리자와 시스템 구성요소의 필요한 권한을 먼저 구성하세요.

참조