클러스터 내부 접근 제한이 필요한 Tiller 배포

마이그레이션이 끝날 때까지 Tiller 관리 엔드포인트의 접근과 권한을 제한하세요.

설명

Tiller는 Helm 2의 서버 구성요소이며 자신의 서비스 계정 권한으로 Kubernetes 리소스를 관리합니다. 클러스터 내부에서 도달 가능한 엔드포인트에 적절한 인증이 없으면 다른 워크로드가 그 권한으로 작업을 요청할 수 있습니다.

Helm 2는 2020년 11월부터 보안 업데이트를 받지 않습니다. 지원되는 Tiller 없는 Helm 버전으로 전환하세요.

잠재적 영향

  • 허가되지 않은 요청으로 배포나 다른 리소스가 변경될 수 있습니다. 영향 범위는 Tiller에 부여된 권한에 달려 있습니다.
  • 침해된 Pod가 접근 가능한 관리 엔드포인트를 통해 다른 워크로드에 영향을 줄 수 있습니다.

해결 방법

  • 릴리스 정보와 배포 절차를 검증하며 Tiller 없는 방식으로 이전한 뒤 Tiller를 제거하세요.
  • 즉시 제거할 수 없다면 루프백 바인딩이나 인증된 TLS 연결로 접근을 제한하고 서비스 계정 권한을 최소화하세요.
  • 같은 Pod의 컨테이너와 포트 전달 권한도 확인하세요. 루프백 바인딩만으로 모든 관리 접근이 차단되지는 않습니다.

예시

아래는 과거 Tiller Deployment의 리스닝 주소를 비교한 발췌입니다. 실제 이미지, selector와 서비스 계정 설정은 별도로 필요하며 새 Tiller 설치를 권장하는 예제가 아닙니다.

변경 전

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tiller-bad-args
  labels:
    app: helm
    name: tiller
spec:
  template:
    metadata:
      labels:
        app: helm
        name: tiller
    spec:
      containers:
        - name: tiller-v2
          image: tiller-image
          args:
            - "--listen=10.7.2.8:44134"

Tiller가 해당 주소를 가진 환경에서는 루프백 이외의 인터페이스로 요청을 받을 수 있습니다. 실제 도달 가능 여부와 TLS 인증 설정을 함께 확인해야 합니다.

변경 후

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tiller-deploy
  labels:
    app: helm
    name: tiller
spec:
  template:
    metadata:
      labels:
        app: helm
        name: tiller
    spec:
      containers:
        - name: tiller
          image: tiller-image
          args:
            - "--listen=127.0.0.1:44134"

리스닝 주소를 127.0.0.1로 제한합니다. 같은 Pod의 프로세스나 허가된 포트 전달 경로는 여전히 접근할 수 있으므로 권한 제한과 마이그레이션이 필요합니다.

참조