피드로 돌아가기
Kubernetes BlogKubernetes Blog
DevOps

Kubernetes v1.35가 CSI 드라이버의 서비스 계정 토큰 전달 위치를 volume_context에서 secrets 필드로 변경하여 의도하지 않은 로깅 노출 제거

Kubernetes v1.35: A Better Way to Pass Service Account Tokens to CSI Drivers

2026년 1월 7일10intermediate

Context

CSI 드라이버가 TokenRequests 기능을 통해 요청한 서비스 계정 토큰이 volume_context 필드를 통해 전달되었으나, 이는 민감 정보를 위한 적절한 위치가 아니었다. protosanitizer 도구가 volume context를 민감 데이터로 취급하지 않아 gRPC 요청 로깅 중 토큰이 의도하지 않게 노출되는 CVE-2023-2878, CVE-2024-3744 같은 보안 사고가 발생했다.

Technical Solution

  • 옵트인 메커니즘 도입: CSIDriver spec에 serviceAccountTokenInSecrets 필드 추가하여 드라이버가 토큰 수신 위치 선택 가능하게 함 (기본값: false)
  • 기존 호환성 유지: serviceAccountTokenInSecrets가 false일 때는 기존대로 volume_context에 csi.storage.k8s.io/serviceAccount.tokens 키로 전달
  • 새로운 전달 방식: serviceAccountTokenInSecrets를 true로 설정하면 토큰이 secrets 필드에만 전달되어 protosanitizer가 자동으로 민감 데이터 처리
  • Beta 기능 기본 활성화: CSIServiceAccountTokenSecrets 기능 게이트를 kube-apiserver와 kubelet에서 기본 활성화하되, 기본값 false로 인해 기존 드라이버 동작 변경 없음
  • 안전한 마이그레이션 절차: CSI 드라이버 준비 → Kubernetes 1.35 업그레이드 → 드라이버 DaemonSet 롤아웃 완료 → CSIDriver 매니페스트 업데이트 순서 준수
  • 폴백 로직 구현: 드라이버 코드에서 secrets 필드 먼저 확인 후 volume_context로 폴백하는 로직으로 v1.35 이전 버전도 호환 가능하게 함

Key Takeaway

민감 정보는 CSI 명세에서 지정한 secrets 필드에 전달하는 것이 올바른 설계이며, 기존 시스템 호환성을 유지하면서 새로운 방식으로 마이그레이션할 때는 기본값을 변경하지 않는 옵트인 패턴이 효과적이다.


CSI 드라이버를 유지보수하는 엔지니어는 secrets 필드와 volume_context 필드를 모두 확인하는 폴백 로직을 먼저 구현하여 배포한 후, 클러스터가 Kubernetes

1.35로 완전히 업그레이드되고 모든 드라이버 Pod이 롤아웃된 이후에 CSIDriver 매니페스트에서 serviceAccountTokenInSecrets: true로 설정함으로써 의도하지 않은 토큰 로깅 노출을 제거할 수 있다.

원문 읽기