๊ธฐ์กด 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๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ๋ ์กฐ์ง ์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ GitHub.com์ ํผ๋ธ๋ฆญ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๋ณด์ ๋ฐ ๋ถ์ ์ค์ ๊ด๋ฆฌ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ถ์ ๋๊ตฌ ์ค์ ํ๊ธฐ
๋จผ์ ์ ํํ ๋ถ์ ๋๊ตฌ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ 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 ์ง์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.