Skip to main content

๊ธฐ์กด CI ์‹œ์Šคํ…œ์—์„œ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ์‚ฌ์šฉํ•˜๊ธฐ

์ œ3์ž ์—ฐ์† ํ†ตํ•ฉ ์‹œ์Šคํ…œ์—์„œ CodeQL ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ GitHub์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ code scanning ๊ฒฝ๊ณ ๋Š” GitHub์—์„œ ์ƒ์„ฑ๋œ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž

Code scanning์€ ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub Code Security๋ฅผ ์ง€์›ํ•˜๋Š” ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

์ฐธ๊ณ  ํ•ญ๋ชฉ

์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ๋จผ์ € code scanning์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์–ดํ”Œ๋ผ์ด์–ธ์Šค์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์†Œ์œ ์ž๊ฐ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์—์„œ GitHub Code Security ์ •์ฑ…์„ ์„ค์ •ํ•œ ๊ฒฝ์šฐ code scanning์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๋ณด์•ˆ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ ์ •์ฑ… ์ ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ์กด CI ์‹œ์Šคํ…œ์—์„œ code scanning ์‚ฌ์šฉ ์•Œ์•„๋ณด๊ธฐ

GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub ๋‚ด์—์„œ code scanning์„ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ์™ธ๋ถ€ CI/CD(์—ฐ์† ํ†ตํ•ฉ ๋˜๋Š” ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ/๋ฐฐํฌ) ์‹œ์Šคํ…œ์˜ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ GitHub์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ3์ž ์‹œ์Šคํ…œ์— CodeQL CLI์„(๋ฅผ) ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ SARIF(์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ ๊ตํ™˜ ํ˜•์‹) 2.1.0 ๋ฐ์ดํ„ฐ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ œ3์ž ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” SARIF ํ˜•์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ SARIF ์ง€์›์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL CLI์€(๋Š”) ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ช…๋ น์ค„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI ์•Œ์•„๋ณด๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•˜๋Š” code scanning์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋Š” GitHub ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๋Š” code scanning์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ฒฝ๊ณ ์˜ ๋ถ„์„ ์›๋ณธ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์— ์—ฌ๋Ÿฌ ๋ถ„์„ ์›๋ณธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ํŽ˜์ด์ง€์—์„œ ๊ฐ ๋ถ„์„ ์›๋ณธ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฝ๊ณ  ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ

code scanning์œผ๋กœ ํ‘œ์‹œํ•  SARIF ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด GitHub๊ฐ€ GitHub Code Security๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๋ณด์•ˆ ๋ฐ ๋ถ„์„ ์„ค์ • ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ถ„์„ ๋„๊ตฌ ์„ค์ •ํ•˜๊ธฐ

๋จผ์ € ์„ ํƒํ•œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  CI ์‹œ์Šคํ…œ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CodeQL CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, CodeQL CLI ๋ฒˆ๋“ค์˜ ์ „์ฒด ์ฝ˜ํ…์ธ ๋ฅผ CodeQL code scanning ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ชจ๋“  CI ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI ์„ค์ •ํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CI ์‹œ์Šคํ…œ์˜ ์„œ๋ฒ„์—์„œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ถ„์„

CodeQL CLI ๋˜๋Š” ๋‹ค๋ฅธ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์„ ๋ถ„์„ํ•˜๊ณ  ์„ค์ •ํ•˜๋ ค๋Š” ์ฝ”๋“œ๊ฐ€ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ CI ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋นŒ๋“œ ๋ช…๋ น์„ ์ฐพ์•„๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ ์ค‘์ธ ์ •์  ๋ถ„์„ ๋„๊ตฌ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

CodeQL CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋จผ์ € ์ฝ”๋“œ์—์„œ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜์—ฌ SARIF ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ๋ถ„์„์„ ์œ„ํ•œ ์ฝ”๋“œ ์ค€๋น„ ๋ฐ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋ถ„์„์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub๋ฅผ ์‚ฌ์šฉํ•œ ์ธ์ฆ์šฉ ํ† ํฐ ์ƒ์„ฑ

๊ฐ CI ์„œ๋ฒ„์—๋Š” CodeQL CLI๋ฅผ ์‚ฌ์šฉํ•˜๋“ , REST API ๋˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๊ด€๊ณ„์—†์ด GitHub์— ๊ฒฐ๊ณผ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  GitHub App ๋˜๋Š” personal access token์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ† ํฐ ๋˜๋Š” security_events ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” GitHub App์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CI ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์ด ๋ฒ”์œ„์˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•˜๋Š” ๊ฒฝ์šฐ, ์ž ์ •์ ์œผ๋กœ ๋™์ผํ•œ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด security_events ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ์ƒˆ ํ† ํฐ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ CI ์‹œ์Šคํ…œ์˜ ๋น„๋ฐ€ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋งŒ๋“ค๊ธฐ ์ •๋ณด ๋ฐ ๊ฐœ์ธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub์— ๊ฒฐ๊ณผ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub์— SARIF ํŒŒ์ผ ์—…๋กœ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub์— ๊ฒฐ๊ณผ ์—…๋กœ๋“œ

์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  SARIF ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ GitHub๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ GitHub์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub์— SARIF ํŒŒ์ผ ์—…๋กœ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub์— ๊ฒฐ๊ณผ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub์— CodeQL ๋ถ„์„ ๊ฒฐ๊ณผ ์—…๋กœ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ๋ณธ์ ์œผ๋กœ code scanning์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๋ถ„์„๋งˆ๋‹ค ํ•˜๋‚˜์˜ SARIF ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ SARIF ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ๊ฐ€ ์›๋ž˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ถ„์„ ๋„๊ตฌ์—์„œ ๋ถ„์„ํ•˜๋Š” ๊ฐ ์–ธ์–ด ๋˜๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ฐ ๊ทœ์น™ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ SARIF ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ๋ถ„์„์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ SARIF ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ปค๋ฐ‹์— ๋Œ€ํ•ด ๋‘˜ ์ด์ƒ์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์—…๋กœ๋“œํ•˜๋ ค๋ฉด ๊ฐ ๊ฒฐ๊ณผ ์„ธํŠธ๋ฅผ ๊ณ ์œ ํ•œ ์„ธํŠธ๋กœ ์‹๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SARIF ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ ์ง€์ • ๋ฐฉ๋ฒ•์€ ๋ถ„์„ ๋ฉ”์„œ๋“œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ SARIF ์ง€์›์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.