Skip to content

Security: Twodragon0/tech-blog

SECURITY.md

๐Ÿ›ก๏ธ Security Policy & Guidelines

์ด ๋ฌธ์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ณด์•ˆ ์ •์ฑ…, ์ทจ์•ฝ์  ๋Œ€์‘ ์ ˆ์ฐจ, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋‚ด๋ถ€ ์ „์šฉ(Internal Only)์ด๋ฉฐ, ๋ชจ๋“  ๊ธฐ์—ฌ์ž๋Š” ์•„๋ž˜์˜ ๋ณด์•ˆ ํ‘œ์ค€(OWASP, ISMS-P)์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿšจ 1. ์ทจ์•ฝ์  ์‹ ๊ณ  ๋ฐ ๋Œ€์‘ (Vulnerability Reporting)

๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๊ฒฝ์šฐ, ๊ณต๊ฐœ๋œ Issue ํŠธ๋ž˜์ปค์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์•„๋ž˜ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์ฃผ์„ธ์š”.

์‹ ๊ณ  ์ฑ„๋„

  • GitHub: Security ํƒญ > Report a vulnerability (Private Reporting) โ€” ๊ถŒ์žฅ
  • ์ด๋ฉ”์ผ: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ง์ ‘ ์—ฐ๋ฝ (GitHub ํ”„๋กœํ•„ ์ฐธ์กฐ)

๋Œ€์‘ ํƒ€์ž„๋ผ์ธ (SLA)

์‹ฌ๊ฐ๋„์— ๋”ฐ๋ผ ๋‹ค์Œ ๊ธฐํ•œ ๋‚ด์— ํŒจ์น˜๋ฅผ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ฌ๊ฐ๋„ (Severity) ์ดˆ๊ธฐ ์‘๋‹ต ํ•ด๊ฒฐ ๋ชฉํ‘œ (Fix Timeline) ์˜ˆ์‹œ
Critical 24์‹œ๊ฐ„ ์ด๋‚ด 7์ผ ์ด๋‚ด RCE, SQL Injection, ์ธ์ฆ ์šฐํšŒ
High 48์‹œ๊ฐ„ ์ด๋‚ด 14์ผ ์ด๋‚ด ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ, ๊ถŒํ•œ ์ƒ์Šน
Medium 3์ผ ์ด๋‚ด 30์ผ ์ด๋‚ด CSRF, XSS (์ œํ•œ์ )
Low 7์ผ ์ด๋‚ด 90์ผ ์ด๋‚ด ๋ณด์•ˆ ์„ค์ • ๋ฏธํก, ์ •๋ณด ๋ˆ„์ถœ(์‚ฌ์†Œ)

๐Ÿ”’ 2. ๋ณด์•ˆ ํ‘œ์ค€ (Security Standards)

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ OWASP Top 10 (2025 ๊ธฐ์ค€)

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ 10๊ฐ€์ง€ ์ทจ์•ฝ์ ์„ ๋ฐฉ์–ดํ•ฉ๋‹ˆ๋‹ค.

  • Broken Access Control: ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ
  • Cryptographic Failures: ๋ชจ๋“  ๋ฏผ๊ฐ ์ •๋ณด ์•”ํ˜ธํ™” (์ „์†ก/์ €์žฅ)
  • Injection: ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ์ฟผ๋ฆฌ ์‚ฌ์šฉ

๐Ÿ›๏ธ ISMS-P (์ •๋ณด๋ณดํ˜ธ ๊ด€๋ฆฌ์ฒด๊ณ„)

๊ตญ๋‚ด ์ •๋ณด๋ณดํ˜ธ ์ธ์ฆ ๊ธฐ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ ‘๊ทผ ํ†ต์ œ (AC): RBAC ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด, MFA ์ ์šฉ
  • ์•”ํ˜ธํ™” (CR): AES-256 ์ €์žฅ ์•”ํ˜ธํ™”, TLS 1.2+ ์ „์†ก ์•”ํ˜ธํ™”
  • ์ทจ์•ฝ์  ๊ด€๋ฆฌ (VM): ์ •๊ธฐ์  ์Šค์บ” ๋ฐ ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ

๐Ÿ’ป 3. ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ (Development Guidelines)

๊ฐœ๋ฐœ ์‹œ AI ๋„๊ตฌ(Cursor)์™€ ์ž๋™ํ™” ๋„๊ตฌ๊ฐ€ ์ด ๊ทœ์น™์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค– AI Coding Assistant (.cursorrules)

์ด ํ”„๋กœ์ ํŠธ๋Š” .cursorrules ํŒŒ์ผ์„ ํ†ตํ•ด AI๊ฐ€ ๋ณด์•ˆ ์ฝ”๋”ฉ์„ ํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Cursor๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ณด์•ˆ ์ •์ฑ…์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • AI์˜ ์ œ์•ˆ์ด๋ผ๋„ ๋ณด์•ˆ ์œ„๋ฐฐ ์‚ฌํ•ญ(ํ•˜๋“œ์ฝ”๋”ฉ ๋“ฑ)์ด ๋ณด์ด๋ฉด ์ฆ‰์‹œ ๊ฑฐ๋ถ€ํ•˜์‹ญ์‹œ์˜ค.

