인증 & 보안 기초
모델 성능보다 먼저 지켜야 하는 것은 데이터 보호와 권한 통제입니다. 보안 기본이 약하면 작은 실수도 큰 사고로 이어집니다.학습 목표
- 인증(Authentication)과 인가(Authorization)를 구분할 수 있습니다.
- OAuth, JWT, API Key 방식의 차이와 적용 기준을 설명할 수 있습니다.
- 비밀정보(API 키, 토큰, 인증서) 관리 원칙을 적용할 수 있습니다.
- RBAC 기반 권한 설계와 로그 보안 기본을 이해합니다.
왜 중요한가
AI/ML 서비스는 외부 API(LLM, 클라우드 GPU, 데이터 파이프라인)를 많이 호출합니다. 키 하나가 유출되면 수백만 원의 비용이 발생하거나, 고객 데이터가 노출될 수 있습니다. 보안은 “나중에 보강”하는 것이 아니라 첫 설계부터 내장해야 합니다.핵심 개념
- 인증(Authentication): “누구인지”를 확인합니다. (예: 로그인, API 키 검증)
- 인가(Authorization): “무엇을 할 수 있는지”를 제한합니다. (예: 읽기만 가능, 관리자 전용)
- 최소 권한(Least Privilege): 필요한 권한만 부여합니다.
- 비밀 관리(Secrets Management): 코드는 공개되어도 비밀은 공개되지 않게 설계합니다.
인증 방식 비교
| 방식 | 동작 원리 | 장점 | 단점 | 적합한 상황 |
|---|---|---|---|---|
| API Key | 고정 문자열을 헤더로 전송 | 구현 간단 | 유출 시 즉시 악용 가능 | 서버 간 내부 통신, PoC |
| JWT | 서명된 토큰에 권한 정보 포함 | 서버 상태 불필요(stateless) | 만료 전 폐기 어려움 | 사용자 인증, 마이크로서비스 |
| OAuth 2.0 | 토큰 발급/갱신 프로토콜 | 제3자 인증 위임 가능 | 구현 복잡도 높음 | 외부 서비스 연동, SSO |
비밀정보 관리
코드에 키를 넣는 순간, Git 히스토리에 영구 기록됩니다. 반드시 분리하세요.실무 기본 원칙
- API 키를 코드/노트북에 하드코딩하지 않습니다.
- 환경별(dev/stage/prod) 키를 분리합니다.
- 로그/모니터링에서 민감정보를 마스킹합니다.
- 키 회전 주기(90일 권장)와 폐기 절차를 운영합니다.
- 미사용 키는 즉시 비활성화합니다.
RBAC(역할 기반 접근 통제) 설계
RBAC는 사용자에게 직접 권한을 주는 대신 역할(Role) 을 부여하고, 역할에 권한을 매핑합니다.| 역할 | 권한 예시 | 대상 |
|---|---|---|
viewer | 모델 결과 조회, 대시보드 열람 | 일반 사용자 |
developer | 모델 배포, 데이터 읽기/쓰기 | 개발자 |
admin | 계정 관리, 정책 변경, 키 발급 | 운영 관리자 |
service-account | 특정 API만 호출 가능 | 자동화 파이프라인 |
로그 보안
로그에 민감정보가 기록되면, 로그 접근권만으로 데이터가 유출됩니다.- API 키, 토큰, 비밀번호는 로그에 절대 기록하지 않습니다.
- 개인정보(이메일, 전화번호)는 마스킹 후 기록합니다.
- 로그 접근 권한을 운영팀으로 제한합니다.
- 로그 보관 기간을 규정에 맞게 설정합니다.
초보자가 자주 만드는 위험 패턴
초보자가 자주 만드는 위험 패턴
.env 파일을 그대로 저장소에 커밋하거나, 공유 채널에 키를 복사해 붙여넣는 실수가 가장 흔합니다.
키 유출은 “발견 즉시 폐기 + 재발급 + 영향 범위 점검”을 즉시 수행해야 합니다.토큰 기반 인증을 쓸 때 최소 체크
토큰 기반 인증을 쓸 때 최소 체크
만료 시간(exp), 발급자(iss), 대상(aud), 서명 검증 여부를 확인하세요.
검증 없는 토큰 파싱은 인증 우회를 허용할 수 있습니다.
JWT의 경우
alg: none 공격을 방지하기 위해 서명 알고리즘을 서버에서 강제하세요.보안 사고 대응 최소 절차
보안 사고 대응 최소 절차
- 노출 경로 차단 2) 키/계정 회수 3) 로그 기반 영향 분석 4) 재발 방지 조치 문서화 순서로 진행합니다. 사고 대응은 속도가 핵심입니다. 발견 후 1시간 이내 키 폐기를 목표로 하세요.
서비스 계정과 사람 계정을 같이 쓰면 안 되는 이유
서비스 계정과 사람 계정을 같이 쓰면 안 되는 이유
사람 계정은 퇴사/이동 시 권한 회수가 필요하고, 서비스 계정은 자동화 파이프라인에 귀속됩니다.
혼용하면 퇴사자 키가 운영 시스템에 남아 보안 사각지대가 됩니다.
체크리스트
- 민감정보가 코드/로그에 노출되지 않나요?
- 권한이 역할(RBAC) 단위로 분리되어 있나요?
- 키 회전과 폐기 절차가 문서화되어 있나요?
- 사고 발생 시 대응 담당/순서가 정의되어 있나요?
.env파일이.gitignore에 포함되어 있나요?- 로그에서 민감정보 마스킹이 적용되고 있나요?
- 미사용 키와 계정을 정기적으로 정리하고 있나요?

