LabHub

블로그

보안 완전 가이드 — Zero Trust·Secret·OAuth·OIDC·Supply Chain·AI 보안 (Season 2 Ep 10, 2025)

들어가며 — 왜 모든 엔지니어가 보안을 알아야 하는가

보안이 "보안 팀만의 일"이라는 착각이 뚫린 이유:

2025년 시니어 엔지니어에게 보안은 "교양"이 아니라 "실무".

이 글은 보안 전문가가 아닌 엔지니어가 알아야 할 것만 담는다.


1부 — Zero Trust 아키텍처

1.1 전통 vs Zero Trust

전통 (성곽 모델): 네트워크 경계 방어. 안에 들어오면 신뢰. Zero Trust: "Never trust, always verify." 네트워크 위치 무관, 모든 요청 검증.

1.2 Zero Trust 5원칙 (NIST 800-207)

  1. 모든 리소스를 "자원"으로 취급
  2. 모든 통신 보안 (네트워크 위치 무관)
  3. 접근은 세션별 승인 (영구 ❌)
  4. 접근 결정은 동적 정책 (ID·기기·위치·시간·행동)
  5. 자산·통신 계속 모니터링

1.3 실전 구현 요소

1.4 VPN의 종말 (2020~)

COVID 이후 "회사 네트워크" 개념 해체. VPN = 한 번 뚫리면 전체 접근 = 적합도 ↓.

교체: Zero Trust + SSO + MFA + 기기 증명 (Device Trust).


2부 — 인증·인가: OAuth 2.1·OIDC

2.1 개념 정리

2.2 OAuth 2.1 (2024 초안)

OAuth 2.0의 "권장 사항"을 의무화한 버전:

2.3 Authorization Code Flow + PKCE (2025 표준)

1. ClientAuthServer: /authorize + code_challenge
2. User 로그인·동의
3. AuthServerClient: auth_code
4. ClientAuthServer: /token + code + code_verifier
5. AuthServer: code_challenge == hash(code_verifier)? → access_token + id_token

PKCE (Proof Key for Code Exchange): Authorization Code 탈취 방어. 공개 클라이언트(SPA, 모바일)에 필수.

2.4 OIDC id_token (JWT)

{
  "iss": "https://auth.example.com",
  "sub": "user_12345",
  "aud": "client_abcdef",
  "exp": 1735689600,
  "iat": 1735686000,
  "email": "alice@example.com",
  "email_verified": true
}

2.5 액세스 토큰 저장

위치장단점
Cookie (HttpOnly, Secure, SameSite)XSS 방어 ✅, CSRF 주의
LocalStorageXSS 취약 ❌
Memory새로고침 시 소실, 안전
BFF 패턴서버가 토큰 보관, 브라우저엔 세션 쿠키

2025 권장: BFF (Backend-for-Frontend) + HttpOnly Cookie. SPA에서 토큰 노출 최소.

2.6 Refresh Token Rotation

Refresh Token을 한 번 사용 → 새 토큰 + 기존 Refresh 무효화. 탈취 감지 가능.


3부 — Secret 관리

3.1 절대 하면 안 되는 것

3.2 Secret 관리 레벨

Level 1: .env + .gitignore (단독 개발) Level 2: .env + dotenv-vault / Doppler (팀) Level 3: Vault / AWS Secrets Manager / GCP Secret Manager (프로덕션) Level 4: Vault + 짧은 TTL 동적 Secret + 회전 자동화

3.3 HashiCorp Vault

# 저장
vault kv put secret/myapp/db password=super-secret

# 조회 (런타임)
vault kv get -field=password secret/myapp/db

# 동적 Secret (DB)
vault write database/config/postgres ...
vault read database/creds/my-role
# → 임시 DB 계정 (TTL 1시간)

강점: 동적 Secret, TTL, 감사 로그.

3.4 SOPS (Secrets OPerationS)

Mozilla가 만든 파일 암호화 도구. Git에 암호화된 Secret을 커밋 가능.

sops -e -i secrets.yaml  # 암호화
# 파일 커밋
sops -d secrets.yaml     # 복호화

장점: GitOps 친화. 단점: 키 관리가 별도.

3.5 Kubernetes Secret은 Secret이 아니다

3.6 AWS KMS / GCP KMS / Azure Key Vault