๐Ÿšซ ์ ˆ๋Œ€ ๊ธˆ์ง€ ์‚ฌํ•ญ (Prohibited)

๋‹ค์Œ ํ•ญ๋ชฉ ๋ฐœ๊ฒฌ ์‹œ Code Review์—์„œ ์ฆ‰์‹œ ๊ฑฐ์ ˆ(Reject) ๋ฉ๋‹ˆ๋‹ค.

  1. Secret ํ•˜๋“œ์ฝ”๋”ฉ: API Key, Password, Token์„ ์ฝ”๋“œ์— ์ง์ ‘ ์ž‘์„ฑ
  2. HTTP ์‚ฌ์šฉ: ๋ชจ๋“  ํ†ต์‹ ์€ HTTPS ํ•„์ˆ˜
  3. ๋กœ๊ทธ ๋‚ด ๋ฏผ๊ฐ ์ •๋ณด: ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ํ† ํฐ ๋“ฑ์„ ๋งˆ์Šคํ‚น ์—†์ด ๋กœ๊น…
  4. ๊ฒ€์ฆ ์—†๋Š” ์ž…๋ ฅ ์‚ฌ์šฉ: eval(), exec() ์‚ฌ์šฉ ๋ฐ SQL String Concat

๐Ÿ”‘ ์ฃผ์š” ์–ธ์–ด๋ณ„ ๋ณด์•ˆ ์ˆ˜์น™

์ž์„ธํ•œ ์ฝ”๋”ฉ ํŒจํ„ด์€ .cursorrules ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • Python: os.getenv()๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ™•์ธ, pydantic์œผ๋กœ ์ž…๋ ฅ ๊ฒ€์ฆ
  • Java: BCrypt๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ, @Valid ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ
  • Infra (TF/K8s): S3 ํผ๋ธ”๋ฆญ ์ฐจ๋‹จ, Pod runAsNonRoot: true ์„ค์ •

โ˜๏ธ 4. ์ธํ”„๋ผ ๋ณด์•ˆ (Infrastructure Security)

๐Ÿ” AWS Best Practices

  • IAM: User ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๊ณ  Role ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • GitHub Actions: OIDC Provider๋ฅผ ํ†ตํ•œ Role ๊ธฐ๋ฐ˜ ์ธ์ฆ (github-oidc.tf)
    • EKS Pod Identity: IRSA ๋Œ€์‹  Pod Identity ์‚ฌ์šฉ์œผ๋กœ ์ž๋™ ์ž๊ฒฉ ์ฆ๋ช… ์ฃผ์ž… (pod-identity.tf)
    • ์ตœ์†Œ ๊ถŒํ•œ ์›์น™: ๊ฐ Role์€ ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ (S3, EKS ๋“ฑ)
  • S3 ๋ณด์•ˆ:
    • server_side_encryption = "AES256" ํ•„์ˆ˜
    • block_public_acls = true, block_public_policy = true ์„ค์ •
    • ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ •์ฑ… ์ ์šฉ
  • EKS ๋ณด์•ˆ:
    • GuardDuty: Control Plane ๋กœ๊น… ๋Œ€์‹  AWS GuardDuty๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EKS ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง (๋น„์šฉ ์ตœ์ ํ™”)
    • Secrets Encryption ํ™œ์„ฑํ™” (KMS)
    • Network Policy๋กœ Pod ๊ฐ„ ํ†ต์‹  ์ œํ•œ

โ˜ธ๏ธ Kubernetes (EKS) Security

  • Pod Security:
    • ๋ชจ๋“  Pod์— SecurityContext ํ•„์ˆ˜ ์ ์šฉ:
      securityContext:
        runAsNonRoot: true
        readOnlyRootFilesystem: true
        allowPrivilegeEscalation: false
        capabilities:
          drop: ["ALL"]
    • Resource Limits: requests์™€ limits ๋ช…์‹œ (๋…ธ์ด์ง€ ๋„ค์ด๋ฒ„ ๋ฐฉ์ง€)
  • Network Policy:
    • ๊ธฐ๋ณธ ์ •์ฑ…: Deny All
    • ํ•„์š”ํ•œ Pod ๊ฐ„ ํ†ต์‹ ๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ (k8s/network-policy/)
  • RBAC:
    • ServiceAccount๋ณ„ ์ตœ์†Œ ๊ถŒํ•œ ๋ถ€์—ฌ
    • ClusterRole ์‚ฌ์šฉ ์ตœ์†Œํ™”, Namespace-scoped Role ์šฐ์„ 
  • Secrets ๊ด€๋ฆฌ:
    • Kubernetes Secrets ์•”ํ˜ธํ™” (KMS)
    • ๋ฏผ๊ฐ ์ •๋ณด๋Š” External Secrets Operator ๋˜๋Š” AWS Secrets Manager ์‚ฌ์šฉ

