๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ” ๋ณด์•ˆ

์†Œ๊ฐœโ€‹

๋ณด์•ˆ์€ Semaphore UI์˜ ์ตœ์šฐ์„  ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ธํ”„๋ผ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋“ , ๋ฏผ๊ฐํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ํŒ€ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๋“ , Semaphore UI๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฌ๊ณ ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์šด์˜์„ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” Semaphore๊ฐ€ ๋ณด์•ˆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌโ€‹

Semaphore๋Š” ์•ˆ์ „ํ•œ ์ธ์ฆ๊ณผ ์œ ์—ฐํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  • ๋กœ๊ทธ์ธ ๋ฐฉ์‹:

    • ์‚ฌ์šฉ์ž ์ด๋ฆ„/๋น„๋ฐ€๋ฒˆํ˜ธ
      Semaphore ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ ˆ๋Œ€ ํ‰๋ฌธ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ Argon2id๋กœ ํ•ด์‹œ๋ฉ๋‹ˆ๋‹ค(๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ ์ฐธ์กฐ).

    • LDAP
      ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„œ๋น„์Šค์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ํ•„ํ„ฐ๋ง๊ณผ LDAPS๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • OpenID Connect (OIDC)
      Google, Azure AD, Keycloak๊ณผ ๊ฐ™์€ ID ๊ณต๊ธ‰์ž๋ฅผ ํ†ตํ•œ ์‹ฑ๊ธ€ ์‚ฌ์ธ์˜จ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ํด๋ ˆ์ž„๊ณผ ๊ทธ๋ฃน ๋งคํ•‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • 2๋‹จ๊ณ„ ์ธ์ฆ(2FA)
    TOTP ๊ธฐ๋ฐ˜ 2FA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ณ„๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๊ณ  ์„ ํƒ์ ์œผ๋กœ ๋ณต๊ตฌ ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ์˜ต์…˜ mfa.totp.enabled์™€ mfa.totp.allow_recovery๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด
    Admin, Maintainer, Viewer ๋“ฑ ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ• ๋‹นํ•˜์—ฌ ์ฑ…์ž„์— ๋”ฐ๋ผ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ธ์…˜ ๊ด€๋ฆฌ
    ์„ธ์…˜์€ ๋ณด์•ˆ HTTP ์ฟ ํ‚ค๋กœ ๋ณดํ˜ธ๋ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ๋งŒ๋ฃŒ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๋…ธ์ถœ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑโ€‹

v2.20๋ถ€ํ„ฐ

Argon2id ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์€ Semaphore 2.20๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์€ bcrypt๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” OWASP๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ์— ๊ถŒ์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ Argon2id๋กœ ํ•ด์‹œ๋ฉ๋‹ˆ๋‹ค. Semaphore๋Š” OWASP ์ตœ์†Œ ๊ฐ•๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’
๋ฉ”๋ชจ๋ฆฌ19 MiB (m=19456)
๋ฐ˜๋ณต ํšŸ์ˆ˜2 (t=2)
๋ณ‘๋ ฌ์„ฑ1 (p=1)
์†”ํŠธ๋น„๋ฐ€๋ฒˆํ˜ธ๋‹น ์ž„์˜์˜ 16๋ฐ”์ดํŠธ
ํ•ด์‹œ ๊ธธ์ด32๋ฐ”์ดํŠธ

ํ•ด์‹œ๋Š” ํ‘œ์ค€ PHC ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>์™€ ๊ฐ™์œผ๋ฉฐ, ๊ฐ ํ•ด์‹œ์— ์‚ฌ์šฉ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•ด์‹œ์™€ ํ•จ๊ป˜ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ์‹, ์ฆ‰ ์›น UI, API, ๊ทธ๋ฆฌ๊ณ  CLI ๋ช…๋ น semaphore user add, semaphore user change-by-login, semaphore setup์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