4부 — Supply Chain 보안

4.1 2020~2024 주요 공격 사례

4.2 SBOM (Software Bill of Materials)

"소프트웨어의 성분표" — 모든 의존성·버전·라이선스 나열.

표준:

생성 도구:

2024 법규: 미국 CISA·EU CRA에서 SBOM 의무화 움직임.

4.3 SLSA (Supply-chain Levels for Software Artifacts)

Google 주도 프레임워크. 빌드 파이프라인 무결성 4단계:

4.4 Sigstore: Cosign·Fulcio·Rekor

# 서명
cosign sign --yes my-registry/my-app:v1.0

# 검증
cosign verify --certificate-identity-regexp=".*" ...

4.5 Dependency Management 기본

  1. Dependabot / Renovate: 자동 PR로 업데이트
  2. SCA 도구 (Snyk, Trivy, Dependency-Check): 알려진 취약점 스캔
  3. Lock 파일 고정: package-lock.json, uv.lock, Cargo.lock
  4. Private Registry: 공격 노출 면 축소
  5. Typosquatting 방어: npm-audit resolver

5부 — Container·Kubernetes 보안

5.1 Container 이미지 보안

5.2 Dockerfile 보안 체크리스트

# 좋은 Dockerfile
FROM cgr.dev/chainguard/python:latest-dev AS builder
# ... 빌드

FROM cgr.dev/chainguard/python:latest
# non-root
USER 1000
# 필요한 포트만
EXPOSE 8080
# HEALTHCHECK
HEALTHCHECK CMD curl -f http://localhost:8080/health || exit 1

5.3 Kubernetes Pod Security Standards (2024~)

PSP (Pod Security Policy) 제거됨. 대체: PSS (Pod Security Standards).

apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

5.4 NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]

Default-deny → 필요한 통신만 명시 허용. Cilium이 L7 NetworkPolicy까지 지원.

5.5 Admission Control (Policy-as-Code)

예시: "모든 Pod은 resources.limits 설정 필수", "latest 태그 금지".

5.6 Service Mesh와 mTLS

Istio, Linkerd, Cilium Service Mesh: Pod 간 통신을 자동 mTLS로. Zero Trust의 Pod-to-Pod 구현.


6부 — Cloud 보안 (AWS 중심)

6.1 IAM 기본 원칙

6.2 S3 보안 체크리스트

6.3 Secrets Scanning

6.4 CSPM (Cloud Security Posture Management)


7부 — OWASP Top 10 (2021) 요약

  1. Broken Access Control: 인가 결함 (IDOR, 권한 상승)
  2. Cryptographic Failures: 약한 암호화, 평문 저장
  3. Injection: SQL·NoSQL·OS·LDAP 주입
  4. Insecure Design: 설계 자체의 결함
  5. Security Misconfiguration: 기본값·잘못된 설정
  6. Vulnerable and Outdated Components: 오래된 라이브러리
  7. Identification and Authentication Failures: 약한 비밀번호·세션
  8. Software and Data Integrity Failures: Supply Chain
  9. Security Logging and Monitoring Failures: 공격 감지 실패
  10. Server-Side Request Forgery (SSRF): 서버가 내부 리소스 접근

7.1 실전 방어


8부 — LLM·AI 보안: OWASP LLM Top 10 (2025)

8.1 10대 위험

  1. Prompt Injection: 악의적 프롬프트로 시스템 조작
  2. Insecure Output Handling: LLM 출력을 그대로 실행
  3. Training Data Poisoning: 학습 데이터 오염
  4. Model Denial of Service: 비용 폭주 공격
  5. Supply Chain: 모델·플러그인 공급망
  6. Sensitive Information Disclosure: 학습 데이터 유출
  7. Insecure Plugin Design: 플러그인/Tool 과권한
  8. Excessive Agency: Agent가 너무 많은 권한
  9. Overreliance: LLM 결과 과신
  10. Model Theft: 모델 추출·재현

8.2 Prompt Injection 방어

# 나쁨: 사용자 입력을 시스템 프롬프트에 직결
system = f"You are a helpful assistant. User said: {user_input}"

# 좋음: 사용자 입력 경계 명확화
messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": user_input},  # SDK가 이스케이프
]

