Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Good practices for Kubernetes Secrets
쿠버네티스 시크릿 모범 사례
쿠버네티스에서 시크릿은 비밀번호, OAuth 토큰 및 SSH 키와 같은 민감한 정보를 저장한다.
시크릿을 사용하면 민감한 정보가 사용되는 방법을 더 잘 통제할 수 있으며, 실수로 외부에 노출되는 위험도 줄일 수 있다. 시크릿 값은 base64 문자열로 인코딩되며 기본적으로는 평문으로 저장되지만, 암호화하여 저장하도록 설정할 수도 있다.
파드는 볼륨을 마운트하거나 혹은 환경 변수를 통하는 등 다양한 방식으로 시크릿을 참조할 수 있다. 시크릿은 기밀 데이터를 다루는 용도로 적합하며, 컨피그맵은 기밀이 아닌 데이터를 다루는 용도로 적합하다.
다음 모범 사례는 클러스터 관리자와 애플리케이션 개발자 모두를 위한 것이다. 이 가이드라인을 사용하여 시크릿 오브젝트에 있는 민감한 정보의 보안을 개선하고 시크릿을 보다 효과적으로 관리할 수 있다.
클러스터 관리자
이 섹션에서는 클러스터 관리자가 클러스터의 기밀 정보 보안을 개선하는 데 사용할 수 있는 모범 사례를 제공한다.
저장된 데이터(at rest)에 암호화 구성
기본적으로 시크릿 오브젝트는 etcd에
암호화되지 않은 상태로 저장된다. 따라서 etcd
의 시크릿 데이터에 암호화를 구성해야 한다.
자세한 내용은
Encrypt Secret Data at Rest를 참고한다.
시크릿에 대한 최소 권한 접근 구성
쿠버네티스 역할 기반 접근 제어 (RBAC)
(RBAC)와 같은 접근 제어 메커니즘을 계획할 때,
Secret
오브젝트에 대한 접근에 대해 다음 가이드라인을 고려한다. 또한
역할 기반 접근 제어 (RBAC) 모범 사례의
다른 가이드라인도 따라야 한다.
- 컴포넌트: 가장 권한이 높은 시스템 수준의 구성 요소에 대해서만
watch
나list
액세스를 제한한다. 컴포넌트의 정상 동작에 필요한 경우에만 시크릿에 대한get
액세스를 허용한다. - 사람: 시크릿에
get
,watch
또는list
액세스를 제한한다. 클러스터 관리자에게만etcd
에 대한 액세스를 허용한다. 여기에는 읽기 전용 액세스가 포함된다. 특정 어노테이션을 사용하여 시크릿에 대한 액세스를 제한하는 등의 더 복잡한 액세스 제어를 수행하려면 써드파티(third-party) 권한 부여 메커니즘을 사용하는 것을 고려한다.
주의:
시크릿에 대한list
액세스 권한을 부여하면 주체가 암시적으로
시크릿의 내용을 가져갈 수 있다.시크릿을 사용하는 파드를 생성할 수 있는 사용자는 해당 시크릿의 값도 볼 수 있다. 클러스터 정책에서 사용자가 시크릿을 직접 읽는 것을 허용하지 않더라도, 동일한 사용자가 시크릿을 노출하는 파드를 실행할 수 있다. 이 액세스 권한을 가진 사용자가 의도적이든 의도적이지 않든 시크릿 데이터를 노출시켜 발생할 수 있는 영향을 감지하거나 제한할 수 있다. 몇 가지 권장 사항은 다음과 같다.
- 수명이 짧은 시크릿 사용
- 한 사용자가 여러 비밀을 동시에 읽는 것과 같은 특정 이벤트에 대해 경고하는 감사 규칙 구현
etcd 관리 정책 개선
더 이상 사용하지 않는다면 etcd
에서 사용하는 내구성 스토리지를
지우거나 파쇄하는 것을 고려한다.
여러 개의 etcd
인스턴스가 있는 경우, 인스턴스 간에 암호화된 SSL/TLS 통신을 구성하여
전송 중(in transit)인 시크릿 데이터를 보호한다.
외부 시크릿에 대한 액세스 구성
써드파티 시크릿 저장소 공급자를 사용하여 기밀 데이터를 클러스터 외부에 보관한 다음 해당 정보에 액세스하도록 파드를 구성할 수 있다. 쿠버네티스 시크릿 스토어 CSI 드라이버는 kubelet이 외부 스토어에서 시크릿을 검색하고 접근 권한을 부여한 특정 파드에 시크릿을 볼륨으로 마운트할 수 있도록 하는 데몬셋(DaemonSet)이다.
지원되는 제공자 목록은 다음을 참고한다. 시크릿 스토어 CSI 드라이버 제공자.
개발자
이 섹션은 개발자가 쿠버네티스 리소스를 구축하고 배포할 때 기밀 데이터의 보안을 개선하기 위해 사용할 수 있는 모범 사례를 제공한다.
특정 컨테이너에 시크릿 액세스 제한
파드에 여러 개의 컨테이너를 정의하고 있고 그 중 하나만 시크릿에 접근해야 하는 경우, 볼륨 마운트 또는 환경 변수 구성을 정의하여 다른 컨테이너가 해당 시크릿에 액세스하지 못하도록 한다.
읽기 후 시크릿 데이터 보호
애플리케이션은 환경 변수나 볼륨에서 기밀 정보를 읽은 후에도 그 값을 보호해야 한다. 예를 들어, 애플리케이션은 시크릿 데이터를 로그에 남기거나 신뢰할 수 없는 상대에게 전송하지 않아야 한다.
시크릿 매니페스트 공유 방지
시크릿 데이터가 base64로 인코딩된 매니페스트를 통해 시크릿을 구성하는 경우, 이 파일을 공유하거나 소스 리포지토리에 체크인하면 매니페스트를 읽을 수 있는 모든 사람이 시크릿을 사용할 수 있다는 것을 의미한다.
주의:
Base64 인코딩은 암호화 방식이 아니며, 일반 텍스트에 비해 추가적인 기밀성을 제공하지 않는다.이 페이지는 쿠버네티스가 필요로 하는 기능을 제공하는 써드파티 프로젝트 또는 제품에 대해 언급하고 있습니다. 쿠버네티스 프로젝트 저자들은 이러한 써드파티 프로젝트 또는 제품에 대해 책임지지 않습니다. CNCF 웹사이트 가이드라인에서 더 자세한 내용을 확인합니다.
다른 써드파티 링크를 추가하는 변경을 제안하기 전에, 컨텐츠 가이드를 확인해야 합니다.