넘겨받은 설정에서 비밀값 30여 개를 걷어냈다

2026/08/07자체 호스팅 전환Kubernetes · Helm · ArgoCD

이전 배포 도구에서 사내 서비스들을 넘겨받는 과정에서, 설정 파일에 실제 비밀값이 리터럴로 들어 있는 것을 계속 발견했습니다.

한 서비스는 인증 키와 데이터베이스 비밀번호, 스토리지 접근 키까지 10 개 넘게 들어 있었습니다. 다른 서비스는 관리자 비밀번호와 메트릭 계정이, 또 다른 서비스는 128 자짜리 서명 키가 그대로 있었습니다. 전부 저장소에 커밋될 자리였습니다.

이전 도구는 설정을 자기 데이터베이스에 두고 있었으므로 이게 겉으로 드러나지 않았습니다. 저장소로 옮기는 순간 전부 평문이 됩니다.

걷어내는 게 생각보다 까다로웠다

차트마다 방식이 달랐습니다.

어떤 차트는 참조 방식을 지원해서, 클러스터에 미리 둔 비밀 저장소를 가리키게 바꾸면 됐습니다. 어떤 차트는 그런 게 없어서 환경 변수 주입으로 우회해야 했습니다.

한 서비스는 "비밀 생성 안 함"으로 두면 참조까지 함께 사라지는 구조였습니다. 같은 조건문이 둘 다 감싸고 있었기 때문입니다. 차트가 만들어 주는 경로를 포기하고 기존 저장소를 직접 참조하게 했습니다.

그리고 한 건은 되돌렸습니다. 참조 방식으로 바꿨더니 인증 기능이 죽었습니다. 그 값은 다른 곳에서도 같은 형태로 읽히고 있어서, 주입 방식을 바꾸면 안 되는 것이었습니다. 원래대로 두고 별도 관리 대상으로 표시했습니다.

대신 새 위험이 생긴다

차트 밖에서 관리하는 비밀 저장소는 배포 도구가 관리하지 않습니다. 삭제 동기화를 켜면 지워집니다.

이건 고칠 수 있는 종류가 아니라 알고 있어야 하는 종류입니다. 각 설정 파일 맨 위에 경고로 적어 뒀습니다. 몇 달 뒤에 삭제 동기화를 켜려는 사람이 읽을 것을 전제로요.

이관은 옮기는 일이 아니었다

파일을 복사하고 경로를 바꾸는 게 이관인 줄 알았는데, 실제로는 넘겨받은 설정을 한 줄씩 읽는 일이었습니다.

비밀값 말고도 여러 개가 나왔습니다. 헬스 체크가 값 파일의 null 때문에 통째로 지워져 있었고, 인증서 발급기 이름이 자리표시자 그대로였고, 인증서가 없는 네임스페이스를 가리키고 있었습니다. 전부 이관 전부터 조용히 깨져 있던 것들입니다.

"돌아가고 있으니 맞겠지"로 넘겼다면 그대로 옮겨졌을 겁니다.