2.20 ์ด์ „ ๋ฒ„์ „์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ. 2.20 ์ด์ „ ๋ฆด๋ฆฌ์Šค๋Š” bcrypt๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ๊ธฐ์กด bcrypt ํ•ด์‹œ๋Š” ๋กœ๊ทธ์ธ ์‹œ ๊ณ„์† ํ—ˆ์šฉ๋˜๋ฏ€๋กœ, ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋„ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํˆฌ๋ช…ํ•˜๊ฒŒ Argon2id๋กœ ๋‹ค์‹œ ํ•ด์‹œ๋˜๊ณ  bcrypt ํ•ด์‹œ๊ฐ€ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
  • ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ Semaphore์˜ Argon2id ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ฐ•ํ™”๋˜๋ฉด, ์ด์ „ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ๋„ ๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฉ๋‹ˆ๋‹ค.

์žฌํ•ด์‹ฑ์€ ๋กœ๊ทธ์ธ ์‹œ์—๋งŒ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ, ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋Š” bcrypt ํ•ด์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ„์ •์„ ๊ฐ•์ œ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด semaphore user change-by-login --password ...๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌ์ž UI๋ฅผ ํ†ตํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

๋…ธํŠธ

2๋‹จ๊ณ„ ์ธ์ฆ ๋ณต๊ตฌ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๊ณ„์† bcrypt๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹œํฌ๋ฆฟ ๋ฐ ์ž๊ฒฉ ์ฆ๋ช…โ€‹

์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค:

  • ์•”ํ˜ธํ™”๋œ ํ‚ค ์ €์žฅ์†Œ
    ์ž๊ฒฉ ์ฆ๋ช…๊ณผ ๋น„๋ฐ€ ๋ณ€์ˆ˜๋Š” AES ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•ด ์ €์žฅ ์‹œ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌ
    ์‹œํฌ๋ฆฟ์€ ์‹คํ–‰ ์‹œ์ ์—๋งŒ ์ž‘์—…์— ์ „๋‹ฌ๋˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์— ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • SSH ํ‚ค ๋ฐ ํ† ํฐ
    ์œ ํšจํ•œ SSH ํ‚ค์™€ ํ† ํฐ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋˜๊ณ  ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • HashiCorp Vault ์—ฐ๋™ (Pro)
    ์‹œํฌ๋ฆฟ์„ ์™ธ๋ถ€ Vault ์ธ์Šคํ„ด์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•  ๋•Œ ์‹œํฌ๋ฆฟ๋ณ„๋กœ ์ €์žฅ ์œ„์น˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”โ€‹

๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™”๋œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ‚ค ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์„ค์ • ํŒŒ์ผ์—์„œ access_key_encryption ์„ค์ • ์˜ต์…˜์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

head -c32 /dev/urandom | base64

์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ/ํ”Œ๋ ˆ์ด๋ถ ์‹คํ–‰โ€‹

Semaphore๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํ”Œ๋ ˆ์ด๋ถ๊ณผ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์œ„ํ—˜์ด ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์‹คํ–‰ ๊ฒฉ๋ฆฌ
    ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘์—…์€ Semaphore ์„œ๋ฒ„์˜ ์ผ๋ฐ˜ ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ ํ•ด๋‹น ์„œ๋ฒ„์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๋„คํŠธ์›Œํฌ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. docker ๋˜๋Š” k8s ์‹คํ–‰๊ธฐ๋กœ ๊ตฌ์„ฑ๋œ ๋Ÿฌ๋„ˆ์— ์ž‘์—…์„ ๋งก๊ธฐ๋ฉด ์ž‘์—…๋งˆ๋‹ค ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋‚˜ Pod๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋๋‚˜๋ฉด ํ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

  • ์ตœ์†Œ ๊ถŒํ•œ
    Docker์™€ Kubernetes ์‹คํ–‰๊ธฐ์—์„œ๋Š” ์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ์„œ๋น„์Šค ๊ณ„์ •์„ ์ง์ ‘ ์„ ํƒํ•˜๋ฏ€๋กœ ์ž‘์—…์— ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • chroot ์‹คํ–‰
    Semaphore๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ๋”์šฑ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด chroot jail ๋‚ด๋ถ€์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž‘์—… ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ์ž
    ์ž ์žฌ์ ์ธ ์ทจ์•ฝ์  ์•…์šฉ์˜ ์˜ํ–ฅ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ž‘์—…์„ ์ „์šฉ ๋น„root ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž(์˜ˆ: semaphore)๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ ์‹œ์Šคํ…œ ์ •์ฑ…์— ๋”ฐ๋ผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ๋ฐฐํฌโ€‹

