DevSecOps Hub๋ CI/CD ํ์ดํ๋ผ์ธ์์ ์์ฑ๋๋ ์ ์ ๋ถ์(SAST), ๋์ ๋ถ์(DAST), ์คํ์์ค ์ทจ์ฝ์ ๋ถ์(SCA) ๊ฒฐ๊ณผ๋ฅผ ์ค์์์ ์์งํ๊ณ ์ ๊ทํํ์ฌ ์ ์ฅํ๊ณ , ์ทจ์ฝ์ ์ ์ฐ์ ์์ํ, ์กฐ์น, ๊ฒ์ฆ, ์ฌ๋ฐ ๋ฐฉ์ง, ๊ฐ์ฌ ๋์๊น์ง ์ํํ๋ ํตํฉ ๋ณด์ ์ด์ ํ๋ซํผ์ ๋๋ค.
์ฌ๋ฌ๊ฐ์ ๋ณด์๋๊ตฌ๋ฅผ ๋์ ํ ๊ฐ๋ฐํ๊ฒฝ์์ ๋ณด์ ๋๊ตฌ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๋์ํ์ฌ ๊ฒฐ๊ณผ๊ฐ ๋ถ์ฐ๋๊ณ , ์ทจ์ฝ์ ์ด ํ์ง ๋จ๊ณ์์ ๋ฉ์ถ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ก ์ธํด ์ฐ์ ์์ ํ๋จ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด, ์กฐ์น๊ฐ ์ง์ฐ๋๊ณ ์ด์์ ์ฐจ์ง์ด ์๊ธฐ๋ ์ํฉ์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
DevSecOps Hub๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณด์ ์ค์บ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ํตํฉํ๊ณ , ์ทจ์ฝ์ ๋ผ์ดํ์ฌ์ดํด ๊ธฐ๋ฐ์ ์ด์ ์ฒด๊ณ๋ฅผ ๋์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌ ํ,
๋ถ์ โ ์ฐ์ ์์ํ โ ์กฐ์น โ ๊ฒ์ฆ โ ์ข
๋ฃ๊น์ง ์ผ๊ด๋ ํ๋ฆ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
๋ํ Policy Engine์ ๋์ ํ์ฌ ์๋น์ค์์์ ์ํฅ๋๋ฅผ ๋ฐ์ํ ์ฐ์ ์์ํ๊ฐ ์ด๋ฃจ์ด์ง๋ฉฐ, AI ๋ถ์ ์์คํ ์ ํตํด ์ทจ์ฝ์ ์ค๋ช , ๊ณต๊ฒฉ ์๋๋ฆฌ์ค, ์์ ๊ฐ์ด๋๋ฅผ ์๋์ผ๋ก ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ณด์ ์กฐ์น๋ฅผ ์ํํ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ ์ด์ ๋ฐ์ดํฐ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ฌ, RDS(MySQL)์๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , S3์๋ ์๋ณธ ๋ฆฌํฌํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฑ๋ฅ, ํ์ฅ์ฑ, ๋ณด์์ฑ์ ๋์์ ํ๋ณดํฉ๋๋ค.
DevSecOps Hub๋ ์ทจ์ฝ์ ์ ์ ์์ ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ณด์ ํ๋์ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์์ฐ์ค๋ฝ๊ฒ ํตํฉํ๋ ์ค์ ์ง์คํ DevSecOps ์ด์ ํ๋ซํผ์ ์งํฅํฉ๋๋ค.
- ๊ฐ์
- ์ฌ์ฉ ๋ฐฉ๋ฒ
- 1. ๋ฌธ์ ์ ์
- 2. ์์คํ ๋ชฉํ
- 3. ์ํคํ ์ฒ ๊ฐ์
- 4. ๋ฐ์ดํฐ ํ๋ฆ
- 5. Policy Engine
- 6. ์ทจ์ฝ์ Lifecycle
- 7. ์คํ ๋ฆฌ์ง ๋ฐ ์ธํ๋ผ ๊ตฌ์กฐ
- 8. ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ
- 9. ๊ฐ์ฌ ๋ก๊ทธ ์ค๊ณ
- 10. ๋ณด์ ์ค๊ณ ์์น
DevSecOps ํ๊ฒฝ์์ ๋ณด์ ๋๊ตฌ๋ฅผ ๋์ ํ๋๋ผ๋, ์ด์ ๋จ๊ณ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
- CI ๋ก๊ทธ์๋ง ์กด์ฌํ๊ฑฐ๋,
- HTML ๋๋ JSON ํ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ ์ฅ๋๊ฑฐ๋,
- ๊ฐ๋ณ ์คํ ๊ฒฐ๊ณผ๋ก๋ง ์กด์ฌํ๋ ๋ฑ ๋ถ์ฐ๋์ด ์กด์ฌํฉ๋๋ค.
- ๋๊ฐ ์ด๋ค ์ทจ์ฝ์ ์ ์ธ์ ์์ ํด์ผ ํ๋์ง ๋ช ํํ์ง ์์ต๋๋ค.
- ์ฌ๊ฐ๋์ ์ค์ ์ฐ์ ์์๊ฐ ์ผ์นํ์ง ์์ต๋๋ค.
- ์์ ์ด ์ง์ฐ๋๊ฑฐ๋ ๋๋ฝ๋๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
- ์ํ ๋ณ๊ฒฝ ์ด๋ ฅ์ด ๊ธฐ๋ก๋์ง ์์ต๋๋ค.
- ๊ฒ์ฆ ๋ฐ ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ฐ์ฌ ๋์ ์ ์ฆ๋น ํ๋ณด๊ฐ ์ด๋ ต์ต๋๋ค.
- ๋๊ตฌ๋ณ ๊ฒฐ๊ณผ ํฌ๋งท์ด ์์ดํฉ๋๋ค.
- ์ทจ์ฝ์ ์ดํด์ ์์ ์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
- ๋ณด์ํ ์์กด๋๊ฐ ์ง๋์น๊ฒ ๋์์ง ์ ์์ต๋๋ค.
DevSecOps Hub๋ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ ์ ๋ต์ ํ์ฉํฉ๋๋ค.
- ์ค์ ์์ง: ๋ค์ํ ๋ณด์ ๋๊ตฌ์ ๊ฒฐ๊ณผ๋ฅผ ์ผ๊ด๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ ๊ทํ
- ์ด์ ์ฒด๊ณํ: ์ทจ์ฝ์ Lifecycle ๊ด๋ฆฌ, ์ด๋ ฅ ๊ด๋ฆฌ ์ ๊ณต
- ๊ฐ๋ฐ์ ์ง์: AI ๊ธฐ๋ฐ ์ค๋ช , ์์ ๊ฐ์ด๋, ์ฝ๋ ์์ ์ ๊ณต
- ๊ฐ์ฌ ๋์์ฑ ํ๋ณด: ์ํ ๋ณ๊ฒฝ, ์ฌ์ฉ์ ํ์, ์ ์ฅ ์์น ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ ์๋ณธ ์ถ์ ์ฑ ํ๋ณด
[CI/CD ํ์ดํ๋ผ์ธ]
(GitHub Actions + ๋ณด์ ์ค์บ ๋๊ตฌ)
โ
[๋ฐ์ดํฐ ์์ง API]
(FastAPI ์์ง ์๋ํฌ์ธํธ)
โ
[๋ฐ์ดํฐ ํ์ฑ & ์ ๊ทํ]
(Semgrep/ZAP/pip-audit ๊ฒฐ๊ณผ ํตํฉ)
โ
[๋ฐ์ดํฐ ์ ์ฅ]
(MySQL DB & AWS S3 ์๋ณธ ์ ์ฅ)
โ
[๋ณด์ ๋ถ์ ๋ฐ ๊ฐ์ฌ ์๋น์ค]
(AI ์กฐ์น ๊ฐ์ด๋ ์์ฑ & ๊ฐ์ฌ ๋ก๊ทธ)
โ
[๋ณด์ ํตํฉ ๋์๋ณด๋]
(์ทจ์ฝ์ ๊ด๋ฆฌ ๋ฐ ์ค์๊ฐ ํต๊ณ)
- Shift-Left ๋ณด์ ์ ์ฉ: ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ Pushํ๊ฑฐ๋ Pull Request๋ฅผ ์์ฑํ๋ ์์ ์ CI/CD ํ์ดํ๋ผ์ธ์ด ์๋์ผ๋ก ์คํ๋ฉ๋๋ค.
- ๋ณด์ ๋๊ตฌ ํตํฉ ์คํ:
- SAST: Semgrep
- DAST: OWASP ZAP
- SCA: pip-audit
- ์๋ํ๋ ๋ณด์ ๊ฒ์ฆ ๋จ๊ณ๋ฅผ ํตํด ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ์ทจ์ฝ์ ์ ์กฐ๊ธฐ์ ํ์งํฉ๋๋ค.
- ๊ฒ์ฌ ๊ฒฐ๊ณผ ์ ์ก: ํ์ดํ๋ผ์ธ ์ข ๋ฃ ์์ ์ ์์ฑ๋ JSON ๊ฒฐ๊ณผ๋ฅผ DevSecOps Hub์ Ingestion API๋ก ์ ์กํฉ๋๋ค.
- API ์ธ์ฆ: ์น์ธ๋ CI/CD ํ์ดํ๋ผ์ธ๋ง ๊ฒฐ๊ณผ๋ฅผ ์ ์กํ ์ ์๋๋ก ํ๋ก์ ํธ๋ณ API Token ์ธ์ฆ์ ์ ์ฉํฉ๋๋ค.
- ํด๋ผ์ฐ๋ ์ ๊ทผ ์ธ์ฆ ๋ถ๋ฆฌ: AWS S3 ์ ๋ก๋์ ๊ฐ์ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค ์ ๊ทผ์ GitHub Actions์ OIDC ๊ธฐ๋ฐ IAM Role Assume ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ค์๊ฐ ์ฒ๋ฆฌ: ์์ ๋ ๊ฒฐ๊ณผ๋ ์ฆ์ ์ ๊ทํ ํ์ดํ๋ผ์ธ์ผ๋ก ์ ๋ฌ๋๋ฉฐ, ํ์ ์ ์๋ฆผ๊ณผ ํ์ ์กฐ์น ํ๋ก์ธ์ค๋ฅผ ๋ฐ์กํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ :
- ๋๊ตฌ๋ณ ์์ดํ ์ถ๋ ฅ ํฌ๋งท(JSON ๊ตฌ์กฐ)์ ๊ณตํต ์คํค๋ง๋ก ๋ณํํฉ๋๋ค.
- ์ค๋ณต ์ ๊ฑฐ ๋ฐ ๊ทธ๋ฃนํ:
- ๋์ผ ์ทจ์ฝ์ ์ ์ค๋ณต ๋ฐ์์ ์ ๊ฑฐํ๊ณ , ์ด๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค.
- ์ ๊ทํ ๋ชฉ์ :
- ๋ค์ํ ๋ณด์ ๋๊ตฌ๋ฅผ ๋จ์ผ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ํตํฉํ์ฌ ์ด์ ํจ์จ์ฑ์ ํ๋ณดํฉ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ (MySQL):
- ์ค์บ ์ ๋ณด, ์ทจ์ฝ์ ์ ๋ณด, ์ํ, ๋ด๋น์, ์ด๋ ฅ ๋ฑ์ ์ ์ฅํฉ๋๋ค.
- ์๋ณธ ๋ฆฌํฌํธ ์ ์ฅ (AWS S3):
- ์ค์บ ๊ฒฐ๊ณผ JSON ๋ฐ HTML ๋ฆฌํฌํธ๋ฅผ ๊ทธ๋๋ก ๋ณด๊ดํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ๋ฆฌ ์ ๋ต:
- DB์๋ ์กฐํ ์ค์ฌ ๋ฐ์ดํฐ๋ง ์ ์ฅํ๊ณ , ๋์ฉ๋ ์๋ณธ ๋ฐ์ดํฐ๋ Object Storage์ ์ ์ฅํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
- AI ๊ธฐ๋ฐ ๋ถ์ ์ํ:
- ์ทจ์ฝ์ ์ค๋ช , ๊ณต๊ฒฉ ์๋๋ฆฌ์ค, ์ํฅ ๋ฒ์, ์์ ๊ฐ์ด๋๋ฅผ ์๋ ์์ฑํฉ๋๋ค.
- ์ ์ฑ
๊ธฐ๋ฐ ์ฐ์ ์์ ์ ์ฉ:
- Policy Engine์ ํตํด Priority ๋ฐ SLA๊ฐ ์๋์ผ๋ก ๋ถ์ฌ๋ฉ๋๋ค.
- ์ด์ ์ํ ๊ด๋ฆฌ:
- ์ทจ์ฝ์ ์ํ ๋ณ๊ฒฝ, ๋ด๋น์ ์ง์ , ์กฐ์น ์งํ ์ํฉ์ ์ถ์ ํฉ๋๋ค.
- ์๋ฆผ ๋ฐ ์ฐ๋:
- Slack, Jira, GitHub ๋ฑ๊ณผ ์ฐ๋ํ์ฌ ์กฐ์น ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค.
Policy Engine์ ์๋น์ค ๋งฅ๋ฝ๊ณผ ๋ณด์ ์ํ๋๋ฅผ ์ข ํฉ์ ์ผ๋ก ๊ณ ๋ คํ์ฌ ์ฐ์ ์์์ ๋์ ์ ๋ต์ ์๋์ผ๋ก ๊ฒฐ์ ํ๋๋ก ํฉ๋๋ค.
Policy Engine์ ๋ค์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ฐ๋ฅผ ์ํํฉ๋๋ค.
-
Severity
- Critical / High / Medium / Low
-
์๋น์ค ์ค์๋
- ํต์ฌ ์๋น์ค ์ฌ๋ถ
-
๋ ธ์ถ ๋ฒ์
- Public (์ธ๋ถ ๋ ธ์ถ)
- Internal (๋ด๋ถ ์์คํ )
-
์ทจ์ฝ์ ํน์ฑ
- CWE (Common Weakness Enumeration)
- CVE
-
๋ฐ์ ์์น
- ์ธ์ฆ/์ธ๊ฐ ๋ก์ง ์ฌ๋ถ
- ๊ด๋ฆฌ์ ๊ธฐ๋ฅ ์ฌ๋ถ
- ์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ ์์ญ ์ฌ๋ถ
- ์ ์ ๊ท์น ๊ธฐ๋ฐ ์ ์ฑ ํ๊ฐ
- ์กฐ๊ฑด ์กฐํฉ์ ํตํ ์ํ๋ ์ฌ์ฐ์
- ํน์ ์กฐ๊ฑด์ ๋ํ ๊ฐ์ค์น ์ ์ฉ
-
Priority (P0 ~ P3)
- P0: ์ฆ์ ๋์
- P1: ๋จ๊ธฐ ๋์
- P2: ์ผ๋ฐ ๋์
- P3: ์ฅ๊ธฐ ๋์
-
SLA (์กฐ์น ๊ธฐํ)
- P0: 24์๊ฐ ์ด๋ด
- P1: 3์ผ ์ด๋ด
- P2: 7์ผ ์ด๋ด
- P3: 30์ผ ์ด๋ด
-
์๋ฆผ ๋์
- ๋ด๋น ๊ฐ๋ฐํ
- ๋ณด์ํ
- ์ด์ํ
- ๋ณด์ ํ๋จ์ ์๋ํํ์ฌ ์ผ๊ด๋ ์ด์ ์ฒด๊ณ๋ฅผ ์ ์งํฉ๋๋ค.
- ์ทจ์ฝ์ ์ ๊ธฐ์ ์ ์ฌ๊ฐ๋์ ์ค์ ์๋น์ค์์ ์ํฅ๋์ ์ฐจ์ด๋ฅผ ๋ณด์ํฉ๋๋ค.
- ๋ณด์ ๋์ ์ฐ์ ์์๋ฅผ ์๋ํํ์ฌ ์ด์ ๋ถ๋ด ๊ฐ์ํฉ๋๋ค.
DETECTED โ TRIAGED โ IN_PROGRESS โ FIXED โ VERIFIED โ CLOSED
-
DETECTED
๋ณด์ ์ค์บ ๋๊ตฌ๋ฅผ ํตํด ์ทจ์ฝ์ ์ด ์ต์ด๋ก ํ์ง๋ ์ํ์ ๋๋ค.
์ด ๋จ๊ณ์ ์ทจ์ฝ์ ์ ์์ง ๊ฒํ ๋์ง ์์์ผ๋ฉฐ, ๋จ์ํ ํ์ง ๊ฒฐ๊ณผ๋ก๋ง ์กด์ฌํฉ๋๋ค. -
TRIAGED
๋ณด์ ๋ด๋น์ ๋๋ ์ ์ฑ ์์ง์ด ์ทจ์ฝ์ ์ ์ ํจ์ฑ์ ๊ฒํ ํ๊ณ , ์ฐ์ ์์์ ์ฒ๋ฆฌ ๋ฐฉํฅ์ ์ ๋ฆฌํ ์ํ์ ๋๋ค.
์ด ๋จ๊ณ์์๋ False Positive ์ฌ๋ถ, ์ํ๋ ์ฌํ๊ฐ ๋ฑ์ด ํจ๊ป ์ํ๋ฉ๋๋ค. -
IN_PROGRESS
์ทจ์ฝ์ ์ด ์ค์ ์กฐ์น ๋์์ผ๋ก ํ์ ๋์ด, ๊ฐ๋ฐ์ ๋๋ ๋ด๋น์๊ฐ ์์ ์์ ์ ์งํ ์ค์ธ ์ํ์ ๋๋ค. -
FIXED
์ฝ๋ ๋๋ ์ค์ ๋ณ๊ฒฝ์ ํตํด ์ทจ์ฝ์ ์ ๋ํ ์์ ์ด ์๋ฃ๋ ์ํ์ ๋๋ค.
๋จ, ์ค์ ๋ก ์ทจ์ฝ์ ์ด ์ ๊ฑฐ๋์๋์ง๋ ์์ง ํ์ธ๋์ง ์์์ต๋๋ค. -
VERIFIED
์์ ๋ ๊ฒฐ๊ณผ์ ๋ํด ์ฌ์ค์บ ๋๋ ์๋ ๊ฒํ ๋ฅผ ์ํํ์ฌ, ์ทจ์ฝ์ ์ด ์ค์ ๋ก ํด์๋ ๊ฒ์ ํ์ธํ ์ํ์ ๋๋ค. -
CLOSED
์ทจ์ฝ์ ์ด ์ต์ข ์ ์ผ๋ก ์ข ๋ฃ๋ ์ํ์ ๋๋ค.
์กฐ์น์ ๊ฒ์ฆ์ด ๋ชจ๋ ์๋ฃ๋์๊ฑฐ๋, ์ข ๋ฃ๊ฐ ์น์ธ๋ ํญ๋ชฉ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
์ด ๋จ๊ณ์ ์ทจ์ฝ์ ์ ๋ ์ด์ ํ์ฑ ์กฐ์น ๋์์ด ์๋๋ฉฐ, ์ด๋ ฅ ๊ด๋ฆฌ์ ๊ฐ์ฌ ์ถ์ ๋ชฉ์ ์ผ๋ก ๋ณด๊ด๋ฉ๋๋ค.
์ด Lifecycle์ ํ์ง ์ดํ์ ๊ฒํ , ์์ , ๊ฒ์ฆ, ์ข ๋ฃ๊น์ง ์ผ๊ด๋ ์ด์ ํ๋ฆ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
FIXED์ VERIFIED๋ฅผ ๋ถ๋ฆฌํ ์ด์ ๋, ๊ฐ๋ฐ์๊ฐ ์์ ํ๋ค๊ณ ๋ณด๊ณ ํ ์์ ๊ณผ ์ค์ ๋ก ์ทจ์ฝ์ ์ด ํด์๋ ์์ ์ ๋ช
ํํ ๊ตฌ๋ถํ๊ธฐ ์ํจ์
๋๋ค.
์ด๋ฅผ ํตํด ์กฐ์น ์๋ฃ ์ทจ์ฝ์ ์ ๋ํ ๊ฒ์ฆ์ ํตํด ๋์ ์ ๋ขฐ๋์ ์ด์ ์ฒด๊ณ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ฅ์๋ฅผ ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ค์บ ์๋ณธ ๊ฒฐ๊ณผ(JSON, HTML ๋ฆฌํฌํธ) ์ ์ฅ
- ์ทจ์ฝ์ ๋ถ์์ ์ฌ์ฉ๋ ์๋ณธ ๋ฐ์ดํฐ ๋ณด์กด
- ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ด์ ๋ฐ์ดํฐ ์ ์ฅ
- ์ทจ์ฝ์ ์ํ, ์ฌ์ฉ์ ์ ๋ณด, ์ด๋ ฅ ๋ฐ์ดํฐ ๊ด๋ฆฌ
์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ด์ ๋ฐ์ดํฐ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
| ๊ตฌ๋ถ | ์ ์ฅ์ | ๋ฐ์ดํฐ ์ ํ |
|---|---|---|
| ๋ฉํ๋ฐ์ดํฐ | RDS (MySQL) | ์ทจ์ฝ์ , ์ํ, ์ฌ์ฉ์, ์ด๋ ฅ |
| ์๋ณธ ๋ฐ์ดํฐ | S3 | JSON ๋ฆฌํฌํธ, HTML ๋ฆฌํฌํธ |
์ด ๊ตฌ์กฐ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ํ๋ณดํฉ๋๋ค.
-
๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ต์ ํ
๋ณด์ ์ค์บ ๊ฒฐ๊ณผ๋ ํฌ๊ธฐ๊ฐ ํฌ๊ณ ๊ตฌ์กฐ๊ฐ ๋ค์ํ์ฌ, DB์ ์ ์ฅํ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. -
์๋ณธ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
๋ถ์ ๋ฐ ๊ฐ์ฌ ๊ณผ์ ์์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ํ์ธํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ณ์กฐ ์ฌ๋ถ ๊ฒ์ฆ์ด ๊ฐ๋ฅํฉ๋๋ค. -
ํ์ฅ์ฑ
์ค์บ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ฅ ์ฉ๋์ ๋ํ ์ ์ฝ์ด ๊ฑฐ์ ์์ต๋๋ค. -
๋น์ฉ ํจ์จ์ฑ
Object Storage๋ RDB ๋๋น ๋น์ฉ ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
์ ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ
์ทจ์ฝ์ ์ํ, ์ฌ์ฉ์, ๊ถํ, ์ด๋ ฅ๊ณผ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. -
ํธ๋์ญ์ ๋ณด์ฅ
์ํ ๋ณ๊ฒฝ ๋ฐ ์ด์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. -
์ฟผ๋ฆฌ ๊ธฐ๋ฐ ์กฐํ
๋์๋ณด๋์ ํต๊ณ ๊ธฐ๋ฅ ๊ตฌํ์ ์ ํฉํฉ๋๋ค.
s3://devsecops-hub/{project}/{scan_id}/report.json
- project: ์๋น์ค ๋จ์ ์๋ณ์
- scan_id: ์ค์บ ์คํ ๋จ์ ์๋ณ์
DevSecOps Hub๋ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ๊ถํ์ ๊ด๋ฆฌํฉ๋๋ค.
๋ณด์ ์ด์ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๊ถํ ์ค๋จ์ฉ์ ๋ฐฉ์งํ๊ณ , ์ฑ ์ ๊ธฐ๋ฐ์ ์์ ์ํ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ช ํํ ์ญํ ๊ตฌ๋ถ์ ์ ์ฉํฉ๋๋ค.
- ์ ์ฒด ์์คํ ๊ด๋ฆฌ ๊ถํ์ ๋ณด์
- ์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ถํ ์ค์ ๊ฐ๋ฅ
- Policy Engine ์ ์ฑ ์์ ๋ฐ ๊ด๋ฆฌ
- ๊ฐ์ฌ ๋ก๊ทธ ์กฐํ ๋ฐ ์์คํ ์ค์ ๋ณ๊ฒฝ
- ์ทจ์ฝ์ ๋ถ์ ๋ฐ ์ํ ๋ณ๊ฒฝ ์ํ
- ์ฐ์ ์์ ์กฐ์ ๋ฐ ์ ์ฑ ๊ธฐ๋ฐ ํ๋จ ์ํ
- False Positive ๊ฒ์ฆ ๋ฐ ๋ฆฌ์คํฌ ํ๊ฐ ์ํ
- ๋ณด์ ๋ฆฌํฌํธ ๊ฒํ ๋ฐ ๊ด๋ฆฌ
- ํ ๋น๋ ์ทจ์ฝ์ ์กฐํ ๋ฐ ๋์
- ์ทจ์ฝ์ ์ํ ๋ณ๊ฒฝ (IN_PROGRESS, FIXED)
- AI ๋ถ์ ๊ฒฐ๊ณผ ํ์ธ ๋ฐ ์ฝ๋ ์์ ์ํ
- ๊ฐ๋ฐ ๋จ๊ณ์์์ ๋ณด์ ์กฐ์น ์ํ
- ์ทจ์ฝ์ ๋ฐ ํต๊ณ ๋ฐ์ดํฐ ์กฐํ๋ง ๊ฐ๋ฅ
- ์ํ ๋ณ๊ฒฝ ๋ฐ ์์ ๊ถํ ์์
-
์ต์ ๊ถํ ์์น: ๊ฐ ์ญํ ์ ๋ฐ๋์ ํ์ํ ๊ธฐ๋ฅ๋ง ์ํํ ์ ์๋๋ก ์ ํ๋ฉ๋๋ค.
-
์ฑ ์ ๋ถ๋ฆฌ: ๋ณด์ ํ๋จ๊ณผ ์ฝ๋ ์์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์ด์ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์์ํต๋๋ค.
-
ํ๋ก์ ํธ ๋จ์ ๊ถํ ๊ด๋ฆฌ: ํน์ ํ๋ก์ ํธ์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ ํํ ์ ์๋๋ก ์ค๊ณ๋ฉ๋๋ค.
-
API ์ธ์ฆ: CI/CD ํ์ดํ๋ผ์ธ์ API Token ๊ธฐ๋ฐ์ผ๋ก ์ธ์ฆ๋ฉ๋๋ค.
-
์ฌ์ฉ์ ์ธ์ฆ: ์ฌ์ฉ์ ์ธ์ฆ์ OAuth 2.0 / OpenID Connect(OIDC) ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ธ์ฆ ์๋ฃ ํ์๋ JWT๋ฅผ ์ธ์ ํ ํฐ์ผ๋ก ํ์ฉํ์ฌ ์ฌ์ฉ์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
-
ํด๋ผ์ฐ๋ ์ ๊ทผ ์ธ์ฆ: GitHub Actions์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐํ์ ๋ชจ๋ OIDC ๊ธฐ๋ฐ IAM Role Assume ๋ฐฉ์์ ํตํด AWS ๋ฆฌ์์ค์ ์ ๊ทผํฉ๋๋ค.
-
์ ์ ํค ๊ธ์ง ์ ์ฑ :
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY์ ๊ฐ์ ์ฅ๊ธฐ Access Key๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ฐํ์์AWS_AUTH_MODE=oidc_only,AWS_ROLE_ARN,AWS_WEB_IDENTITY_TOKEN_FILE๊ตฌ์ฑ์ ํ์๋ก ์ฌ์ฉํฉ๋๋ค.
DATABASE_URL=<RDS MySQL ์ฐ๊ฒฐ ๋ฌธ์์ด>DEVSECOPS_PROJECT_NAME=devsecops-hubDEVSECOPS_PROJECT_TOKEN=<ํ๋ก์ ํธ API ํ ํฐ>SESSION_SECRET=<์ธ์ ์ํธํ ํค>OPENAI_API_KEY=<OpenAI API Key>GITHUB_OAUTH_CLIENT_ID=<GitHub OAuth App Client ID>GITHUB_OAUTH_CLIENT_SECRET=<GitHub OAuth App Client Secret>GITHUB_OAUTH_REDIRECT_URI=<์: https://<render-service>/auth/github/callback>AUTH_ADMIN_USERS=<์ผํ๊ตฌ๋ถ GitHub username/email ๋ชฉ๋ก>AUTH_SECURITY_USERS=<์ผํ๊ตฌ๋ถ GitHub username/email ๋ชฉ๋ก>AUTH_VIEWER_USERS=<์ผํ๊ตฌ๋ถ GitHub username/email ๋ชฉ๋ก>
.github/workflows/security_scan_and_s3_upload.yml ๊ธฐ์ค์ผ๋ก ์๋ GitHub Secrets๊ฐ ํ์ํฉ๋๋ค.
AWS_REGIONAWS_S3_REPORT_BUCKETAWS_GITHUB_ROLE_ARN(OIDC๋ก Assume ํ Role ARN)DEVSECOPS_HUB_URLDEVSECOPS_PROJECT_NAMEDEVSECOPS_PROJECT_TOKEN
id-token: write ๊ถํ + aws-actions/configure-aws-credentials๋ฅผ ํตํด OIDC AssumeRole์ ์ํํฉ๋๋ค.
๋ชจ๋ ์ฃผ์ ํ์๋ฅผ Audit Log๋ก ๊ธฐ๋กํ์ฌ, ๋ณด์ ์ด์์ ์ถ์ ์ฑ๊ณผ ๊ฐ์ฌ ๋์ ๋ฅ๋ ฅ์ ํ๋ณดํฉ๋๋ค.
- ์ทจ์ฝ์ ์ํ ๋ณ๊ฒฝ
- ์ฌ์ฉ์ ๊ถํ ๋ณ๊ฒฝ
- Policy ๋ณ๊ฒฝ
- ๋ก๊ทธ์ธ ๋ฐ ์ธ์ฆ ์ด๋ฒคํธ
- ๋ฐ์ดํฐ ์กฐํ ๋ฐ ์ ๊ทผ ์ด๋ฒคํธ
- ์ฌ์ฉ์ ID
- ํ์ ์ ํ (Action)
- ๋์ ๋ฆฌ์์ค (Resource)
- ๋ณ๊ฒฝ ์ ์ํ (Before)
- ๋ณ๊ฒฝ ํ ์ํ (After)
- Timestamp
- ์์ฒญ ์ถ์ฒ (IP ๋๋ ์์คํ ์๋ณ์)
๋ก๊ทธ ์์ (๊ฐ๋ ์ ๊ตฌ์กฐ)
user: developer_01
action: UPDATE_STATUS
resource: vulnerability_123
before: IN_PROGRESS
after: FIXED
timestamp: 2026-03-26T12:00:00Z
- ๋ก๊ทธ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ์ผ์ ๊ธฐ๊ฐ ๋์ ๋ณด๊ด ํ ์์นด์ด๋น ์ ์ฑ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
DevSecOps Hub๋ ์ค์ ์ด์ ํ๊ฒฝ์์์ ๋ณด์์ฑ์ ํ๋ณดํ๊ธฐ ์ํด
๋ค์๊ณผ ๊ฐ์ ๋ณด์ ์ค๊ณ ์์น์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
-
1. ์ต์ ๊ถํ ์์น: ๋ชจ๋ ์ฌ์ฉ์์ ์์คํ ์ ํ์ํ ์ต์ ๊ถํ๋ง ๋ถ์ฌ๋ฐ์ต๋๋ค.
-
2. ์ธ์ฆ๊ณผ ๊ถํ์ ๋ถ๋ฆฌ: Authentication๊ณผ Authorization์ ๋ช ํํ ๋ถ๋ฆฌํ์ฌ ์ค๊ณํฉ๋๋ค.
-
3. ๋ฐ์ดํฐ ์ถ์ ๊ฐ๋ฅ์ฑ: ๋ชจ๋ ํ์์ ์ํ ๋ณํ๋ ์ถ์ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
-
4. ์๋ณธ ๋ฐ์ดํฐ ๋ณด์กด: ๋ชจ๋ ๋ณด์ ์ค์บ ๊ฒฐ๊ณผ๋ ์๋ณธ ํํ๋ก ๋ณด์กด๋ฉ๋๋ค.
-
5. ์ ๋ ฅ ๊ฒ์ฆ ๋ฐ ๋ก๊น : ์ธ๋ถ ์ ๋ ฅ์ ๋ฐ๋์ ๊ฒ์ฆ๋๋ฉฐ, ๋ชจ๋ ์ฃผ์ ์์ฒญ์ ๊ธฐ๋ก๋ฉ๋๋ค.
-
6. ๋ฏผ๊ฐ์ ๋ณด ๋ณดํธ: ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ฝ๋์ ํฌํจ๋์ง ์๋๋ก ์ค๊ณํฉ๋๋ค.