๐Ÿ”„ ArgoCD ๋ณด์•ˆ

  • RBAC: ArgoCD Application๋ณ„ ์ตœ์†Œ ๊ถŒํ•œ ๋ถ€์—ฌ
  • Git Credentials: SSH Key ๋˜๋Š” GitHub App Token ์‚ฌ์šฉ (HTTPS ์ธ์ฆ)
  • Sync Policy: ์ž๋™ Sync ๋น„ํ™œ์„ฑํ™”, ์ˆ˜๋™ ์Šน์ธ ํ›„ ๋ฐฐํฌ
  • Source Control: GitOps Repository์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๊ฐ์‚ฌ ๋กœ๊ทธ

๐Ÿ”‘ Okta ํ†ตํ•ฉ ๋ณด์•ˆ

  • OIDC ์ธ์ฆ: kubectl ์ ‘๊ทผ ์‹œ Okta OIDC Provider ์‚ฌ์šฉ
  • MFA ๊ฐ•์ œ: ๋ชจ๋“  ๊ด€๋ฆฌ์ž ๊ณ„์ •์— MFA ํ•„์ˆ˜
  • ์„ธ์…˜ ๊ด€๋ฆฌ: ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ • ๋ฐ ์ž๋™ ๊ฐฑ์‹ 
  • ํฌํŠธ ๊ด€๋ฆฌ: OIDC ๋กœ๊ทธ์ธ ์ฝœ๋ฐฑ ํฌํŠธ(8000, 8080) ์ถฉ๋Œ ๋ฐฉ์ง€

๐Ÿ›ก๏ธ GitHub Security

  • Branch Protection: main ๋ธŒ๋žœ์น˜์— ํ•„์ˆ˜ ์„ค์ •
    • Require pull request reviews (์ตœ์†Œ 1๋ช…)
    • Require status checks to pass before merging
    • Require branches to be up to date before merging
  • Secret Scanning: GitHub Advanced Security ํ™œ์„ฑํ™”
    • Dependabot alerts ์ž๋™ ์ƒ์„ฑ
    • Secret scanning ๊ฒฐ๊ณผ ์ฆ‰์‹œ ์•Œ๋ฆผ
  • Dependabot: ์ž๋™ ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ ๋ฐ ์ทจ์•ฝ์  ์•Œ๋ฆผ
  • Code Scanning: GitHub CodeQL ๋˜๋Š” ์™ธ๋ถ€ SAST ๋„๊ตฌ ํ†ตํ•ฉ

๐Ÿ’ฐ ๋น„์šฉ ์ตœ์ ํ™” (FinOps)

  • ์Šคํ† ๋ฆฌ์ง€: S3 ๋ฒ„ํ‚ท์—๋Š” ์ˆ˜๋ช… ์ฃผ๊ธฐ(Lifecycle) ์ •์ฑ…์„ ๊ฑธ์–ด ์˜ค๋ž˜๋œ ๋กœ๊ทธ๋ฅผ Glacier๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์ปดํ“จํŒ…: ๊ฐœ๋ฐœ(Dev) ํ™˜๊ฒฝ์€ ๊ฐ€๋Šฅํ•œ Spot Instance๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ญ์ œ: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค(EIP, EBS, LB)๋Š” ์ฆ‰์‹œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

โœ… 5. ๋ฐฐํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Checklist)

PR ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ ์ „ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.

๐Ÿ”ด Pre-Commit (๊ฐœ๋ฐœ์ž ํ™•์ธ)

  • .env ํŒŒ์ผ์ด๋‚˜ ์‹œํฌ๋ฆฟ ํ‚ค๊ฐ€ ์ปค๋ฐ‹์— ํฌํ•จ๋˜์ง€ ์•Š์•˜๋Š”๊ฐ€?
  • ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ(Validation) ๋กœ์ง์ด ์กด์žฌํ•˜๋Š”๊ฐ€?
  • ๋ถˆํ•„์š”ํ•œ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ(console.log, print)๋ฅผ ์ œ๊ฑฐํ–ˆ๋Š”๊ฐ€?

๐ŸŸ  Pre-Deployment (๋ฐฐํฌ ์ „ ํ™•์ธ)

  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ณด์•ˆ ์Šค์บ”(Trivy/Snyk)์„ ํ†ต๊ณผํ–ˆ๋Š”๊ฐ€?
  • ๋ณ€๊ฒฝ๋œ ์ธํ”„๋ผ(Terraform)๊ฐ€ ํผ๋ธ”๋ฆญ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๊ฐ€?
  • DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋Œ€์ฑ…์ด ์žˆ๋Š”๊ฐ€?

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ


Last Updated: 2026-03-09 Maintainer: DevSecOps

There arenโ€™t any published security advisories