보안 기초
보안은 선택이 아니라 기본입니다. 코드 한 줄에 API 키를 하드코딩하는 것만으로도 수백만 원의 피해가 발생할 수 있고, 프롬프트 인젝션 하나로 AI 서비스의 신뢰성이 무너질 수 있습니다. 이 문서는 개발자가 반드시 알아야 할 보안의 기본 원칙과, AI/ML 시대에 새롭게 등장한 보안 위협을 다룹니다.학습 목표
- 비밀정보 관리의 단계별 성숙도를 이해하고 적절한 방법을 선택한다
- 최소 권한 원칙을 클라우드 IAM과 서비스에 적용할 수 있다
- 네트워크 보안과 취약점 관리의 기본 도구를 활용한다
- AI/ML 특화 보안 위협(프롬프트 인젝션, 데이터 중독 등)을 이해하고 대비한다
왜 중요한가
보안 사고는 발생 비용이 기하급수적으로 증가합니다. 개발 단계에서 환경변수로 API 키를 관리하는 것은 5분이면 되지만, 유출된 키로 인한 피해 복구에는 수일에서 수주가 걸립니다. 고객 데이터가 유출되면 법적 책임과 신뢰 상실은 측정조차 어렵습니다. AI/ML 분야는 보안 위협이 전통적인 것과 새로운 것이 공존합니다. API 키 유출, 네트워크 침입 같은 전통적 위협에 더해, 프롬프트 인젝션, 모델 탈취, 데이터 중독, PII 유출 같은 AI 특화 위협이 빠르게 늘어나고 있습니다. 두 가지 모두에 대비하는 것이 현대 AI 엔지니어의 필수 역량입니다.비밀정보 관리 단계
비밀정보(API 키, 패스워드, 토큰 등)의 관리는 성숙도 수준에 따라 4단계로 나뉩니다.1단계: 하드코딩 (절대 금지)
2단계: 환경변수 (.env 파일)
3단계: dotenv 라이브러리
4단계: 시크릿 매니저 (프로덕션 권장)
| 단계 | 방법 | 보안 수준 | 적합 상황 |
|---|---|---|---|
| 1 | 하드코딩 | 금지 | 절대 사용하지 않음 |
| 2 | 환경변수 | 기본 | 로컬 개발, 간단한 프로젝트 |
| 3 | dotenv | 기본+ | 팀 개발, .env.example 공유 |
| 4 | 시크릿 매니저 | 높음 | 프로덕션, 키 자동 교체 필요 |
최소 권한 원칙
최소 권한 원칙(Principle of Least Privilege): 모든 사용자와 서비스에 업무 수행에 필요한 최소한의 권한만 부여합니다.구현 방법
Just-In-Time(JIT) Access: 필요한 시점에만 권한을 부여하고, 작업이 끝나면 자동으로 회수하는 방식입니다.
예를 들어, 프로덕션 DB 접근 권한을 영구적으로 부여하지 않고,
장애 대응 시에만 2시간짜리 임시 권한을 발급합니다.
AWS IAM Identity Center, HashiCorp Vault의 Dynamic Secrets가 이를 지원합니다.
안티패턴 vs 올바른 패턴
| 안티패턴 | 올바른 패턴 |
|---|---|
AdministratorAccess 정책 부여 | 필요한 서비스/액션만 명시 |
와일드카드(*) 리소스 | 특정 리소스 ARN 지정 |
| 공유 계정으로 작업 | 개인 계정 + 역할 전환(AssumeRole) |
| 영구 권한 부여 | JIT 접근 + 자동 만료 |
로그 보안
민감정보 마스킹
로그 보안 체크리스트
| 항목 | 설명 |
|---|---|
| PII 필터링 | 이름, 이메일, 전화번호, 주민번호 등 개인정보 마스킹 |
| 접근 통제 | 로그 접근 권한을 운영팀으로 제한 |
| 보관 기간 | 법적 요구사항에 맞게 설정 (보통 90일~1년) |
| 암호화 | 저장 시 암호화(at-rest), 전송 시 TLS(in-transit) |
| 감사 추적 | 누가 언제 로그에 접근했는지 기록 |
네트워크 보안
방화벽
VPN과 제로 트러스트
| 모델 | 설명 | 적합 상황 |
|---|---|---|
| VPN (OpenVPN, WireGuard) | 네트워크 경계 기반 보안 | 소규모 팀, 온프레미스 서버 접근 |
| 제로 트러스트 | 모든 요청을 검증, 네트워크 위치 불신 | 클라우드 네이티브, 분산 팀 |
네트워크 세그멘테이션
취약점 관리
의존성 스캐닝
CVE 이해
**CVE(Common Vulnerabilities and Exposures)**는 공개된 보안 취약점의 고유 식별자입니다.| 항목 | 설명 | 예시 |
|---|---|---|
| CVE ID | 고유 식별자 | CVE-2024-12345 |
| CVSS 점수 | 심각도 (0.0~10.0) | 9.8 (Critical) |
| 영향 범위 | 영향받는 소프트웨어/버전 | requests < 2.32.0 |
| 패치 정보 | 수정 방법 | 2.32.0 이상으로 업데이트 |
SBOM (Software Bill of Materials)
SBOM은 소프트웨어에 포함된 모든 구성요소의 목록입니다.
공급망 공격(Supply Chain Attack)에 대비하고, 특정 CVE가 발생했을 때
영향받는 서비스를 빠르게 식별하기 위해 필수적입니다.
사고 대응
보안 사고 발생 시 체계적인 대응 절차가 준비되어 있어야 합니다.1단계: 탐지 (Detection)
이상 징후를 빠르게 감지합니다.
- 비정상적인 API 호출 패턴 (갑작스러운 트래픽 급증)
- 알 수 없는 IP에서의 접근
- 예상치 못한 비용 증가 (LLM API 과금 폭증)
- 보안 도구의 알림 (WAF, IDS/IPS)
2단계: 격리 (Containment)
피해 확산을 즉시 차단합니다.
- 유출된 API 키 즉시 무효화 (Revoke)
- 침해된 서버 네트워크 격리
- 의심스러운 계정 잠금
- 영향받는 서비스 트래픽 차단
3단계: 분석 (Analysis)
사고의 원인, 범위, 영향을 파악합니다.
- 로그 분석: 언제, 어디서, 어떤 데이터가 접근되었는가
- 타임라인 구성: 사고 발생 시점부터 현재까지 경과
- 영향 범위: 어떤 사용자/데이터/서비스가 영향받았는가
- 근본 원인: 왜 발생했는가 (코드 버그, 설정 오류, 사회공학 등)
4단계: 복구 (Recovery)
시스템을 안전한 상태로 복원합니다.
- 새로운 자격 증명 발급 (모든 키/토큰 교체)
- 취약점 패치 적용
- 시스템 무결성 검증
- 서비스 점진적 복구 (카나리 배포 방식)
- 고객/이해관계자 통보
AI/ML 특화 보안
프롬프트 인젝션 (Prompt Injection)
사용자가 프롬프트를 조작하여 AI 시스템이 의도하지 않은 동작을 하도록 유도하는 공격입니다.직접 프롬프트 인젝션
간접 프롬프트 인젝션
PII 유출 방지
기타 AI/ML 보안 위협
| 위협 | 설명 | 방어 |
|---|---|---|
| 모델 탈취 (Model Theft) | API 반복 호출로 모델 동작을 복제 | Rate Limiting, 워터마킹, 쿼리 이상 탐지 |
| 적대적 공격 (Adversarial Attack) | 입력을 미세 조작하여 잘못된 예측 유도 | 적대적 학습(Adversarial Training), 입력 정규화 |
| 데이터 중독 (Data Poisoning) | 학습 데이터에 악의적 데이터 주입 | 데이터 출처 검증, 이상치 탐지, 데이터 무결성 검사 |
| 멤버십 추론 (Membership Inference) | 특정 데이터가 학습에 사용되었는지 추측 | 차분 프라이버시(Differential Privacy), 정규화 |
Guardrails 구축
Git에 실수로 API 키를 커밋했을 때 대처법
Git에 실수로 API 키를 커밋했을 때 대처법
- 즉시 키 무효화: 해당 API 키를 서비스 대시보드에서 즉시 폐기(revoke)합니다.
- 새 키 발급: 새로운 API 키를 생성하고 환경변수로 설정합니다.
- Git 기록 정리:
git filter-repo로 해당 커밋에서 비밀정보를 제거합니다. - 예방:
pre-commit훅에detect-secrets를 추가하여 커밋 전 자동 검사합니다. 기억하세요: 키 무효화가 최우선입니다. Git 기록 정리보다 키 교체가 먼저입니다.
환경변수 vs 시크릿 매니저: 언제 전환해야 하는가
환경변수 vs 시크릿 매니저: 언제 전환해야 하는가
환경변수만으로 충분한 경우: 로컬 개발, 단일 서버, 소규모 팀.
시크릿 매니저가 필요한 경우: 키 자동 교체(rotation)가 필요할 때, 여러 서비스가 같은 비밀을 공유할 때,
감사 추적(audit trail)이 필요할 때, 프로덕션 환경.
전환 시점: 팀이 3명 이상이거나, 프로덕션 배포를 시작할 때가 적절합니다.
OWASP LLM Top 10이란
OWASP LLM Top 10이란
OWASP(Open Web Application Security Project)는 LLM 애플리케이션의 상위 10대 보안 위험을 정리했습니다:
LLM01: 프롬프트 인젝션, LLM02: 불안전한 출력 처리, LLM03: 학습 데이터 중독,
LLM04: 모델 서비스 거부, LLM05: 공급망 취약점, LLM06: 민감 정보 노출,
LLM07: 불안전한 플러그인 설계, LLM08: 과도한 에이전시, LLM09: 과의존, LLM10: 모델 탈취.
이 목록은 AI 서비스를 구축할 때 보안 체크리스트로 활용하기 좋습니다.
차분 프라이버시(Differential Privacy)란
차분 프라이버시(Differential Privacy)란
학습 데이터에 수학적 노이즈를 추가하여, 모델의 출력으로부터 개별 데이터를 역추론할 수 없게 만드는 기법입니다.
“이 사람의 의료 기록이 학습 데이터에 포함되었는가?”라는 질문에 대해
통계적으로 구분할 수 없도록 보장합니다.
Google의 DP-SGD, Apple의 로컬 차분 프라이버시가 대표적인 구현입니다.
프라이버시와 모델 정확도 사이의 트레이드오프가 존재합니다.
컨테이너 이미지 보안 모범 사례
컨테이너 이미지 보안 모범 사례
비root 실행, 이미지 스캐닝, 시크릿 관리, 최소 권한, 네트워크 격리 등 컨테이너 보안 실천 사항은
컨테이너 기초 — 컨테이너 보안 섹션에서 상세히 다룹니다.
체크리스트
- 비밀정보를 절대 코드에 하드코딩하지 않고, .env 또는 시크릿 매니저를 사용한다
- .env 파일이 .gitignore에 포함되어 있는지 확인할 수 있다
- 최소 권한 원칙을 이해하고 IAM 정책에 적용할 수 있다
- 로그에 민감정보가 포함되지 않도록 마스킹 처리할 수 있다
- 방화벽(UFW/Security Group) 기본 설정을 구성할 수 있다
- pip-audit, npm audit, Trivy 중 하나 이상으로 의존성 취약점을 검사할 수 있다
- 보안 사고 대응 5단계(탐지→격리→분석→복구→회고)를 설명할 수 있다
- 프롬프트 인젝션의 직접/간접 공격 방식과 방어 전략을 이해한다
- LLM 응답에서 PII를 필터링하는 기본 코드를 작성할 수 있다

