service-account-lookup이 false로 설정된 kube-apiserver

서비스 계정 토큰의 상태 조회를 유지하고 폐기한 자격 증명이 다시 사용되지 않도록 확인하세요.

설명

--service-account-lookup은 서비스 계정 토큰 인증 시 저장된 상태도 확인하도록 하는 옵션이며 기본값은 true입니다. 특히 장기 사용되는 Secret 기반 토큰에서 이 확인을 끄면, 토큰이나 서비스 계정을 삭제한 효과가 인증에 반영되지 않을 수 있습니다.

상태 조회는 토큰 서명 검증과 별개입니다. 조회를 켜더라도 서비스 계정의 권한을 최소화하고 토큰 수명을 관리해야 합니다.

잠재적 영향

유출되거나 폐기한 토큰이 계속 인증에 사용되면 해당 서비스 계정의 권한으로 데이터에 접근하거나 워크로드를 변경할 수 있습니다. 실제 피해 범위는 그 계정에 부여된 권한에도 달려 있습니다.

해결 방법

  • --service-account-lookup=true 또는 기본 동작을 유지하세요.
  • 워크로드에는 가능한 경우 TokenRequest와 프로젝션을 통한 단기 서비스 계정 토큰을 사용하고 필요한 RBAC 권한만 부여하세요.
  • 변경 후 정상 워크로드는 동작하고 삭제·폐기한 토큰은 거부되는지 검증하세요. 불필요한 장기 토큰과 배포된 사본도 제거하세요.

예시

Kubernetes 1.6의 과거 실행 옵션을 비교하는 발췌입니다. 현재 배포에는 지원되는 버전과 토큰 관리 방식을 사용하세요.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
      args:
        - "--service-account-lookup=false"

서비스 계정 토큰의 상태 조회를 비활성화합니다. 토큰 서명 검증을 대신하는 설정이 아니며, 폐기한 토큰의 거부를 약화할 수 있습니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
      args:
        - "--service-account-lookup=true"

토큰 상태 조회를 활성화합니다. 적절한 토큰 수명과 서비스 계정 권한도 함께 관리해야 합니다.

참조