방어 레이어 5가지:

  1. Input Filter: injection 패턴 감지
  2. Structured Output: Function Calling·JSON Schema
  3. Output Filter: 민감 정보·코드 실행 검사
  4. Principle of Least Privilege: Agent Tool 권한 최소
  5. Human-in-the-loop: 중요 액션 승인

8.3 데이터 보호

8.4 Model Safety


9부 — 보안 개발 라이프사이클 (SSDLC)

9.1 Shift-Left 단계

DesignCodeBuildTestDeployOperate
  │       │       │       │       │         │
  ↓       ↓       ↓       ↓       ↓         ↓
Threat  Lint    SBOM    DAST   Signed   Monitor
Model   SAST   Scan    PenTest Image    Logs
                                        SIEM

9.2 각 단계 도구

9.3 CI/CD 보안 파이프라인 예시

# GitHub Actions
- uses: actions/checkout@v4
- run: npm ci
- uses: gitleaks/gitleaks-action@v2      # Secret scan
- uses: github/codeql-action/analyze@v3  # SAST
- uses: aquasecurity/trivy-action@master # SCA + container
- run: npm test
- run: npm run build
- uses: sigstore/cosign-installer@v3     # Sign image

10부 — Incident Response 기본

10.1 NIST SP 800-61 — 4단계

  1. Preparation: 정책·런북·도구·훈련
  2. Detection & Analysis: 감지·분류·범위 파악
  3. Containment, Eradication, Recovery: 격리·제거·복구
  4. Post-Incident Activity: 포스트모템·개선

10.2 흔한 초기 대응 실수

10.3 Blameless Postmortem


11부 — 보안 엔지니어 로드맵 6개월

Month 1: 기초

Month 2: AppSec

Month 3: Cloud/K8s

Month 4: Supply Chain

Month 5: AI 보안

Month 6: IR + 조직


12부 — 보안 체크리스트 12

  1. Zero Trust 5원칙을 안다
  2. Authorization Code + PKCE 흐름을 설명할 수 있다
  3. JWT 검증 시 확인 항목 5가지를 안다
  4. Vault 동적 Secret의 장점을 안다
  5. SBOM의 목적과 표준 2가지를 안다
  6. SLSA 레벨의 의미를 안다
  7. K8s Pod Security Standards 3단계를 안다
  8. S3 보안 체크리스트를 안다
  9. OWASP Top 10 중 3개 이상 방어법을 설명할 수 있다
  10. Prompt Injection 방어 5가지 레이어를 안다
  11. Shift-Left + 각 단계 도구를 안다
  12. Blameless Postmortem 원칙을 안다

13부 — 보안 안티패턴 10

  1. "이건 내부망이라 괜찮아": Zero Trust 위반. 내부도 검증
  2. Git에 .env 커밋 + 나중에 reset: 히스토리엔 남음. 토큰 즉시 회전
  3. Refresh Token 영원히 유효: 탈취 시 피해 극대화. Rotation 필수
  4. Secret을 환경변수 + 로그에 덤프: 로그 수집 시 노출
  5. 의존성 업데이트 미루기: 취약점 축적. Dependabot 활성화
  6. K8s에 root로 실행: 컨테이너 탈출 시 호스트 점령
  7. IAM을 *로 설정: 최소 권한 원칙 위반
  8. 공개 S3 버킷: 2025년에도 매주 사고 뉴스
  9. JWT secret을 env에 평문: HSM 또는 KMS로 보호
  10. LLM 출력을 sanitize 없이 실행: Remote Code Execution 위험

마치며 — 보안은 "일상의 엔지니어링"

보안은 특별한 일이 아니다. 코드 리뷰에서 1줄, 배포 파이프라인에서 1 스텝, 설계 회의에서 1 질문 — 이 작은 것들이 쌓여야 된다.

2025년의 보안은:

"우리 회사는 작아서 괜찮다"는 착각을 버려라. 자동화된 공격자는 규모를 가리지 않는다.


다음 글 예고 — "플랫폼 엔지니어링 완전 가이드: IDP·GitOps·Backstage·Cost·DX"

Season 2 Ep 11은 "개발자의 개발자" 플랫폼 엔지니어링. 다음 글은:

"Golden Path를 만드는 일", 다음 글에서 이어진다.

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다