์ด ๋ฌธ์๋ ํ๋ก์ ํธ์ ๋ณด์ ์ ์ฑ , ์ทจ์ฝ์ ๋์ ์ ์ฐจ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ ๊ฐ์ด๋๋ผ์ธ์ ์ ์ํฉ๋๋ค. ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ด๋ถ ์ ์ฉ(Internal Only)์ด๋ฉฐ, ๋ชจ๋ ๊ธฐ์ฌ์๋ ์๋์ ๋ณด์ ํ์ค(OWASP, ISMS-P)์ ์ค์ํด์ผ ํฉ๋๋ค.
๋ณด์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ ๊ฒฝ์ฐ, ๊ณต๊ฐ๋ Issue ํธ๋์ปค์ ์ฌ๋ฆฌ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค. ๋์ ์๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ฃผ์ธ์.
- GitHub:
Securityํญ >Report a vulnerability(Private Reporting) โ ๊ถ์ฅ - ์ด๋ฉ์ผ: ๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์์๊ฒ ์ง์ ์ฐ๋ฝ (GitHub ํ๋กํ ์ฐธ์กฐ)
์ฌ๊ฐ๋์ ๋ฐ๋ผ ๋ค์ ๊ธฐํ ๋ด์ ํจ์น๋ฅผ ์๋ฃํด์ผ ํฉ๋๋ค.
| ์ฌ๊ฐ๋ (Severity) | ์ด๊ธฐ ์๋ต | ํด๊ฒฐ ๋ชฉํ (Fix Timeline) | ์์ |
|---|---|---|---|
| Critical | 24์๊ฐ ์ด๋ด | 7์ผ ์ด๋ด | RCE, SQL Injection, ์ธ์ฆ ์ฐํ |
| High | 48์๊ฐ ์ด๋ด | 14์ผ ์ด๋ด | ๋ฏผ๊ฐ ๋ฐ์ดํฐ ๋ ธ์ถ, ๊ถํ ์์น |
| Medium | 3์ผ ์ด๋ด | 30์ผ ์ด๋ด | CSRF, XSS (์ ํ์ ) |
| Low | 7์ผ ์ด๋ด | 90์ผ ์ด๋ด | ๋ณด์ ์ค์ ๋ฏธํก, ์ ๋ณด ๋์ถ(์ฌ์) |
๋ณธ ํ๋ก์ ํธ๋ ๋ค์ ๋ ๊ฐ์ง ์ฃผ์ ๋ณด์ ํ๋ ์์ํฌ๋ฅผ ์ค์ํฉ๋๋ค.
์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ๊ฐ์ฅ ์น๋ช ์ ์ธ 10๊ฐ์ง ์ทจ์ฝ์ ์ ๋ฐฉ์ดํฉ๋๋ค.
- Broken Access Control: ์ต์ ๊ถํ ์์น ์ ์ฉ
- Cryptographic Failures: ๋ชจ๋ ๋ฏผ๊ฐ ์ ๋ณด ์ํธํ (์ ์ก/์ ์ฅ)
- Injection: ์ ๋ ฅ๊ฐ ๊ฒ์ฆ ๋ฐ ํ๋ผ๋ฏธํฐํ๋ ์ฟผ๋ฆฌ ์ฌ์ฉ
๊ตญ๋ด ์ ๋ณด๋ณดํธ ์ธ์ฆ ๊ธฐ์ค์ ์ค์ํ์ฌ ์ด์ํฉ๋๋ค.
- ์ ๊ทผ ํต์ (AC): RBAC ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด, MFA ์ ์ฉ
- ์ํธํ (CR): AES-256 ์ ์ฅ ์ํธํ, TLS 1.2+ ์ ์ก ์ํธํ
- ์ทจ์ฝ์ ๊ด๋ฆฌ (VM): ์ ๊ธฐ์ ์ค์บ ๋ฐ ์์กด์ฑ ์ ๋ฐ์ดํธ
๊ฐ๋ฐ ์ AI ๋๊ตฌ(Cursor)์ ์๋ํ ๋๊ตฌ๊ฐ ์ด ๊ท์น์ ๊ฐ์ ํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ .cursorrules ํ์ผ์ ํตํด AI๊ฐ ๋ณด์ ์ฝ๋ฉ์ ํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
- Cursor๊ฐ ์์ฑํ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ณด์ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค.
- AI์ ์ ์์ด๋ผ๋ ๋ณด์ ์๋ฐฐ ์ฌํญ(ํ๋์ฝ๋ฉ ๋ฑ)์ด ๋ณด์ด๋ฉด ์ฆ์ ๊ฑฐ๋ถํ์ญ์์ค.
๋ค์ ํญ๋ชฉ ๋ฐ๊ฒฌ ์ Code Review์์ ์ฆ์ ๊ฑฐ์ (Reject) ๋ฉ๋๋ค.
- Secret ํ๋์ฝ๋ฉ: API Key, Password, Token์ ์ฝ๋์ ์ง์ ์์ฑ
- HTTP ์ฌ์ฉ: ๋ชจ๋ ํต์ ์
HTTPSํ์ - ๋ก๊ทธ ๋ด ๋ฏผ๊ฐ ์ ๋ณด: ๋น๋ฐ๋ฒํธ, ์ฃผ๋ฏผ๋ฒํธ, ํ ํฐ ๋ฑ์ ๋ง์คํน ์์ด ๋ก๊น
- ๊ฒ์ฆ ์๋ ์
๋ ฅ ์ฌ์ฉ:
eval(),exec()์ฌ์ฉ ๋ฐ SQL String Concat
์์ธํ ์ฝ๋ฉ ํจํด์
.cursorrulesํ์ผ์ ์ฐธ์กฐํ์ธ์.
- Python:
os.getenv()๋ก ํ๊ฒฝ๋ณ์ ํ์ธ,pydantic์ผ๋ก ์ ๋ ฅ ๊ฒ์ฆ - Java:
BCrypt๋ก ๋น๋ฐ๋ฒํธ ํด์ฑ,@Valid์ด๋ ธํ ์ด์ ์ฌ์ฉ - Infra (TF/K8s): S3 ํผ๋ธ๋ฆญ ์ฐจ๋จ, Pod
runAsNonRoot: true์ค์
- IAM: User ์ฌ์ฉ์ ์ง์ํ๊ณ Role ๊ธฐ๋ฐ ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค.
- GitHub Actions: OIDC Provider๋ฅผ ํตํ Role ๊ธฐ๋ฐ ์ธ์ฆ (
github-oidc.tf) - EKS Pod Identity: IRSA ๋์ Pod Identity ์ฌ์ฉ์ผ๋ก ์๋ ์๊ฒฉ ์ฆ๋ช
์ฃผ์
(
pod-identity.tf) - ์ต์ ๊ถํ ์์น: ๊ฐ Role์ ํ์ํ ๊ถํ๋ง ๋ถ์ฌ (S3, EKS ๋ฑ)
- GitHub Actions: OIDC Provider๋ฅผ ํตํ Role ๊ธฐ๋ฐ ์ธ์ฆ (
- 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 ๊ฐ ํต์ ์ ํ
- Pod Security:
- ๋ชจ๋ Pod์
SecurityContextํ์ ์ ์ฉ:securityContext: runAsNonRoot: true readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: drop: ["ALL"]
- Resource Limits:
requests์limits๋ช ์ (๋ ธ์ด์ง ๋ค์ด๋ฒ ๋ฐฉ์ง)
- ๋ชจ๋ Pod์
- Network Policy:
- ๊ธฐ๋ณธ ์ ์ฑ : Deny All
- ํ์ํ Pod ๊ฐ ํต์ ๋ง ๋ช
์์ ์ผ๋ก ํ์ฉ (
k8s/network-policy/)
- RBAC:
- ServiceAccount๋ณ ์ต์ ๊ถํ ๋ถ์ฌ
- ClusterRole ์ฌ์ฉ ์ต์ํ, Namespace-scoped Role ์ฐ์
- Secrets ๊ด๋ฆฌ:
- Kubernetes Secrets ์ํธํ (KMS)
- ๋ฏผ๊ฐ ์ ๋ณด๋ External Secrets Operator ๋๋ AWS Secrets Manager ์ฌ์ฉ
- RBAC: ArgoCD Application๋ณ ์ต์ ๊ถํ ๋ถ์ฌ
- Git Credentials: SSH Key ๋๋ GitHub App Token ์ฌ์ฉ (HTTPS ์ธ์ฆ)
- Sync Policy: ์๋ Sync ๋นํ์ฑํ, ์๋ ์น์ธ ํ ๋ฐฐํฌ
- Source Control: GitOps Repository์ ๋ํ ์ ๊ทผ ์ ์ด ๋ฐ ๊ฐ์ฌ ๋ก๊ทธ
- OIDC ์ธ์ฆ: kubectl ์ ๊ทผ ์ Okta OIDC Provider ์ฌ์ฉ
- MFA ๊ฐ์ : ๋ชจ๋ ๊ด๋ฆฌ์ ๊ณ์ ์ MFA ํ์
- ์ธ์ ๊ด๋ฆฌ: ํ ํฐ ๋ง๋ฃ ์๊ฐ ์ค์ ๋ฐ ์๋ ๊ฐฑ์
- ํฌํธ ๊ด๋ฆฌ: OIDC ๋ก๊ทธ์ธ ์ฝ๋ฐฑ ํฌํธ(8000, 8080) ์ถฉ๋ ๋ฐฉ์ง
- 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 ๋๊ตฌ ํตํฉ
- ์คํ ๋ฆฌ์ง: S3 ๋ฒํท์๋ ์๋ช ์ฃผ๊ธฐ(Lifecycle) ์ ์ฑ ์ ๊ฑธ์ด ์ค๋๋ ๋ก๊ทธ๋ฅผ Glacier๋ก ๋ณด๋ ๋๋ค.
- ์ปดํจํ : ๊ฐ๋ฐ(Dev) ํ๊ฒฝ์ ๊ฐ๋ฅํ Spot Instance๋ฅผ ํ์ฉํฉ๋๋ค.
- ์ญ์ : ์ฌ์ฉํ์ง ์๋ ๋ฆฌ์์ค(EIP, EBS, LB)๋ ์ฆ์ ์ญ์ ํฉ๋๋ค.
PR ์์ฑ ๋ฐ ๋ฐฐํฌ ์ ๋ค์ ํญ๋ชฉ์ ํ์ธํด ์ฃผ์ธ์.
-
.envํ์ผ์ด๋ ์ํฌ๋ฆฟ ํค๊ฐ ์ปค๋ฐ์ ํฌํจ๋์ง ์์๋๊ฐ? - ์ ๋ ฅ๊ฐ ๊ฒ์ฆ(Validation) ๋ก์ง์ด ์กด์ฌํ๋๊ฐ?
- ๋ถํ์ํ ๋๋ฒ๊ทธ ๋ก๊ทธ(
console.log,print)๋ฅผ ์ ๊ฑฐํ๋๊ฐ?
- CI/CD ํ์ดํ๋ผ์ธ์ ๋ณด์ ์ค์บ(Trivy/Snyk)์ ํต๊ณผํ๋๊ฐ?
- ๋ณ๊ฒฝ๋ ์ธํ๋ผ(Terraform)๊ฐ ํผ๋ธ๋ฆญ ์ ๊ทผ์ ํ์ฉํ์ง ์๋๊ฐ?
- DB ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฐ์ดํฐ ๋ฐฑ์ ๋์ฑ ์ด ์๋๊ฐ?
- OWASP Top 10
- ํ๋ก์ ํธ .cursorrules ์ค์ ํ์ผ
- AWS Well-Architected Framework - Security Pillar
- Kubernetes Security Best Practices
- GitHub Security Best Practices
Last Updated: 2026-03-09 Maintainer: DevSecOps