Skip to content

le2sky/clair-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ์„ ์œ„ํ•œ Clair ํ™œ์šฉ

ํด๋ ˆ์–ด ๊ณต์‹๋ฌธ์„œ

1. Docker ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ

  • ๋ณด์•ˆ ๋‹จ๊ณ„๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ์ •์  ์ฝ”๋“œ ๋ถ„์„ : Jacoco์™€ Sonarqube๊ฐ€ ์ •์  ์ฝ”๋“œ ๋ถ„์„์— ํ•ด๋‹นํ•œ๋‹ค. (์ฝ”๋“œ ์ž‘์„ฑ ๋•Œ ๋ณด์•ˆ ์š”์†Œ ํ™•์ธ)
  • ์ข…์†์„ฑ ํ™•์ธ : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ข…์†์„ฑ์˜ ๋ณด์•ˆ ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ๋ณ„ ์ข…์†์„ฑ์„ ์‹๋ณ„ํ•˜๊ณ  ์•Œ๋ ค์ง„ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์Šค์บ” : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์Šค์บ๋‹ ํ•œ๋‹ค. (clair)

2. clair

  • ์ปจํ…Œ์ด๋„ˆ์˜ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ์ •์ ๋ถ„์„์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ
  • ํด๋ผ์ด์–ธํŠธ๋Š” clair api๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ‰์ธํ™”ํ•œ ๋‹ค์Œ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ๊ณผ ๋Œ€์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ์˜ ๋ณด์•ˆ์„ ๋ณด๋‹ค ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค.

์ƒ‰์ธํ™”๋ฅผ ํ•˜๋ฉด ์ด๋ฏธ์ง€์˜ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” clair์™€ api๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ • ์ด๋ฏธ์ง€์˜ ์ทจ์•ฝ์ ์„ ์ฟผ๋ฆฌํ•œ๋‹ค. ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ์ทจ์•ฝ์ ๊ณผ ๊ธฐ๋Šฅ์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ์Šค์บ”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ทจ์•ฝ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์•Œ๋žŒ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


  • ClairCore : ์ปจํ…์ธ  ๊ฒ€์‚ฌ, ์ทจ์•ฝ์  ๋ณด๊ณ ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„

    • ๋†’์€ ์ˆ˜์ค€์˜ claircore ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ clair ์„œ๋น„์Šค wrapper๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ทจ์•ฝ์„ฑ ์†Œ์Šค์™€ ๋ ˆ์ด์–ด ์ธ๋ฑ์Šค์™€ ๊ด€๋ จ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์€ claircore๋ฅผ ํ†ตํ•ด ์ ์šฉ์ด ๋œ๋‹ค.
    • Updaters : rest api ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

clair core๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ :

  • Updaters์™€ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ชฉ๋ก์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ๋ฐ ์—…๋ฐ์ดํŠธ ๋œ ๋„์ปค ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ํด๋ ˆ์–ด ๋ช…์„ธ ๋‚ด์šฉ์ด๋‹ค. ํด๋ ˆ์–ด๋Š” OCI ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ฐ ๋ ˆ์ด์–ด๊ฐ€ ์ค‘๋ณต ์ž‘์—…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ปจํ…์ธ  ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ์ธ๋ฑ์‹ฑ๋˜๋ฉด ๋‚˜์ค‘์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ๋ฑ์Šค ๋ ˆํฌํŠธ๊ฐ€ ์œ ์ง€๋œ๋‹ค.

  • ์ธ๋ฑ์‹ฑ ๋ถ€๋ถ„ : ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํด๋ ˆ์–ด์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค.

    • ์ธ๋ฑ์‹ฑ์„ ์ˆ˜์‹  ๋ฐ›์œผ๋ฉด ํด๋ ˆ์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํ•ด๋‹น ์ปจํ…์ธ ๋ฅผ ์Šค์บ”ํ•œ ๋‹ค์Œ ์ธ๋ฑ์Šค ๋ ˆํฌํŠธ๋ผ๋Š” ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋งค์นญ ๋ถ€๋ถ„ : ์ธ๋ฑ์Šค ๋ ˆํฌํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๋ ˆํฌํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ด€๋ จ ์ทจ์•ฝ์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

    ํด๋ ˆ์–ด๋Š” ์ง€์†์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ณด์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋งค์นญ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ†ตํ•ด ํ•ญ์ƒ ์ธ๋ฑ์Šค ๋ ˆํฌํŠธ์˜ ์ตœ์‹  ์ทจ์•ฝ์ ์„ ๋ถ„์„ํ•˜๊ณ  ์ œ๊ณตํ•œ๋‹ค.

  • ์•Œ๋ฆผ ๋ถ€๋ถ„ : ํด๋ ˆ์–ด๋Š” ๋…ธํ‹ฐํ”ผ์ผ€์ด์…˜์„ ํ†ตํ•ด ์•Œ๋žŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์•Œ๋žŒ ์„œ๋น„์Šค๋Š” ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์ด ์ธ๋ฑ์‹ฑ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์•Œ๋žŒ์„ ํ†ตํ•ด ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.


3. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ถ„์„ ๋ฐฉ์‹

  • ํŠน์ • ์ด๋ฏธ์ง€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์–ด์•ผ ์ ‘๊ทผํ•ด์„œ ๋ถ„์„ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

    • ํŠน์ • ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ด์„œ ๋กœ์ปฌ์—์„œ ํ˜น์€, ํด๋ ˆ์–ด ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ๋ ˆ์ด์–ด์˜ http url์„ ํ†ตํ•ด ๋ ˆ์ด์–ด์˜ tar๋ฅผ ๊ฐ€์ ธ์™€ ๋ถ„์„ํ•œ๋‹ค.

  • ์•ž์„œ ๋ถ„์„ํ•œ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ์™ธ์— ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ api ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด์„œ tar ํŒŒ์ผ์„ ์–ป๋Š”๋‹ค. ์ด๋Ÿฌํ•œ api ํ˜ธ์ถœ๋ฐฉ์‹์— ๋”ฐ๋ผ ํด๋ ˆ์–ด๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ณ„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํด๋ ˆ์–ด์—๊ฒŒ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ๋œ ์Šค์บ” ๊ฐ€๋Šฅํ•œ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋„์ปค์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋ช‡๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์ „์— ์ž‘์„ฑํ•˜์—ฌ api๋ฅผ ํ†ตํ•ด http ํ˜ธ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•ด ํด๋ ˆ์–ด๊ฐ€ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ๊ฐ’๋“ค์„ ์ทจํ•ฉํ•˜์—ฌ json ํ˜•์‹์œผ๋กœ ๋ฆฌํ„ด์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

clairctl๋ฅผ ํ†ตํ•ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์Šค์บ” ๊ฐ€๋Šฅ

4. clair์™€ jenkins ์—ฐ๋™

5. ์„ค์น˜

# clair DB, clair ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run -p 5432:5432 -d --name db arminc/clair-db:latest
docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:latest

# clair-scanner  ์„ค์น˜ (clair ๋ณด์•ˆ ์ทจ์•ฝ์  ์Šค์บ” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด clairctl์ด๋ผ๋Š” cli ๋ฐ”์ด๋„ˆ๋ฆฌ ํˆด ์‚ฌ์šฉ)
wget https://github.com/arminc/clair-scanner/releases/download/v12/clair-scanner_linux_amd64

chmod +x clair-scanner_linux_amd64; sudo mv clair-scanner_linux_amd64 /usr/local/bin/clair-scanner

6. Clair ๋ณด์•ˆ ์„ค์ • ๋ฐ Docker ๋นŒ๋“œ ์Šค์บ” ์ˆ˜ํ–‰

  • Clair ๋ณด์•ˆ ์„ค์ • ๋ฐ Docker ๋นŒ๋“œ ์Šค์บ” ์ˆ˜ํ–‰
    • Clair-scanner ๊ธฐ๋ณธ ๋ณด์•ˆ ์„ค์ •์„ ์œ„ํ•œ ์˜ต์…˜ ํ™•์ธ
    • Jenkins์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Docker ์ด๋ฏธ์ง€ ์Šค์บ” ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ (Gradle, AWS-CLI)
    • Gradle-Jib ์˜ˆ์ œ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์Šค์บ” ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ (spring boot)
# Clair ์‹คํ–‰ ์„œ๋ฒ„ Private IP ํ™•์ธ
export IP=$(ip r | tail -n1 | awk '{ print $9 }'); echo ${IP}

# Gradle, AWS-CLI Docker ์ด๋ฏธ์ง€ ์Šค์บ” ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ ๋ช…๋ น์–ด
clair-scanner --ip ${IP} --clair=http://localhost:6060 --log="clair.log" --report="gradle_report.txt" gradle:jdk11

clair-scanner --ip ${IP} --clair=http://localhost:6060 --log="clair.log" --report="aws-cli_report.txt" bitnami/aws-cli:latest

# Spring Boot ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ณด์•ˆ ์Šค์บ” ๋ช…๋ น์–ด
clair-scanner --ip ${IP} --clair=http://localhost:6060 --log="clair.log" --report="spring-boot-web_report.txt" <์˜ˆ์ œ Docker ์ด๋ฏธ์ง€๋ช…>

๋ณด์•ˆ ์Šค์บ” ํ…Œ์ŠคํŠธ ์šฉ

docker pull gradle:jdk11
docker pull bitnami/aws-cli:latest

About

clair practice for container security

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages