비밀 관리
환경변수에 넣으면 안전하다고 여기는 경우가 많습니다. 그러면 설정 파일 하나만 조심하면 됩니다. 그런데 비밀값은 환경변수에만 살지 않습니다. 프로세스 명령줄, 컨테이너 설정, 서비스 등록 파일, 그리고 로그와 오류 메시지에도 남습니다.
한 문장으로
비밀 관리는 API 키와 비밀번호 같은 값을 코드에서 분리해 보관하고, 누가 언제 꺼내 썼는지 남기며, 필요할 때 바꿀 수 있게 하는 일입니다.
하는 일
- 보관 위치 분리 — 코드 저장소에 값이 들어가지 않게
- 접근 권한 — 누가 어떤 값을 볼 수 있는지
- 교체 절차 — 정기적으로, 그리고 사람이 바뀔 때 바꾸는 방법
- 노출 시 대응 — 무엇부터 바꾸고 어디를 확인할지 미리 정해 두기
- 가리기 — 로그와 화면에 값이 그대로 찍히지 않게
- 배포 시 주입 — 서버에 손으로 적어 두지 않고 배포가 채워 넣기
하지 않는 일
- 사용자 비밀번호 보관 — 그건 되돌릴 수 없게 해시로 저장하는 다른 주제입니다
- 통신 암호화(TLS) — 오가는 길을 지키는 일이라 보관과 다릅니다
- 파일 자체의 암호화 — 문서 보안은 별도 영역입니다
이웃 개념과 헷갈리는 지점
- 비밀번호 관리자사람이 쓰는 비밀번호를 모아 두는 것
- 사람이 쓰는 것과 프로그램이 쓰는 것은 다릅니다. 프로그램용 키는 사람 손을 거치지 않고 배포가 넣어 주는 편이 안전합니다.
- 설정 파일값을 코드 밖에 두는 가장 단순한 방법
- 코드 저장소에 안 올리는 것까지는 됩니다. 다만 누가 봤는지, 언제 바뀌었는지가 남지 않고, 서버마다 손으로 맞추다 갈라집니다.
- 접근 제어(IAM)누가 무엇을 할 수 있는지 정하는 것
- 권한을 좁히면 키가 새도 피해가 작습니다. 비밀 관리와 짝입니다. 한쪽만 하면 나머지 절반이 열려 있습니다.
- TLS 인증서통신을 암호화하는 열쇠
- 이것도 비밀값이지만 만료가 있다는 점이 다릅니다. 보관보다 갱신이 실제 사고 지점입니다.
언제 필요한가
이럴 때 필요합니다
- 키가 코드 저장소에 들어간 적이 있을 때
- 퇴사자가 알고 있던 값을 바꿔야 하는데 그 값이 어디에 쓰이는지 모를 때
- 개발과 운영이 같은 키를 함께 쓰고 있을 때
- 값이 새어 나갔을 때 무엇부터 바꿔야 할지 정해져 있지 않을 때
아직 아니어도 됩니다
- 외부 서비스 키가 하나도 없다면 아직 관리할 대상이 적습니다
- 혼자 만들고 혼자 배포한다면, 도구를 들이는 것보다 규칙을 정하는 편이 먼저입니다
- 이미 배포가 값을 주입하고 교체 절차가 문서로 있다면 도구를 바꿀 이유는 약합니다
여기서부터는 갈립니다
어디에 둘지는 팀 크기와 배포 방식에 따라 갈리고, 도구를 들인다고 해결되지도 않습니다. 실제 사고는 대개 도구 밖에서 납니다. 확인하려고 화면에 찍고, 오류 메시지에 실려 로그에 남고, 급해서 채팅으로 보내는 데서요. 그래서 어떤 제품을 쓰느냐보다 값을 다루는 습관을 어떻게 정하느냐가 결과를 더 많이 좌우합니다. 이건 팀마다 다릅니다.
자주 묻는 질문
출발점으로는 맞습니다. 다만 값은 그 파일에만 있지 않습니다. 실행 중인 프로세스의 명령줄, 컨테이너 설정, 서비스 등록 파일에도 그대로 박히는 경우가 흔합니다. 설정 파일만 가리고 안심하면 옆문이 열려 있습니다.
급한 순서가 다릅니다. 외부 서비스 키는 남이 바로 쓸 수 있고 요금까지 나가므로 가장 급합니다. 우리 서버만 검증하는 값은 접근 경로가 없으면 상대적으로 덜 급합니다. 한꺼번에 다 바꾸다 생기는 사고가 더 클 수도 있습니다.
나누는 편이 좋습니다. 같은 키를 쓰면 개발 중 실수가 운영 데이터에 닿고, 노출됐을 때 영향 범위도 구분되지 않습니다. 나누면 개발 키만 먼저 바꿔 보고 절차를 확인할 수도 있습니다.
채팅이나 메일로 보내면 그 기록이 계속 남습니다. 비밀번호 관리자의 공유 기능이나 한 번만 열리는 링크를 쓰는 편이 낫습니다. 가장 좋은 것은 사람이 값을 아예 볼 필요가 없게 배포가 직접 넣는 구조입니다.
쓰는 클라우드나 배포 도구에 딸린 기능으로 시작하면 대개 충분합니다. 도구를 고르는 것보다 값이 어디어디에 살고 있는지 목록을 만드는 일이 먼저이고, 그 목록이 없으면 어떤 도구를 넣어도 빠지는 곳이 생깁니다.
범위가 애매해도 괜찮습니다
지금 상황만 알려 주시면 필요한 범위와 대략의 규모를 짚어 드립니다.