Semaphore๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค:

  • HTTPS ์‚ฌ์šฉ
    Semaphore๋Š” ๋‚ด์žฅ TLS ์ง€์›๊ณผ Nginx์™€ ๊ฐ™์€ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋ชจ๋‘ HTTPS๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” HTTPS๋ฅผ ํ™œ์„ฑํ™”ํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

    ๋‚ด์žฅ HTTPS ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด config.json์— ๋‹ค์Œ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • ๋ฐฉํ™”๋ฒฝ ๋’ค์—์„œ ์‹คํ–‰
    Semaphore UI์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” IP๋กœ๋งŒ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด์•ˆ
    ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ Semaphore๋กœ๋งŒ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค.

์—…๋ฐ์ดํŠธ ๋ฐ ํŒจ์น˜ ๊ด€๋ฆฌโ€‹

๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค:

  • ์ตœ์‹  ์ƒํƒœ ์œ ์ง€
    ํ•ญ์ƒ ์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

  • ๋ณ€๊ฒฝ ๋กœ๊ทธ
    ์—…๋ฐ์ดํŠธ ์ „์— GitHub์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค.

  • ์ž๋™ ์—…๋ฐ์ดํŠธ
    Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ •๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์ทจ์•ฝ์  ์‹ ๊ณ โ€‹

์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜์…จ์Šต๋‹ˆ๊นŒ? Semaphore๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹ญ์‹œ์˜ค:

  • ์ฑ…์ž„ ์žˆ๋Š” ๊ณต๊ฐœ
    [email protected]์œผ๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด ์ฃผ์‹ญ์‹œ์˜ค.

์ทจ์•ฝ์  ํ•ด๊ฒฐ ๋ชฉํ‘œโ€‹

์‹ ๊ณ ๋œ ์ทจ์•ฝ์ ์€ ๋‹ค์Œ ๋ชฉํ‘œ ๊ธฐ๊ฐ„ ๋‚ด์— ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค:

  • Critical: 30์ผ ์ด๋‚ด
  • High: 60์ผ ์ด๋‚ด
  • Medium: 90์ผ ์ด๋‚ด
  • Low: ์ตœ์„ ์˜ ๋…ธ๋ ฅ, ์ผ๋ฐ˜์ ์œผ๋กœ 180์ผ ์ด๋‚ด

์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค์— ์˜ํ–ฅ์„ ์ฃผ๋ฉฐ ์‹ค์ œ๋กœ ์•…์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์ •๊ทœ ์ฃผ๊ธฐ ์™ธ์˜ ํŒจ์น˜๊ฐ€ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ณด์•ˆ ๋„๊ตฌโ€‹

์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์˜์กด์„ฑ์„ ๋ถ„์„ํ•˜๊ณ  ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด CodeQL, Codacy, Snyk, Renovate๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต๊ฐœ ์•…์šฉ ๊ธˆ์ง€
    ํŒจ์น˜๊ฐ€ ๋ฐฐํฌ๋˜๊ธฐ ์ „์—๋Š” ์ทจ์•ฝ์ ์„ ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

  • ๊ฐ์‚ฌ ํ‘œ์‹œ
    ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณด์•ˆ ์—ฐ๊ตฌ์ž๋ฅผ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ์— ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.