설명
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 정책에 따라 요청을 인가합니다. 관리자와 시스템 구성요소의 필요한 권한을 먼저 구성하세요.