ServiceAccount 토큰 서명 키 설정 점검

레거시 Secret 기반 서비스 계정 토큰을 발급한다면 kube-controller-manager의 서명 키 구성을 확인하세요.

설명

--service-account-private-key-file은 kube-controller-manager에서 레거시 Secret 기반 서비스 계정 토큰 생성을 활성화하고 서명에 사용할 개인 키를 지정합니다. 현재의 TokenRequest 기반 토큰 발급은 kube-apiserver의 서명 구성을 사용하므로 이 컨트롤러 옵션의 생략만으로 모든 토큰 발급이 중단되는 것은 아닙니다.

서비스 계정 토큰은 클러스터 내부 인증에 자주 쓰이므로 서명 키 관리가 중요합니다. 실제로 사용하는 토큰 발급 방식에 맞게 키를 구성해야 합니다.

잠재적 영향

  • 레거시 토큰이 필요한 구성에서 키가 없거나 잘못되면 토큰 생성과 인증에 문제가 생길 수 있습니다.
  • 서명 개인 키가 노출되면 이를 이용해 토큰을 위조할 위험이 있습니다.

해결 방법

  • 가능한 경우 수명이 제한된 TokenRequest 기반 토큰을 사용하세요. 레거시 Secret 기반 토큰이 필요한 경우에만 kube-controller-manager의 --service-account-private-key-file을 구성하세요.
  • 개인 키 파일 접근 권한과 저장 위치를 안전하게 관리하세요.
  • 서명 키에 대응하는 검증 키가 kube-apiserver에 구성되어 있는지 확인하세요. 옵션을 채우기 위해 불필요한 장기 토큰을 활성화하지 마세요.

예시

아래는 Kubernetes 1.6 시기의 레거시 토큰 설정 발췌입니다. 실제 운영에는 지원 중인 버전을 사용하고, 키 파일 마운트와 나머지 제어면 설정을 별도로 구성하세요.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: []

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: ["--service-account-private-key-file=/path/to/key/file.pem"]

설명:

  • 변경 전: 레거시 토큰 서명용 개인 키를 지정하지 않습니다. 현재 사용하는 토큰 발급 방식과 요구 사항을 확인해야 합니다.
  • 변경 후: 레거시 토큰용 서명 키를 명시합니다. 유효한 개인 키와 대응하는 검증 키가 필요합니다.

참조