kube-apiserver 구성 요소의 플래그이며, true일 경우 인가 되지 않은 익명의 사용자도 kube-apiserver에 접근이 허용되기 때문에 보안상 취약하다.
따라서, --anonymous-auth=false 설정을 권고 한다.
기본값은 true이기 때문에 추가 설정이 필요하다.
해당 설정 값에 따른 apiserver로의 접근에 대해서 살펴보자
위와같이 계정을 지정하지 않았음에도 anonymous 계정으로 접속이 허용된다.
상태코드: 403 Forbidden
인증은 되었으나 요청한 리소스에 접근하는데 필요한 권한이 없을때의 상태 코드
anonymous 사용자 접근을 막았으므로 Unauthorized 인증되지 않았다는 메시지가 나오며 접근이 되지 않는다.
상태코드 401 Unauthorized
인증이 되지 않았을 때의 상태 코드(클라이언트의 요청하는 토큰, 키 또는 로그인 세부 정보와 같은 자격증명이 없거나 유효하지 않을 때)
kube-apiserver 구성 요소의 플래그이며, 플래그의 값에 Port를 설정하면 kube-apiserver가 해당 포트로 HTTPS가 아닌 HTTP 연결을 허용한다.
따라서, insecure-port=0 설정하여 HTTP 연결을 비활성화 하도록 권장한다.
다만, k8s 1.20 버전부터는 해당 설정이 지원 중단 되었다고 한다.(1.20이상 버전부터는 그냥 설정을 지워버려도 되겠다.)
해당 깃허브에 보면 insecure-port, insecure-bind-address 플래그를 더이상 사용하지 않는다고 한다.
kube-apiserver 구성 요소의 플래그이며, false인 경우 kube-apiserver는 인증 토근이 유효한지 확인만 하고 실제로 서비스 계정 토큰이 ETCD에 존재하는지는 확인하지 않는다.
다시말해, 서비스 계정이 삭제 되었더라도 서비스 계정의 토큰을 사용 할 수 있다.
default 값은 true이기 때문에 설정값을 일부러 false로 주지 않는 한 추가 설정 할 필요는 없어보인다.
위 테스트의 순서는 이러하다.
#서비스 계정 생성
kubectl create serviceaccount test-sa
# TOKEN변수에 sa 토큰 입력
TOKEN=$(kubectl get secret $(kubectl get serviceaccount test-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode)
# kube-apiserver로 curl
curl -k -H "Authorization: Bearer $TOKEN" https://localhost:6443/api/v1/pods