SSH 키와 인증서를 안전하게 팀과 공유하는 법
SSH 키, SSL 인증서, 배포 키를 팀원에게 안전하게 전달하는 방법. 위험한 공유 방식과 비밀 메모를 활용한 안전한 대안을 비교합니다.
SSH 키와 인증서를 안전하게 팀과 공유하는 법
"SSH 키 슬랙으로 보내줘." 개발팀에서 흔히 듣는 말입니다. 서버 접속이 급하고, 새로운 팀원이 환경 설정을 해야 하고, 배포가 코앞인데 키가 없으면 당장 일이 멈춥니다.
하지만 이 한마디가 심각한 보안 사고의 시작이 될 수 있습니다.
SSH 키 공유가 특별히 위험한 이유
SSH 키는 일반적인 비밀번호와 다릅니다. 서버에 대한 완전한 접근 권한을 부여합니다.
| 비밀번호 vs SSH 키 | 비밀번호 | SSH 키 |
|---|---|---|
| 권한 범위 | 특정 계정 | 서버 전체 |
| 유출 시 영향 | 해당 계정 | 서버 내 모든 데이터 |
| 변경 용이성 | 즉시 변경 가능 | 키 재생성 + 모든 서버 업데이트 필요 |
| 이중 인증 | 가능 | 키 자체가 인증 |
SSH 키가 유출되면 서버의 모든 데이터, 코드, 데이터베이스에 접근할 수 있습니다. 이것은 비밀번호 하나가 유출되는 것과는 차원이 다른 문제입니다.
팀에서 SSH 키를 공유해야 하는 상황
현실적으로 공유가 필요한 경우는 분명히 있습니다.
- 공용 서버 접속: 팀원 모두가 접근해야 하는 스테이징/프로덕션 서버
- 배포 키: CI/CD 파이프라인에서 사용하는 배포용 키
- SSL 인증서: 웹 서버의 인증서 갱신 시 담당자 변경
- API 시크릿: 서드파티 서비스 연동에 필요한 인증 정보
- 데이터베이스 접속 정보: 긴급 장애 대응 시
위험한 공유 방법들
1. 슬랙/디스코드 DM
메신저 채팅 기록은 서버에 영구 저장됩니다. 검색 기능으로 누구나 "ssh" 또는 "key"를 검색하면 과거에 공유한 키를 찾을 수 있습니다. 퇴사한 직원의 계정에도 기록이 남아 있습니다.
2. 이메일
이메일 서버에 영구 보관되고, 전달 한 번이면 통제 불가능합니다. 메일 서버 침해 시 모든 키가 한번에 유출됩니다.
3. 공유 Google Drive/Notion
접근 권한을 세밀하게 관리하기 어렵고, 파일이 동기화되면 로컬 기기에도 복사본이 남습니다. 팀원이 떠날 때 모든 복사본을 회수하는 것은 사실상 불가능합니다.
4. Git 저장소에 커밋
가장 위험한 방법입니다. Git 히스토리에 영구적으로 남으며, 파일을 삭제해도 히스토리에서 복구할 수 있습니다. 공개 저장소라면 전 세계에 노출됩니다.
안전한 공유 방법
방법 1: LOCK.PUB 비밀 메모 (일회성 전달에 최적)
키를 한 번 전달해야 할 때 가장 실용적인 방법입니다.
1. LOCK.PUB에서 비밀 메모 생성
2. SSH 키 또는 인증서 내용을 붙여넣기
3. 강력한 비밀번호 설정
4. 만료 기간을 최소한으로 설정 (1-4시간)
5. 링크를 슬랙으로, 비밀번호를 전화로 전달
6. 수신자가 키를 로컬에 저장한 후 링크 만료
장점:
- 서버에 평문으로 키가 저장되지 않음
- 만료 후 접근 불가
- 채팅 기록에 키 원문이 남지 않음
방법 2: 시크릿 매니저 (팀 규모가 클 때)
HashiCorp Vault, AWS Secrets Manager, Google Secret Manager 등 전문 도구를 사용합니다.
- 접근 제어와 감사 로그 제공
- 자동 키 순환 가능
- 비용과 설정 복잡성이 단점
방법 3: SSH 인증서 기관 (장기적 해결책)
공유 키 대신 SSH 인증서 기관(CA)을 운영하여 각 사용자에게 개별 인증서를 발급합니다.
- 키 공유 자체가 불필요해짐
- 사용자별 접근 권한 관리 가능
- 초기 설정 비용이 높음
방법 4: 개인별 키 발급 (가장 권장)
가능하다면 공유 키 대신 개인별 키를 발급하는 것이 가장 안전합니다.
원칙: 공유 키 < 개인별 키
공유 키가 유출되면 → 팀 전체가 영향
개인 키가 유출되면 → 해당 사용자만 영향
반드시 공유해야 할 때의 체크리스트
개인별 키가 불가능하고 반드시 공유해야 한다면, 다음을 지키세요.
전달 전
- 키의 권한 범위를 최소한으로 설정했는가?
- 읽기 전용 키로 충분하지 않은가?
- IP 제한을 걸 수 있는가?
전달 시
- 키와 비밀번호를 다른 채널로 전달하는가?
- 만료 기간을 가능한 짧게 설정했는가?
- 수신자가 확인한 후 원본을 삭제할 수 있는가?
전달 후
- 수신자가 키를 안전하게 저장했는지 확인
- 공유 링크/메모가 만료되었는지 확인
- 키 사용 로그를 모니터링
키 순환 일정
SSH 키를 정기적으로 교체하면, 유출된 키의 유효 기간을 제한할 수 있습니다.
| 키 유형 | 권장 순환 주기 |
|---|---|
| 프로덕션 서버 키 | 90일 |
| 배포 키 | 90일 |
| SSL 인증서 | 갱신 시마다 |
| API 시크릿 | 90일 |
| 개발/스테이징 키 | 180일 |
DevOps 팀을 위한 보안 체크리스트
- 모든 서버에 개인별 SSH 키를 사용하는가?
- 공유 키가 존재한다면 IP 제한이 설정되어 있는가?
- 퇴사자의 키는 즉시 비활성화되는가?
- 키 순환 일정이 수립되어 있는가?
- SSH 키가 Git 저장소에 커밋된 적이 없는가?
- 채팅 기록에 키가 평문으로 남아 있지 않은가?
- 비밀 정보 전달 시 만료가 설정된 채널을 사용하는가?
정리
SSH 키와 인증서는 서버 보안의 핵심입니다. 슬랙 DM이나 이메일로 보내는 것은 집 열쇠를 게시판에 붙여놓는 것과 같습니다. 가능하면 개인별 키를 발급하고, 반드시 공유해야 할 때는 만료 설정이 있는 비밀 메모를 활용하세요.
지금 바로 비밀 메모를 만들어 SSH 키를 안전하게 전달하세요.