- Aiden's Lab แแ ฒแแ ณแ แ ฆแแ ฅ
- Posts
- ๐ญแแ ตแแ ฆ แแ ฅแผแแ ขแจ แแ ชแซแ แ ตแแ ฉ แแ ฉแแ ณแ แ ฉ! - Policy as Codeแแ ณแซ แแ ซ แแ ณแผแแ กแผแแ ขแปแแ ฉ แแ ฅแแ ฅแแแ ฆ แแ กแฏแแ ฅแซแแ กแฏแแ ก?
๐ญแแ ตแแ ฆ แแ ฅแผแแ ขแจ แแ ชแซแ แ ตแแ ฉ แแ ฉแแ ณแ แ ฉ! - Policy as Codeแแ ณแซ แแ ซ แแ ณแผแแ กแผแแ ขแปแแ ฉ แแ ฅแแ ฅแแแ ฆ แแ กแฏแแ ฅแซแแ กแฏแแ ก?
แแ ฌแแ ณแซ DevOpsแแ ฆแแ ฅ แแ ฎแแ ฉแจแแ กแฎแแ ณแซ Policy as Code(PaC)แแ ด แแ ณแผแแ กแผ แแ ขแแ งแผแแ ช, แแ กแแแ ณแ แ ฉ PaCแแ ก แแ ฅแแ ฅแแแ ฆ แแ กแฏแแ ฅแซแแ ขแแ กแแ กแฏแแ ต แแ กแฏแแ กแแ ฉแธแแ ตแแ ก.
์๋ ํ์ธ์, Aidenโs Lab ๋ด์ค๋ ํฐ์ ๋๋ค.
์ต๊ทผ DevOps ์ ๊ณ์ ์์ฃผ ๋ฑ์ฅํ๋ ํค์๋๊ฐ ํ๋ ์์ต๋๋ค. ๋ฐ๋ก Policy as Code(PaC)์ธ๋ฐ์. Kubernetes์์ ์ ์ฑ ์ ๊ด๋ฆฌํ๋ ๋ํ์ ์ธ PaC ํด์ด Kyverno์ฃ .
์ ๋ DevOps ์์ง๋์ด๋ค๋ณด๋ ์ด๋ ๊ฒ ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ PaC์ ๋ํด ๊พธ์คํ ์กฐ์ฌํ๊ณ ์๋๋ฐ์. ์ด๋ฐ ์ต์ ํ๋ฆ ์์์ ์ฌ๋ฌ๋ถ๋ค๊ป ๋์์ด ๋๊ณ ์ Kyverno ํต์ฌ ๊ธฐ๋ฅ์ ์ค์ตํด๋ณด๋ ๊ฐ์ด๋๋ ์ ์ํ์์ต๋๋ค.
๊ทธ๋ฌ๋ค ๋ฌธ๋ ๊ถ๊ธํด์ก์ต๋๋ค. PaC๋ ์ ๋ฑ์ฅํ๊ฒ ๋ ๊ฑธ๊น์? ๋ ์ด๋ป๊ฒ ๋ฐ์ ํด์๊ณ ์์ผ๋ก ๋ฏธ๋์ PaC๋ ์ด๋ค ๋ชจ์ต์ผ๊น์?
๊ทธ๋์ ์ด๋ฒ ์ํฐํด์์ PaC์ ๋ฑ์ฅ๊ณผ ๋ณ์ฒ์ฌ์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๋ ค ํฉ๋๋ค. PaC์ ํต์ฌ ์ ์ ๊ณผ ๋ฐ์ ์์์ ๊ฐ์ด ์ดํด๋ณด๋ค๋ณด๋ฉด, PaC๋ฅผ ํจ์ฌ ๊น์ด ์ดํดํ์ค ์ ์์ ๊ฒ๋๋ค.
PaC๋ ์ ๋ฑ์ฅํ๊ฒ ๋์์๊น?
Policy as Code(PaC)๋ DevSecOps๊ฐ ๋๋๋๋ฉด์ ํจ๊ป ์ฃผ๋ชฉ๋ฐ๊ฒ ๋ ๊ฐ๋ ์ ๋๋ค. DevOps ๋ฌธํ์ ๋ณด์์ ๊ฒฐํฉํ DevSecOps์ ์ด๋ค ๊ด๋ จ์ด ์๋๊ณ ์?
PaC์์ ์ ์ฑ (Policy)์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์๊ณผ ์์ ์ฑ์ ์ํ ๊ฒ์ ๋๋ค. '์ด๋ค ๋ฆฌ์์ค๋ฅผ ๋๊ฐ, ์ผ๋งํผ, ์ธ์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง' ์ ์ํ๋ ๊ฒ์ด ์ ์ฑ ์ ๊ธฐ๋ณธ์ ์ธ ๋ชจ์ต ์ค ํ๋์ธ ๊ฑธ ์๊ฐํด๋ณด๋ฉด ๊ธ๋ฐฉ ์ดํด๋์ฃ . ๊ทธ๋ฌ๋ค๋ณด๋ ๊ธฐ์กด์ ์ ์ฑ ๊ด๋ฆฌ ๋ฐฉ์์ ๊ฐ์ ํ ์ ์๋ ๋์์ฑ ์ด์, ์ต์ ๋ณด์ ์๋ฃจ์ ์ผ๋ก PaC๋ผ๋ ์ปจ์ ์ด ๋ฑ์ฅํ ๊ฒ์ ๋๋ค.
๊ธฐ์กด์ ์ ์ฑ ๊ด๋ฆฌ์ ์ด๋ค ๋ฌธ์ ๊ฐ ์์๊ธธ๋ ์ฌ๋๋ค์ด PaC๋ผ๋ ๋์์ ์ฐพ๊ฒ ๋ ๊ฑธ๊น์? PaC๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ์ ์ ์ฑ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋์ด ์ง์ ๋ฌธ์๋ก ์ ๋ฆฌํด์ ๊ด๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
'์์ค์ฝ๋์ ์ํธ๋ฅผ ํฌํจํ์ง ์๋๋ค', '์ปจํ ์ด๋๋ root ์ ์ ๋ก ์คํํ์ง ์๋๋ค'์ ๊ฐ์ ์ ์ฑ ์ ์ ํ๋ค๋ฉด, ์ด ๋ด์ฉ์ ๋จผ์ ๋ฌธ์ํํด์ผ ํ์ต๋๋ค. ๊ทธ ๋ค์ ๊ฐ๋ฐ์๊ฐ ์์ ํ ๋ ์ด ์ ์ฑ ๋ฌธ์๋ฅผ ์ง์ ์ฐธ๊ณ ํ๊ณ ์ค์ํ๋์ง ๋ฆฌ๋ทฐํด์ผ ํ์ฃ . ๊ทธ๋์ ์ ์ฑ ๊ตฌํ(๋ฌธ์ํ)์ ์๊ฐ์ด ๋ง์ด ์์๋๊ณ , ์ ์ฑ ์ค์(์ง์ ๋ฆฌ๋ทฐ) ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ๋ ์ฌ์ ์ต๋๋ค.
๊ฒ๋ค๊ฐ ์กฐ์ง์ด ํ์ฅ๋๊ณ ์์ฐ๊ณผ ์ธ๋ ฅ์ด ๋์ด๋ ์๋ก ์ ์ฑ ์ค์๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๋ ธ๋ ฅ ์ญ์ ๋ ๋ค ์๋ฐ์ ์์์ต๋๋ค. ์ ์ํด์ผ ํ ์ ์ฑ ์ ์ ์ ๋ ๋ง์์ง๊ณ , ์ ์ฑ ์ ์ค์ํ๋์ง ํ์ธํด์ผ ํ๋ ๋ ธ๋ ฅ๋ ๊ทธ๋งํผ ๋ ๋ค์ฌ์ผ ํ๋ ๊ฑฐ์ฃ . ์ด๊ฒ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ์๋ฉด, 'PaC ์ด์ ์ ์ ์ฑ ์ ํ์ฅํ๊ธฐ ์ด๋ ค์ ๋ค'๊ณ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ค DevOps ๋ฌธํ๊ฐ ์ ์ฐจ ๋ฐ์ ํ๋ฉด์ ๋ณด์์ ๋ํ ์ธ์์ด ์ ์ฐจ ๋ฐ๋์์ต๋๋ค. ๋ณด์์ ๋ ์ด์ ๋ณด์ ์ ๋ฌธ๊ฐ๋ง ๋ค๋ค์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋, ์กฐ์ง์ ๊ฐ๋ฐ ๋ฐ ์ด์ ํ๊ณผ ํจ๊ป ํ์ ํ๊ณ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด์ฃ . ์ ์ฑ ๊ด๋ฆฌ ์ญ์ ๋ง์ฐฌ๊ฐ์ง์๊ณ , PaC๊ฐ ๋ฑ์ฅํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค.
PaC๋ ์ด๋ป๊ฒ ๊ตฌํ๋์์๊น?
PaC๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ค์ํ ํด์ด ๊ฐ๋ฐ๋์๊ณ , ๋ํ์ ์ธ ํด๋ก Open Policy Agent์ Kyverno๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
๋ณด๋ค ๋จผ์ ์ธ์์ ๋ฑ์ฅํ Open Policy Agent(OPA)๋ ๋ค์ํ ์ ์ฑ ์ ๋ธ๋ก์ ์กฐ๋ฆฝํ๋ฏ ํตํฉํด์ ๊ด๋ฆฌํ ์ ์๊ธธ ๋ฐ๋ผ๋ ์๋๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. OPA๋ ์ ์ฑ ์ ์ ์ํ ๋ ์์ฒด ๊ฐ๋ฐ ์ธ์ด์ธ Rego๋ฅผ ์ฌ์ฉํ๋๋ฐ์. OPA์ ๊ฐ๋ฐ ์๋๋ฅผ ์๊ฐํด๋ณด๋ฉด, ์์ฒด ๊ฐ๋ฐ ์ธ์ด ์ด๋ฆ์ด Rego์ธ ๊ฒ์ด ์์ ํ ์ฐ์ฐ์ ์๋ ๋ฏํฉ๋๋ค.
๊ทธ ๋ค์ ๋ฑ์ฅํ Kyverno๋ Kubernetes์ ์นํ์ ์ธ PaC ํด์ ๋๋ค. ๋ณ๋์ ์ ์ฑ ๊ฐ๋ฐ ์ธ์ด ์์ด Kubernetes ๋ฆฌ์์ค๋ฅผ ์ ์ํ๋ YAML ์์๋ง์ผ๋ก ์ ์ฑ ์ ์ ์ํ ์ ์๋ ๊ฒ์ด ํฐ ํน์ง์ธ ํด์ธ๋ฐ์. Kyverno ๊ฐ๋ฐ์ฌ Nirmata์ ์ฐฝ์ ์๋ค์ ์ปจํ ์ด๋ ์ํ๊ณ๊ฐ ์ ์ ๋ ๋ณต์กํ๊ฒ ์ฑ์ฅํ๋ ํ๋ฆ ์์์ ๊ธฐํ๋ฅผ ๋ฐ๊ฒฌํด Kyverno๋ฅผ ๊ฐ๋ฐํ๋ค๊ณ ํฉ๋๋ค.
์ด๋ ๊ฒ ๊ฐ๊ฐ ๋ค๋ฅธ ์ ๊ทผ๋ฒ์ผ๋ก ๋ฑ์ฅํ PaC ํด๋ค์ ํฅ๋ฏธ๋กญ๊ฒ๋ ๋น์ทํ ๋ฐ์ ์์์ ๊ฐ์ก์ต๋๋ค.
PaC ํด์ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํด์์๊น?
OPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก JSON ์์์ผ๋ก ์ ์ฑ ๊ฒํ ์์ฒญ์ ๋ฐ๊ณ , Rego๋ก ์์ฑ๋ ์ ์ฑ ๊ณผ JSON ํ์์ ์ ์ฑ ๋ชจ๋ ์ง์ํด์์ต๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์์คํ ์ ๋ํ ์ ์ฑ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๊ณ ์ ํ๋ ์๋์ธ๋ฐ์.

