쿠버네티스 Secret 모범 사례

쿠버네티스 Secret 모범 사례 (Good practices for Kubernetes Secrets)

Secret을 사용하면 민감 정보가 어떻게 사용되는지 더 잘 제어할 수 있고 우발적 노출 위험을 줄여줘요. Secret 값은 base64 문자열로 인코딩되며 기본적으로 암호화되지 않은 상태로 저장되지만, 저장 시 암호화되도록 구성할 수 있어요.

파드는 볼륨 마운트나 환경 변수처럼 다양한 방식으로 Secret을 참조할 수 있어요. Secret은 기밀 데이터를 위해 설계됐고, ConfigMap은 비기밀 데이터를 위해 설계됐어요.

다음 모범 사례는 클러스터 관리자와 애플리케이션 개발자 모두를 위한 것이에요. 이 지침으로 Secret 객체의 민감 정보 보안을 개선하고 Secret을 더 효과적으로 관리해요.

출처: 문서

본문

클러스터 관리자 (Cluster administrators)

이 섹션은 클러스터 관리자가 클러스터 안의 기밀 정보 보안을 개선하기 위해 사용할 수 있는 모범 사례를 제공해요.

저장 시 암호화 구성하기

기본적으로 Secret 객체는 etcd에 암호화되지 않은 채 저장돼요. etcd 에서 Secret 데이터의 암호화를 구성해야 해요. 지침은 Secret 데이터를 저장 시 암호화를 참고해요.

Secret에 대한 최소 권한 접근 구성하기

쿠버네티스 RBAC 같은 접근 제어 메커니즘을 계획할 때 Secret 객체에 대한 접근에 대한 다음 지침을 고려해요. RBAC 모범 사례의 다른 지침도 따라야 해요.

  • 컴포넌트: watch 또는 list 접근을 가장 권한이 높은 시스템 수준 컴포넌트에만 제한해요. 컴포넌트의 정상 동작이 필요한 경우에만 Secret에 대한 get 접근을 부여해요.
  • 사람: Secret에 대한 get, watch, list 접근을 제한해요. 클러스터 관리자만 etcd 에 접근하도록 허용해요. 여기에는 읽기 전용 접근도 포함돼요. 특정 애노테이션이 있는 Secret에 대한 접근 제한 같은 더 복잡한 접근 제어는 서드파티 인가 메커니즘을 고려해요.

주의:

Secret을 사용하는 파드를 만들 수 있는 사용자는 그 Secret의 값도 볼 수 있어요. 클러스터 정책이 사용자가 Secret을 직접 읽는 것을 허용하지 않더라도, 같은 사용자가 Secret을 노출하는 파드를 실행할 수 있는 접근권을 가질 수 있어요. 이 접근을 가진 사용자가 Secret 데이터를 의도적이든 비의도적이든 노출시키는 영향은 감지하거나 제한할 수 있어요. 권장 사항은 다음과 같아요:

  • 수명이 짧은(short-lived) Secret을 사용해요
  • 단일 사용자가 여러 Secret을 동시에 읽는 것 같은 특정 이벤트에 알리는 감사 규칙을 구현해요

Secret에 대한 접근 제한하기

마운트된 Secret에 대한 접근을 격리하려면 별도의 네임스페이스를 사용해요.

etcd 관리 정책 개선하기

etcd 가 사용하는 영구 저장소는 더 이상 사용하지 않게 되면 지우거나 분쇄(shred)하는 것을 고려해요.

여러 etcd 인스턴스가 있다면 인스턴스 사이에 암호화된 SSL/TLS 통신을 구성해 전송 중인 Secret 데이터를 보호해요.

외부 Secret에 대한 접근 구성하기

서드파티 Secrets 스토어 제공자를 사용해 기밀 데이터를 클러스터 밖에 두고, 파드가 그 정보에 접근하도록 구성할 수 있어요. Kubernetes Secrets Store CSI Driver는 kubelet이 외부 스토어에서 Secret을 가져와 데이터에 접근하도록 인가된 특정 파드에 볼륨으로 마운트하게 해주는 DaemonSet이에요.

지원되는 제공자 목록은 Secret Store CSI Driver 제공자를 참고하세요.

swap 메모리 사용 모범 사례

Linux 노드의 swap 메모리 설정에 대한 모범 사례는 swap 메모리 관리를 참고해요.

개발자 (Developers)

이 섹션은 개발자가 쿠버네티스 리소스를 구축·배포할 때 기밀 데이터의 보안을 개선하기 위해 사용할 수 있는 모범 사례를 제공해요.

Secret 접근을 특정 컨테이너로 제한하기

파드에서 여러 컨테이너를 정의하고 그중 하나만 Secret에 접근해야 한다면, 다른 컨테이너가 그 Secret에 접근하지 못하도록 볼륨 마운트 또는 환경 변수 구성을 정의해요.

읽은 후 Secret 데이터 보호하기

애플리케이션은 환경 변수나 볼륨에서 읽은 후에도 기밀 정보의 값을 보호해야 해요. 예를 들어 애플리케이션은 시크릿 데이터를 평문으로 로깅하거나 신뢰할 수 없는 당사자에게 전송하는 것을 피해야 해요.

Secret 매니페스트 공유 피하기

Secret 데이터를 base64로 인코딩해 매니페스트로 Secret을 구성한다면, 이 파일을 공유하거나 소스 저장소에 커밋하는 것은 매니페스트를 읽을 수 있는 모든 사람에게 시크릿이 노출된다는 뜻이에요.

주의:

RBAC와 같은 접근 제어를 사용해 이러한 파일을 읽을 수 있는 사람을 제한해요.

더 알아보기 (Learn more)