(์ด๋ฏธ์ง ์ถ์ฒ: https://www.openpolicyagent.org/docs)
2021๋ CNCF ์กธ์ (Graduated) ์ดํ OPA๋ Rego ์ ์ฑ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐ์ ์ง์คํ๊ณ , 2024๋ 12์ 1.0 ๋ฒ์ ์ ๋ฆด๋ฆฌ์ฆํ์ต๋๋ค. ํด๋น ๋ฒ์ ์์๋ Rego ๋ฌธ๋ฒ ๊ฐ์ ๋ฟ๋ง ์๋๋ผ Go์์ ํตํฉ๋ ์ ๋ณด์์ต๋๋ค. Go ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ OPA SDK์ Rego ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ธ๋ฐ์. OPA์ ์์ฒด ์ ์ฑ ์ธ์ด์ธ Rego์ ์ฌ์ฉ์ฑ์ ๊ฐ์ ํ์ฌ ์ ์ฑ ์์ง์ผ๋ก์์ ์ ์ง๋ฅผ ๋ค์ง๊ณ ์ ํ๋ ์๋๊ฐ ๋๋ณด์ด๋ ๋ฆด๋ฆฌ์ฆ์์ต๋๋ค.
๋ฐ๋ฉด, Kubernetes์ ์นํ์ ์ธ Kyverno์๋ ํฐ ๋ณํ๊ฐ ์์์ต๋๋ค. ๋ฐ๋ก Kubernetes ์ด์ธ ํ๊ฒฝ์์๋ Kyberno๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ๋ ๊ฒ์ธ๋ฐ์. JSON ํ์์ ์ ์ฑ ๊ฒํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ Kyverno CLI์ REST API ์๋ฒ ์ง์, Golang ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์๊น์ง Kyverno๋ฅผ ์ฌ์ฉํ ์ ์๋ ์์ญ์ ๋ํญ ๋ํ๋ ์ ๋ฐ์ดํธ์์ฃ .

(์ด๋ฏธ์ง ์ถ์ฒ: https://kyverno.github.io/kyverno-json/latest/)
์ด๋ ๊ฒ ๋ PaC ํด์ ๋ชจ๋ ํ์ฌ JSON ํ์์ ์ ์ฑ ๊ฒํ ์์ฒญ์ ์ง์ํ๊ฒ ๋์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ๊ฐ ํด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ ํ์ต๋๋ค. ๋ชจ๋ JSON์ด๋ผ๋ ๋ฒ์ฉ์ฑ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด๋ผ๋ ํ์ฅ์ฑ์ ๊ฐ์ ธ์ค๊ฒ ๋ ๊ฒ์ด์ฃ .
PaC์ ๋ฏธ๋๋?
AI๊ฐ ๋ฐ์ ํ๋ฉด์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ฌ์ดํด์ ํ์ํ ๋ง์ ์์ ์ด AI๋ก ๋์ฒด๋๊ณ ์์ต๋๋ค. ์ด๋ฐ ํ๋ฆ ์์์ PaC์ ๋ฏธ๋๋ ์ด๋ป๊ฒ ๋ ๊น์? ๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ์๋ฉด, PaC๋ ์คํ๋ ค ๋ ์ค์ํ ์ญ์ ์ํํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ต๊ทผ ๋ค์ํ ์์ ์ด AI ์์ด์ ํธ๋ก ์ํ๋๊ณ ์์ต๋๋ค. ์ธํ๋ผ ๊ด๋ฆฌ๋ ์์ธ๋ ์๋์ฃ . ์ด๋ PaC๋ AI ์์ด์ ํธ์ ํ๋ ์์ญ์ ๋ช ํํ ์ ํด์ฃผ๋ ์ญํ ์ ์ํํ ์ ์๋๋ฐ์. AI ์์ด์ ํธ๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ์ ์ํํ ์์ , ์ฌ๋์ ์น์ธ์ด ํ์ํ ์์ ๋ฑ์ PaC๋ก ์ ์ํ ์ ์๋ ๊ฒ์ ๋๋ค.
AI๊ฐ ์๋ก์ด ๋ถ์ผ๋ก ํ์ฅ๋๋ฉด์ ํ์ ๊ฐ๋ ์ผ๋ก ์๋ฆฌ์ก์ MCP(Model Context Protocol) ์ญ์ PaC์์ ์กฐํฉ์ด ํ์ํด์ง ๊ฒ์ ๋๋ค. MCP์ PaC๋ฅผ ๋์ ํ๋ฉด ์กฐ์ง์ด ์ฌ์ฉํ๋ AI ๋ชจ๋ธ๋ค์ด ์์ ๊ฐ๋ฅํ๊ณ ํ์ฉ๋๋ ๋ฒ์ ๋ด์์ ์๋ก ์ํธ์์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ์๋ฅผ ๋ค๋ฉด, ์๋ฃ์ฉ AI ๋ชจ๋ธ์ด ํ์ ๊ฐ์ธ์ ๋ณด์ ๋ฌด๋จ์ผ๋ก ์ ๊ทผํ๋ ํ์๋ฅผ ์ ์ฑ ์ผ๋ก ๋ง์ ์ ์๋ ๊ฒ์ด์ฃ .
์ด๋ ๊ฒ AI์ ์์ ํจ์จ์ฑ์ ์ ๊ทน ํ์ฉํ๋, ์์นซ ํฐ ํผํด๋ก ์ด์ด์ง ์ ์๋ ์์ญ์ผ๋ก์ ์ ๊ทผ์ PaC๊ฐ ๊ฐ๋๋ ์ผ์ฒ๋ผ ์ ๊ทผ์ ์ ํํ์ฌ ์์คํ ์์ ์ฑ์ ๋์ผ ์ ์์ ๊ฒ์ ๋๋ค. ์์์น ๋ชปํ ์ ์ฉ์ด๋ ํผํด๋ฅผ ๋ง์ ์ ์๋ ๋ณด์ ์๋ฃจ์ ์ผ๋ก ํ์ฉ๋ ์ ์๊ฒ ์ฃ .
๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ PaC๊ฐ ๋ฑ์ฅํ๊ฒ ๋ ๋ฐฐ๊ฒฝ๊ณผ ๋ฐ์ ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ AI ์๋์ PaC์ ์ญํ ๊น์ง ์์๋ดค์ต๋๋ค. ์ด๋ฒ ์ํฐํด์ ํตํด PaC๋ผ๋ ์ปจ์ ์ ๋ํด ์ ๋ณด๋ค ๋ ๊น์ด ์ดํดํ์ จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ๋ค์ ๊ธ์์ ๋ ํฅ๋ฏธ๋ก์ด IT ์ด์ผ๊ธฐ๋ก ๋์์ค๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
https://www.crowdstrike.com/en-gb/cybersecurity-101/cloud-security/policy-as-code
https://blog.gitguardian.com/what-is-policy-as-code-an-introduction-to-open-policy-agent/
https://kubernetespodcast.com/episode/101-open-policy-agent/
https://nirmata.com/2019/06/03/introducing-kyverno-kubernetes-native-policy-management
https://www.cncf.io/blog/2023/11/06/kyverno-expands-beyond-kubernetes/
https://devops.com/will-policy-as-code-still-matter-if-ai-generates-most-code/
โจ์ด๋ฒ ๋ด์ค๋ ํฐ๋ ์ด๋ ์ จ๋์?
์ด๋ฒ ๊ธ์์ ๋ค๋ฃฌ ์ฃผ์ ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ๋์ง ์๋ ค์ฃผ์ธ์! ๋ด์ค๋ ํฐ๋ฅผ ๋ ๋์ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํ๊ธฐ ์ํด ์๋ ํผ์์ ์งง์ ํผ๋๋ฐฑ์ ๋ฐ๊ณ ์์ด์.
๐ ํผ๋๋ฐฑ ๋ณด๋ด๊ธฐ (1~2๋ถ ์์)
์ฌ๋ฌ๋ถ๋ค์ ์์คํ ์๊ฒฌ์ Aidenโs Lab ๋ด์ค๋ ํฐ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค!
๐ญAidenโs Lab์์ ๋ ๋ง์ ์ํฐํด์ ๋ง๋๋ณด์ธ์
๋ฐํ๋ ๋ด์ค๋ ํฐ๋ฅผ ์์นด์ด๋นํ๊ณ ๋ค์ํ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ด์ ์ค์ ๋๋ค.