Kubernetes hardening guidance

Executive summary

Kubernetesยฎ๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ํ™•์žฅ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์‹œ์Šคํ…œ์ด๋ฉฐ ์ข…์ข… ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ŠคํŒ…๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๊ฐ€์ƒํ™”๋œ ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌ์‹ ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ์— ๋น„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ์—ฐ์„ฑ๊ณผ ๋ณด์•ˆ ์ด์ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๊ธฐ๋ณธ ์ธํ”„๋ผ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋ฉด ๋‹ค๋ฅธ ๋ณต์žก์„ฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ณด๊ณ ์„œ๋Š” ์กฐ์ง์ด Kubernetes ๊ด€๋ จ ์œ„ํ—˜์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ์„ธ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์†์ƒ ์†Œ์Šค๋Š” ๊ณต๊ธ‰๋ง ์œ„ํ—˜, ์•…์˜์ ์ธ ์œ„ํ˜‘ ํ–‰์œ„์ž ๋ฐ ๋‚ด๋ถ€ ์œ„ํ˜‘์ž…๋‹ˆ๋‹ค.

๊ณต๊ธ‰๋ง ์œ„ํ—˜์€ ์™„ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์ถ• ์ฃผ๊ธฐ ๋˜๋Š” ์ธํ”„๋ผ ์ธ์ˆ˜์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•…์˜์ ์ธ ์œ„ํ˜‘ ํ–‰์œ„์ž๋Š” control plane, Worker nodes ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์€ Kubernetes ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ทจ์•ฝ์„ฑ๊ณผ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ์œ„ํ˜‘์€ ๊ด€๋ฆฌ์ž, ์‚ฌ์šฉ์ž ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ณต๊ธ‰์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ์ง์˜ Kubernetes ์ธํ”„๋ผ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋‚ด๋ถ€์ž๋Š” ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ๋‚จ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ๋ฐ ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” National Security Systems์˜ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋ฐ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ „๋žต์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  Kubernetes๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ๊ถŒ์žฅ๋˜๋Š” ๊ฐ•ํ™” ์กฐ์น˜ ๋ฐ ์™„ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋‹ค์Œ ์™„ํ™” ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ์ทจ์•ฝ์„ฑ ๋˜๋Š” ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋ฐ Pod๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์™€ ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ”ผํ•ด๋Ÿ‰ ์ œ์–ด

  • ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์ œํ•œํ•˜๊ณ  ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ฐ€์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ฐ ๊ด€๋ฆฌ์ž ์ œํ•œ ์ ‘๊ทผํ•˜๊ณ  ๊ณต๊ฒฉ ์ง€์ ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌ์ž๊ฐ€ ์•…์˜์ ์ธ ํ™œ๋™์˜ ์ž ์žฌ์ ์ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค.

  • ์ •๊ธฐ์ ์œผ๋กœ ๋ชจ๋“  Kubernetes ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ทจ์•ฝ์  ์Šค์บ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ„ํ—˜์ด ์ ์ ˆํ•˜๊ฒŒ ๊ณ ๋ ค๋˜๊ณ  ๋ณด์•ˆ ํŒจ์น˜๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ณด์•ˆ ๊ฐ•ํ™” ์ง€์นจ์€ Center for Internet Security Kubernetes ๋ฒค์น˜๋งˆํฌ, Docker ๋ฐ Kubernetes ๋ณด์•ˆ ๊ธฐ์ˆ  ๊ตฌํ˜„ ๊ฐ€์ด๋“œ, CISA(Cybersecurity and Infrastructure Security Agency) ๋ถ„์„ ๋ณด๊ณ ์„œ, Kubernetes ๋ฌธ์„œ [1], [2], [3]๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค., [6].

Introduction

K์™€ S ์‚ฌ์ด์— 8์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… "K8s"๋กœ ์•ฝ์นญ๋˜๋Š” Kubernetes๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ํ™•์žฅ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” open-source container-orchestration system ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๊ฐ€์ด๋“œ๋Š” ๋ณด์•ˆ ๋ฌธ์ œ์— ์ค‘์ ์„ ๋‘๊ณ  ๊ตญ๊ฐ€ ์•ˆ๋ณด ์‹œ์Šคํ…œ ๋ฐ ์ค‘์š” ์ธํ”„๋ผ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ ๊ฐ•ํ™” ์ „๋žต์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ๊ตญ๊ฐ€ ์•ˆ๋ณด ์‹œ์Šคํ…œ ๋ฐ ์ฃผ์š” ๊ธฐ๋ฐ˜ ์‹œ์„ค ์กฐ์ง์— ๋งž๊ฒŒ ์ œ์ž‘๋˜์—ˆ์ง€๋งŒ NSA ๋ฐ CISA๋Š” ์—ฐ๋ฐฉ ๋ฐ ์ฃผ, ์ง€๋ฐฉ, ๋ถ€์กฑ ๋ฐ ํ…Œ๋ฆฌํ† ๋ฆฌ(SLTT) ์ •๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์ด ๊ฐ€์ด๋“œ์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ณด์•ˆ์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ข…์ข… ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์„ ์•…์šฉํ•˜๋Š” ์ ˆ์ถฉ์•ˆ์ด ๋‚จ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ๋ณด๋‹ค ์•ˆ์ „ํ•œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ๋ณด์•ˆ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Recommendations

๊ฐ ์„น์…˜์˜ ์ฃผ์š” ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Kubernetes Pod security (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํฌ๋“œ ๋ณด์•ˆ)

    • ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์ถ•๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์„ฑ ๋˜๋Š” ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.

    • ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ ์ˆ˜์ค€์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์ˆ  ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      • ๊ถŒํ•œ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

      • hostPID, hostIPC, hostNetwork allowedHostPath์™€ ๊ฐ™์ด ์ž์ฃผ ์•…์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

      • ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฃจํŠธ ๊ถŒํ•œ ์ƒ์Šน์„ ํ—ˆ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

      • SELinuxยฎ, AppArmorยฎ ๋ฐ ๋ณด์•ˆ ์ปดํ“จํŒ… ๋ชจ๋“œ(seccomp)์™€ ๊ฐ™์€ ๋ณด์•ˆ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•…์šฉ์— ๋Œ€ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ ๋ฐ ๊ฐ•ํ™”

    • ๋ฐฉํ™”๋ฒฝ ๋ฐ RBAC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ control plane ๋…ธ๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ž ๊ธ‰๋‹ˆ๋‹ค.control plane ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • Kubernetes etcd ์„œ๋ฒ„์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

    • ์ธ์ฆ, ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก control plane ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์„ฑ, TLS(์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ) ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•œ ํ†ต์‹ .

    • ์ €์žฅ๋œ etcd๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณ„๋„์˜ TLS ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

    • ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” Pod์™€ ์„œ๋น„์Šค๋Š” ์ถ”๊ฐ€ ๋ถ„๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ•œ ์—ฌ์ „ํžˆ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ช…์‹œ์  deny network policy์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์•„๋‹Œ Kubernetes Secrets์— ์•”ํ˜ธํ™”๋œ ๋ชจ๋“  ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.๊ฐ•๋ ฅํ•œ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.๋น„๋ฐ€์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

    • ์ต๋ช… ๋กœ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋จ)

    • ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

    • ์‚ฌ์šฉ์ž, ๊ด€๋ฆฌ์ž, ๊ฐœ๋ฐœ์ž, ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ ์ธํ”„๋ผ ํŒ€์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ์—ญํ• ์„ ๊ฐ€์ง„ RBAC ์ •์ฑ…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ์‚ฌ ๋กœ๊น… ๋ฐ ์œ„ํ˜‘ ํƒ์ง€

    • ๊ฐ์‚ฌ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Œ).

    • ๋…ธ๋“œ, ํฌ๋“œ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€ ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    • ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋กœ๊น…์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ํด๋Ÿฌ์Šคํ„ฐ API(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐํŽ˜์ด์Šค) ๊ฐ์‚ฌ ์ด๋ฒคํŠธ ๋กœ๊ทธ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฉ”ํŠธ๋ฆญ ๋กœ๊ทธ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ, Pod seccomp ๋กœ๊ทธ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ์‚ฌ ๋กœ๊ทธ ๋“ฑ)

    • ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋กœ๊ทธ๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

    • ์กฐ์ง์˜ ํด๋Ÿฌ์Šคํ„ฐ์— ๋งž๋Š” ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ๊ด€ํ–‰

    • ๋ณด์•ˆ ํŒจ์น˜ ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฆ‰์‹œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ์ฃผ๊ธฐ์ ์œผ๋กœ ์ทจ์•ฝ์  ์Šค์บ” ๋ฐ ์นจํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ™˜๊ฒฝ์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

Architectural overview (์•„ํ‚คํ…์ณ ๊ฐœ์š”)

control plane์€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ์‹คํ–‰ํ•  ์ปจํ…Œ์ด๋„ˆ ์˜ˆ์•ฝ, ์‹คํŒจ ๊ฐ์ง€/๋Œ€์‘, ๋ฐฐํฌ ํŒŒ์ผ์— ๋‚˜์—ด๋œ ๋ณต์ œ๋ณธ ์ˆ˜๊ฐ€ ์ถฉ์กฑ๋˜์ง€ ์•Š์„ ๋•Œ ๊ทธ๋ฆฌ๊ณ  ์ƒˆ ํŒŒ๋“œ ์‹œ์ž‘์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ชจ๋‘ control plane์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • Controller manager โ€“ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ Pod๋ฅผ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์ˆ˜์˜ Pod๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ , ๋…ธ๋“œ ์†์‹ค์— ๋Œ€์‘ํ•˜๋Š” ๋“ฑ Kubernetes ํ™˜๊ฒฝ์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ๊ฐ์ง€ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • Cloud Controller manager โ€“ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ์— ์‚ฌ์šฉ๋˜๋Š” ์„ ํƒ์  ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.ํด๋ผ์šฐ๋“œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” Cloud Service Provider(ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ณต๊ธ‰์ž)์™€ ์ธํ„ฐํŽ˜์ด์Šคํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํ‚น์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • Kubernetes application programming interface (API) server โ€“ ๊ด€๋ฆฌ์ž๊ฐ€ Kubernetes๋ฅผ ์ง€์‹œํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.๋”ฐ๋ผ์„œ API ์„œ๋ฒ„๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Control Plane ์™ธ๋ถ€์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ Control Plane ๋…ธ๋“œ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Etcd โ€“ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ์— ๊ด€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์˜๊ตฌ ๋ฐฑ์—… ์ €์žฅ์†Œ.Etcd๋Š” ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ API ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Scheduler โ€“ Worker nodes์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.Kube-scheduler๋Š” Control Plane ๋‚ด์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes Worker nodes๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ „์šฉ ๋ฌผ๋ฆฌ์  ๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค.์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ Worker nodes๋Š” Control Plane์—์„œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ํ—ˆ์šฉํ•˜๋Š” ๋‹ค์Œ ๋‘ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

  • Kubelet โ€“ ๊ฐ Worker nodes์—์„œ ์‹คํ–‰ํ•˜์—ฌ Pod ์‹คํ–‰์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๊ณ  ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Kube-proxy โ€“ ํ˜ธ์ŠคํŠธ์˜ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํŒจํ‚ท ๋ผ์šฐํŒ…์„ ๋ณด์žฅํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Cloud Service Provider Kubernetes ์„œ๋น„์Šค ๋˜๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค Kubernetes ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŒ…๋ฉ๋‹ˆ๋‹ค.Cloud Service Provider๋Š” ์ข…์ข… ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.๊ด€๋ฆฌ๋˜๋Š” Kubernetes ์„œ๋น„์Šค์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ธก๋ฉด์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ Cloud Service Provider ๊ตฌ์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ง์€ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์™€ ๊ฐ™์€ ์ผ๋ถ€ Kubernetes ์„œ๋น„์Šค ์ธก๋ฉด์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Kubernetes ํ™˜๊ฒฝ์„ ์„ค๊ณ„ํ•  ๋•Œ ์กฐ์ง์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ฑ…์ž„์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Threat model(์œ„ํ˜‘ ๋ชจ๋ธ)

Kubernetes๋Š” ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ปดํ“จํŒ… ์ „๋ ฅ ์ ˆ๋„์˜ ์ค‘์š”ํ•œ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ํ†ต์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋„์šฉ์ด ์ฃผ์š” ๋ชฉํ‘œ์ง€๋งŒ ์ปดํ“จํŒ… ๋Šฅ๋ ฅ(์ข…์ข… ์•”ํ˜ธํ™”ํ ์ฑ„๊ตด์šฉ)์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ ˆ๋„ ์™ธ์—๋„ ์‚ฌ์ด๋ฒ„ ๊ณต๊ฒฉ์ž๋Š” Kubernetes๋ฅผ ๋Œ€์ƒ์œผ๋กœ DDos๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์œ„ํ˜‘์€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

  • Supply Chain - ๊ณต๊ธ‰๋ง์— ๋Œ€ํ•œ ๊ณต๊ฒฉ ๋ฐฉ์‹์€ ๋‹ค์–‘ํ•˜๊ณ  ์™„ํ™”ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.์œ„ํ—˜์€ ์ ์ด ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ „๋ณต์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.์—ฌ๊ธฐ์—๋Š” ์ตœ์ข… ์ œํ’ˆ์„ ๊ณต๊ธ‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ œํ’ˆ ๊ตฌ์„ฑ ์š”์†Œ, ์„œ๋น„์Šค ๋˜๋Š” ์ง์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.์ถ”๊ฐ€์ ์ธ ๊ณต๊ธ‰๋ง ์œ„ํ—˜์—๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํƒ€์‚ฌ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ณต๊ธ‰๋ง ์†์ƒ์€ ๋‹ค์Œ์„ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ Kubernetes์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ปจํ…Œ์ด๋„ˆ/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ โ€“ Kubernetes์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํƒ€์‚ฌ ์ข…์†์„ฑ์˜ ๋ณด์•ˆ์€ ๊ฐœ๋ฐœ์ž์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ๊ฐœ๋ฐœ ์ธํ”„๋ผ์˜ ๋ฐฉ์–ด์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.์ œ3์ž์˜ ์•…์„ฑ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž์—๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ์— ๊ณต๊ฒฉ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ โ€“ ๊ฐ ๋…ธ๋“œ์—๋Š” ์ €์žฅ์†Œ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜๋œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋กœ์ปฌ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์˜ ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋ถ„๋ฆฌ๊ฐ€ ๋ถˆ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ธํ”„๋ผ โ€“ Kubernetes๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์—๋Š” ์ž์ฒด ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ํ•˜๋“œ์›จ์–ด ์ข…์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.Worker nodes ๋˜๋Š” Control Plane์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์Šคํ…œ์ด ์†์ƒ๋˜๋ฉด ์‚ฌ์ด๋ฒ„ ํ–‰์œ„์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ๊ณต๊ฒฉ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Malicious Threat Actor (์•…์˜์ ์ธ ์œ„ํ˜‘ ํ–‰์œ„์ž) โ€“ ์•…์˜์ ์ธ ํ–‰์œ„์ž๋Š” ์ข…์ข… ์ทจ์•ฝ์„ฑ์„ ์•…์šฉํ•˜๊ฑฐ๋‚˜ ์†Œ์…œ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ›”์ณ ์›๊ฒฉ ์œ„์น˜์—์„œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์Šต๋‹ˆ๋‹ค.Kubernetes ์•„ํ‚คํ…์ฒ˜๋Š” ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ์›๊ฒฉ ์•…์šฉ์— ์ž ์žฌ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

    • Control Plane โ€“ Kubernetes Control Plane์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ†ต์‹ ํ•˜๋Š” ๋งŽ์€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๋Š” ์ ์ ˆํ•œ ์•ก์„ธ์Šค ์ œ์–ด๊ฐ€ ์—†๋Š” ๋…ธ์ถœ๋œ Control Plane ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž์ฃผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

    • Worker nodes โ€“ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ Worker nodes๋Š” ์‚ฌ์ด๋ฒ„ ํ–‰์œ„์ž๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ์•…์šฉํ•  ์ˆ˜ ์žˆ๋Š” kubelet ๋ฐ kube-proxy ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.๋˜ํ•œ Worker nodes๋Š” ์ž ๊ธด Control Plane ์™ธ๋ถ€์— ์กด์žฌํ•˜๋ฉฐ ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ€“ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ณตํ†ต ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค.ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์ž์ฃผ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์›๊ฒฉ ์‚ฌ์ด๋ฒ„ ๊ณต๊ฒฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฐ ๋‹ค์Œ ์•กํ„ฐ๋Š” ์ด๋ฏธ ์†์ƒ๋œ ํฌ๋“œ์—์„œ ํ”ผ๋ฒ—ํ•˜๊ฑฐ๋‚˜ ๋…ธ์ถœ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚ด๋ถ€์ ์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๊ถŒํ•œ์„ ์—์Šค์ปฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‚ด๋ถ€์ž ์œ„ํ˜‘ โ€“ ์œ„ํ˜‘ ํ–‰์œ„์ž๋Š” ์กฐ์ง ๋‚ด์—์„œ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ธ์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์กฐ์ง ๋‚ด ๊ฐœ์ธ์—๊ฒŒ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์ง€์‹๊ณผ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๊ด€๋ฆฌ์ž โ€“ Kubernetes ๊ด€๋ฆฌ์ž๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ™˜๊ฒฝ ๋‚ด์—์„œ ์ž„์˜์˜ ๋ช…๋ น ์‹คํ–‰์„ ํฌํ•จํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Kubernetes ์‹œํ–‰ RBAC ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ๋ฏผ๊ฐํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ Kubernetes์—๋Š” 2์ธ ๋ฌด๊ฒฐ์„ฑ ์ œ์–ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ด€๋ฆฌ ๊ณ„์ •์ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๊ด€๋ฆฌ์ž๋Š” ์ข…์ข… ์‹œ์Šคํ…œ์ด๋‚˜ ํ•˜์ดํผ๋ฐ”์ด์ €์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” Kubernetes ํ™˜๊ฒฝ์„ ์†์ƒ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉ์ž โ€“ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์ž๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์•Œ๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์ˆ˜์ค€์˜ ์•ก์„ธ์Šค๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด ๋˜๋Š” ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋˜๋Š” ์ธํ”„๋ผ ์ œ๊ณต์ž โ€“ Kubernetes ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฌผ๋ฆฌ์  ์‹œ์Šคํ…œ ๋˜๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” Kubernetes ํ™˜๊ฒฝ์„ ์†์ƒ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Cloud Service Provider์—๋Š” ์ข…์ข… ๊ถŒํ•œ ์žˆ๋Š” ๊ด€๋ฆฌ์ž๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ  ๋ฐ ๊ด€๋ฆฌ ์ œ์–ด ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes Pod security (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํฌ๋“œ ๋ณด์•ˆ)

Pod๋Š” ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ Kubernetes ๋‹จ์œ„์ด๋ฉฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ ๊ทธ๋ฆผ์€ Pod์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฒฉ ์ง€์ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

"Non-root" containers and "rootless" container engines

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

  • Non-root containers โ€“ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ๊ทธ๋ฃน ๊ตฌ์„ฑ์› ์ž๊ฒฉ์„ ๊ฐ€์ง„ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹Œ ์„ค์ •์€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ๋นŒ๋“œ๋  ๋•Œ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” Dockerfile์˜ ์˜ˆ๋Š” ๋ถ€๋ก A: ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ Dockerfile์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.๋˜๋Š” Kubernetes๋Š” 0์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•˜๋Š” SecurityContext:runAsUser๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pod์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.runAsUser ์ง€์‹œ๋ฌธ์€ ๋ฐฐํฌ ์‹œ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‹คํ–‰์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ NSA ๋ฐ CISA๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•  ์ปจํ…Œ์ด๋„ˆ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.๋นŒ๋“œ ์‹œ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‹คํ–‰์„ ํ†ตํ•ฉํ•˜๋ฉด ๋ฃจํŠธ ๊ถŒํ•œ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๋Š” ๋” ๋‚˜์€ ํ™•์‹ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Rootless container engines โ€“ ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ถŒํ•œ์ด ์—†๋Š” ์ปจํ…์ŠคํŠธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‹คํ–‰์€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€์ ์—์„œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹คํ–‰์€ ํ˜ธ์ŠคํŠธ์—์„œ ์—”์ง„์˜ ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ์— ๋‹ค์‹œ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.๋ฃจํŠธ๊ฐ€ ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ํšจ๊ณผ์ ์ธ ๋ณด์•ˆ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ๋งŽ์€ ์—”์ง„์ด ํ˜„์žฌ ์‹คํ—˜์šฉ์œผ๋กœ ์ถœ์‹œ๋˜์–ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.๊ด€๋ฆฌ์ž๋Š” ๋ฒค๋”๊ฐ€ Kubernetes์™€ ํ˜ธํ™˜๋˜๋Š” ์•ˆ์ •์ ์ธ ๋ฒ„์ „์„ ์ถœ์‹œํ•  ๋•Œ ์ด ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์ธ์‹ํ•˜๊ณ  ๋ฃจํŠธ ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์ฑ„ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Immutable container file systems

๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์ฒด ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๋Œ€๋ถ€๋ถ„ ๋ฌด์ œํ•œ ์‹คํ–‰์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰์„ ์–ป์€ ์‚ฌ์ด๋ฒ„ ์•กํ„ฐ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ž ๊ธ€ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งŽ์€ ์•…์šฉ ํ›„ ํ™œ๋™์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ์€ ํ•ฉ๋ฒ•์ ์ธ ์ปจํ…Œ์ด๋„ˆ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ ์ž ์žฌ์ ์œผ๋กœ ์ถฉ๋Œ์ด๋‚˜ ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ๋ฒ•ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์†์ƒ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Kubernetes ๊ด€๋ฆฌ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์“ฐ๊ธฐ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•ด ๋ณด์กฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํƒ‘์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ถˆ๋ณ€ ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ˆ๋Š” ๋ถ€๋ก B: ์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ๋ฐฐํฌ ํ…œํ”Œ๋ฆฟ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Building secure container images

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ์ €์žฅ์†Œ์—์„œ ๊ฐ€์ ธ์˜จ ๊ธฐ์กด ์ด๋ฏธ์ง€ ์œ„์— ๋นŒ๋“œํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ํ™˜๊ฒฝ ๋‚ด์˜ ์ €์žฅ์†Œ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ œ์–ด๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ์Šน์ธ ์ œ์–ด์™€ ๊ฐ™์€ ํ”Œ๋žซํผ ์ˆ˜์ค€ ์ œํ•œ๊ณผ ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€ ์ œํ•œ์ด ๋ชจ๋‘ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes admission controllers, ํƒ€์‚ฌ ๋„๊ตฌ ๋ฐ ์ผ๋ถ€ Cloud Service Provider ๊ธฐ๋ณธ ์†”๋ฃจ์…˜์€ ๋””์ง€ํ„ธ ์„œ๋ช…๋œ ์ด๋ฏธ์ง€๋งŒ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ญ๋ชฉ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ด๋ฏธ์ง€ ์Šค์บ”์€ ๋ฐฐํฌ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ์›Œํฌํ”Œ๋กœ ์ „์ฒด์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์•Œ๋ ค์ง„ ์ทจ์•ฝ์  ๋˜๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํฌํŠธ๋‚˜ ๊ถŒํ•œ๊ณผ ๊ฐ™์€ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์„ ์‹๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šค์บ๋‹์€ ๋˜ํ•œ ์ง€์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ทจ์•ฝ์„ฑ ๊ฐ์ง€์— ๋Œ€ํ•œ ์˜คํƒ์ง€๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋“ค์€ ๊ฒฝ๊ณ ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ„์ฃผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด๋ฏธ์ง€ ์Šค์บ๋‹์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ admission controller๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. admission controller๋Š” ๊ฐœ์ฒด๊ฐ€ ์ง€์†๋˜๊ธฐ ์ „์— ์š”์ฒญ์ด ์ธ์ฆ๋˜๊ณ  ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ ํ›„์— Kubernetes API์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Kubernetes ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๋˜๋Š” ๋…์  ์›นํ›…์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด admission controller๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์›นํ›… ๊ตฌ์„ฑ[4]์— ์ •์˜๋œ ์กฐ์ง์˜ ๋ณด์•ˆ ์ •์ฑ…์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐฐํฌ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

11 Ways (Not) to Get Hacked https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/

Pod security enforcement

Pod์— ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด Kubernetes์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.Pod ๋ณด์•ˆ ์Šน์ธ์ด๋ผ๊ณ  ํ•˜๋Š” ๋ฒ ํƒ€1 ๋ฆด๋ฆฌ์Šค ๊ธฐ๋Šฅ โ€“ ํ”„๋กœ๋•์…˜ Kubernetes ๊ด€๋ฆฌ์ž๋Š” ์ด ๊ธฐ๋Šฅ์ด Kubernetes ๋ฒ„์ „ 1.23์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Pod ๋ณด์•ˆ ์Šน์ธ์„ ์ฑ„ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.ํฌ๋“œ ๋ณด์•ˆ ์Šน์ธ์€ ํฌ๋“œ๋ฅผ ํŠน๊ถŒ, ๊ธฐ์ค€ ๋ฐ ์ œํ•œ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ PSP๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.Pod ๋ณด์•ˆ ์Šน์ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์˜จ๋ผ์ธ ์„ค๋ช…์„œ2์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.ํฌ๋“œ ๋ณด์•ˆ ์ •์ฑ…(PSP)์ด๋ผ๊ณ  ํ•˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ - ํฌ๋“œ ๋ณด์•ˆ ์Šน์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋™์•ˆ PSP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ฆฌ์ž๋Š” ๋ถ€๋ก C: ํฌ๋“œ ๋ณด์•ˆ ์ •์ฑ…์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PSP๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Kubernetes ์†”๋ฃจ์…˜ ์™ธ์—๋„ Kubernetes admission controllers๋กœ ์ž์ฃผ ๊ตฌํ˜„๋˜๋Š” ํƒ€์‚ฌ ์†”๋ฃจ์…˜์€ ์ถ”๊ฐ€๋กœ ์„ธ๋ถ„ํ™”๋œ ์ •์ฑ… ์ œ์–ด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์€ ์ด ๋ฌธ์„œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€๋งŒ ๊ด€๋ฆฌ์ž๋Š” ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ์„ ํƒ์ƒ‰ํ•˜์—ฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†”๋ฃจ์…˜์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Protecting Pod service account tokens (Pod ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ๋ณดํ˜ธ)

๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes๋Š” ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ ์‹œ ํฌ๋“œ ๋‚ด์— ๊ณ„์ •์˜ ๋น„๋ฐ€ ํ† ํฐ์„ ํƒ‘์žฌํ•ฉ๋‹ˆ๋‹ค. Kubernetes ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„œ๋น„์Šค ๊ณ„์ •์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์†์ƒ๋˜๋ฉด ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ Pod์˜ ๊ณ„์ • ํ† ํฐ์„ ์ˆ˜์ง‘ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์†์ƒ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋น„์Šค ๊ณ„์ •์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ Kubernetes ๊ด€๋ฆฌ์ž๋Š” Pod ์‚ฌ์–‘์ด ํƒ‘์žฌ๋˜๋Š” ๋น„๋ฐ€ ํ† ํฐ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Pod์˜ YAML ์‚ฌ์–‘์—์„œ "automountServiceAccountToken: false" ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ”„๋กœ๋น„์ €๋‹๋œ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ณ„์ • ํ† ํฐ์„ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ pod ๊ถŒํ•œ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด rbac ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. Rbac์— ๋Œ€ํ•œ ์ž์ƒˆํ•œ ๋‚ด์šฉ์€ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”

Hardening container environments

์ผ๋ถ€ ํ”Œ๋žซํผ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ™˜๊ฒฝ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜ ๋˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด:

  • ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆํ™” โ€“ ํ•˜์ดํผ๋ฐ”์ด์ €๋Š” ์šด์˜ ์ฒด์ œ๊ฐ€ ์•„๋‹Œ ํ•˜๋“œ์›จ์–ด์— ์˜์กดํ•˜์—ฌ ๊ฐ€์ƒํ™” ๊ฒฝ๊ณ„๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ดํผ๋ฐ”์ด์ € ๊ฒฉ๋ฆฌ๋Š” ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ๋ณด๋‹ค ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.Windowsยฎ ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ๊ธฐ๋ณธ ์ œ๊ณต Windows ํ•˜์ดํผ๋ฐ”์ด์ €์ธ Hyper-Vยฎ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ํ•œ ์ผ๋ถ€ ๋ณด์•ˆ ์ค‘์‹ฌ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ์‹ฌ์ธต ๋ฐฉ์–ด๋ฅผ ์œ„ํ•ด ๊ฒฝ๋Ÿ‰ ํ•˜์ดํผ๋ฐ”์ด์ € ๋‚ด์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ดํผ๋ฐ”์ด์ € ์ง€์› ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ธŒ๋ ˆ์ดํฌ์•„์›ƒ์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

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

Network separation and hardening (๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ ๋ฐ ๊ฐ•ํ™”)

ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํ‚น์€ Kubernetes์˜ ์ค‘์‹ฌ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ, Pod, ์„œ๋น„์Šค ๋ฐ ์™ธ๋ถ€ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes ๋ฆฌ์†Œ์Šค๋Š” ๊ฒฉ๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ ์ธก๋ฉด ์ด๋™ ๋˜๋Š” ์—์Šค์ปฌ๋ ˆ์ด์…˜์„ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๋ถ„๋ฆฌ ๋ฐ ์•”ํ˜ธํ™”๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์‚ฌ์ด๋ฒ„ ํ–‰์œ„์ž์˜ ์ด๋™ ๋ฐ ํ™•๋Œ€๋ฅผ ์ œํ•œํ•˜๋Š” ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Key points
* network policies๊ณผ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
* Secure the control plane.
* ํŠธ๋ž˜ํ”ฝ ๋ฐ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(์˜ˆ: Secret)๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

Namespaces

Kubernetes ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์—ฌ๋Ÿฌ ๊ฐœ์ธ, ํŒ€ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์ž๋™์œผ๋กœ ๊ฒฉ๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” RBAC ๋ฐ ๋„คํŠธ์›Œํ‚น ์ •์ฑ…์„ ํ†ตํ•ด ๊ถŒํ•œ ๋ถ€์—ฌ ๊ทœ์น™์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„์— ๋ ˆ์ด๋ธ”์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ์ •์ฑ… ์™ธ์—๋„ ๋ฆฌ์†Œ์Šค ์ •์ฑ…์€ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ˆ˜์ค€์—์„œ Pod๋ฅผ ๋” ์ž˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ ๊ฐœ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉฐ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • kube-system

  • kube-public

  • default

์‚ฌ์šฉ์ž ํฌ๋“œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค์šฉ์œผ๋กœ ์˜ˆ์•ฝ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ kube-system ๋˜๋Š” kube-public์— ๋ฐฐ์น˜ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.๋ถ€๋ก E: ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ˆ์— ํ‘œ์‹œ๋œ YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” Pod์™€ ์„œ๋น„์Šค๋Š” ์ถ”๊ฐ€ ๋ถ„๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ•œ ์—ฌ์ „ํžˆ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Network policies

๋ชจ๋“  ํฌ๋“œ๋Š” ์ž์ฒด ํด๋Ÿฌ์Šคํ„ฐ ์ „์šฉ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํฌํŠธ ํ• ๋‹น, ์ด๋ฆ„ ์ง€์ •, ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ (VM) ๋˜๋Š” ๋ฌผ๋ฆฌ์  ํ˜ธ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” Pod๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๊ณ  ์ฃฝ์€ ๋ฐฐํฌ์—์„œ Pod๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Pod IP ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณ ์ •๋œ Pod IP์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Kubernetes ์„œ๋น„์Šค๋Š” IP ์ฃผ์†Œ ๋ณ€๊ฒฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋Š” ํŒŒ๋“œ ๊ตฌ์„ฑ์˜ ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•œ ๋…ผ๋ฆฌ์  ํŒŒ๋“œ ์„ธํŠธ์— ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ถ”์ƒ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ์†Œ๋Š” ์„œ๋น„์Šค ์ˆ˜๋ช…๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ ์„œ๋น„์Šค๊ฐ€ ์‚ด์•„์žˆ๋Š” ๋™์•ˆ์—๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ†ต์‹ ์€ ์„œ๋น„์Šค์˜ ๊ตฌ์„ฑ์›์ธ ํŒŒ๋“œ ๊ฐ„์— ์ž๋™์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋Š” NodePort ๋˜๋Š” LoadBalancer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€์ ์œผ๋กœ ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋ ค๋ฉด TLS ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์•”ํ˜ธํ™”ํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค. TLS๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉด Kubernetes๋Š” ์„œ๋น„์Šค๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ NodePort ๋ฐ LoadBalancer๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” NetworkPolicy API๋ฅผ ์ง€์›ํ•˜๋Š” CNI(Container Network Interface) ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. pod๋ฅผ ์„ ํƒํ›„ podSelector ๋ฐ/๋˜๋Š” namespaceSelector ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.๋„คํŠธ์›Œํฌ ์ •์ฑ…์˜ ์˜ˆ๋Š” ๋ถ€๋ก F: ๋„คํŠธ์›Œํฌ ์ •์ฑ…์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Network Policies Checklist

- NetworkPolicy API๋ฅผ ์ง€์›ํ•˜๋Š” CNI ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ
- podSelector ๋ฐ/๋˜๋Š” namespaceSelector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pod๋ฅผ ์„ ํƒํ•˜๋Š” ์ •์ฑ… ์ƒ์„ฑ
- ๊ธฐ๋ณธ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ˆ˜์‹  ๋ฐ ์†ก์‹  ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.์„ ํƒ๋˜์ง€ ์•Š์€ Pod๊ฐ€ kube-system์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฒฉ๋ฆฌ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
- LimitRange ๋ฐ ResourceQuota ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” Pod ์ˆ˜์ค€์—์„œ ๋ฆฌ์†Œ์Šค ์ œํ•œ

๋„คํŠธ์›Œํฌ ์ •์ฑ… ํ˜•์‹์€ ํด๋Ÿฌ์Šคํ„ฐ์— ์‚ฌ์šฉ๋˜๋Š” CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ๋ชจ๋“  Pod๋ฅผ ์„ ํƒํ•˜๋Š” ๊ธฐ๋ณธ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ˆ˜์‹  ๋ฐ ์†ก์‹  ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•˜๊ณ  ์„ ํƒ๋˜์ง€ ์•Š์€ Pod๊ฐ€ ๊ฒฉ๋ฆฌ๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ •์ฑ…์€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ์ œํ•œ์„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ IP ์ฃผ์†Œ๋Š” ipBlock์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์‹  ๋ฐ ์†ก์‹  ์ •์ฑ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ CNI ํ”Œ๋Ÿฌ๊ทธ์ธ, ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž ๋˜๋Š” ์„œ๋น„์Šค ๊ตฌํ˜„์€ NetworkPolicy ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ฃผ์†Œ ์žฌ์ž‘์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Resource policies (๋ฆฌ์†Œ์Šค ์ •์ฑ…)

LimitRanges, ResourceQuotas ๋ฐ Process ID Limits๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๋…ธ๋“œ ๋˜๋Š” ํŒŒ๋“œ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ์ •์ฑ…์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ปดํ“จํŒ… ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ๊ณต๊ฐ„์„ ์˜ˆ์•ฝํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ๊ณ ๊ฐˆ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

LimitRange ์ •์ฑ…์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ตœ๋Œ€ ์ปดํ“จํŒ… ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ํŒŒ๋“œ๋‹น ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.๋„ค์ž„์ŠคํŽ˜์ด์Šค๋‹น ํ•˜๋‚˜์˜ LimitRange ์ œ์•ฝ ์กฐ๊ฑด๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜ˆ์ œ YAML ํŒŒ์ผ์€ ๋ถ€๋ก G: ์˜ˆ์ œ LimitRange๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ฐ ํฌ๋“œ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๊ฐœ๋ณ„์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” LimitRange ์ •์ฑ…๊ณผ ๋‹ฌ๋ฆฌ ResourceQuotas๋Š” ์ „์ฒด CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ์ œํ•œ๊ณผ ๊ฐ™์ด ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ์ œํ•œ์ž…๋‹ˆ๋‹ค. ResourceQuota ์ •์ฑ…์˜ ์˜ˆ๋Š” ๋ถ€๋ก H: ResourceQuota ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์šฉ์ž๊ฐ€ LimitRange ๋˜๋Š” ResourceQuota ์ •์ฑ…์„ ์œ„๋ฐ˜ํ•˜๋Š” ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํฌ๋“œ ์ƒ์„ฑ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

Process ID(PID)๋Š” ๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค์ด๋ฉฐ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค ์ œํ•œ์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ณ  ์†Œ์ง„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PID ์†Œ์ง„์€ ํ˜ธ์ŠคํŠธ ๋ฐ๋ชฌ(์˜ˆ: kubelet ๋ฐ kube-proxy)์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ๋…ธ๋“œ PID ์ œํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์‚ฌ์šฉ ๋ฐ Kubernetes ์‹œ์Šคํ…œ ๋ฐ๋ชฌ์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ˆ˜์˜ PID๋ฅผ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Pod PID ์ œํ•œ์€ ๊ฐ Pod์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ถ•์ถœ ์ •์ฑ…(Eviction policies)์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค์ž‘๋™ํ•˜๊ณ  ๋น„์ •์ƒ์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋Š” Pod๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ eviction policies์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ณ„์‚ฐ ๋ฐ ์‹œํ–‰๋ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ limit๋ฅผ ๊ฐ•์ œํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Control plane hardening(๊ฐ•ํ™”)

Control plane์€ Kubernetes์˜ ํ•ต์‹ฌ์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด๊ณ , ์ƒˆ Pod๋ฅผ ์˜ˆ์•ฝํ•˜๊ณ , Secrets๋ฅผ ์ฝ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏผ๊ฐํ•œ ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์— control plane์€ ๊ณ ๋„๋กœ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. TLS ์•”ํ˜ธํ™”, RBAC ๋ฐ ๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ๊ตฌ์„ฑ ์™ธ์—๋„ ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ control plane์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes API ์„œ๋ฒ„๋Š” ์˜ˆ์ƒ ํŠธ๋ž˜ํ”ฝ๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•˜๋Š” ํฌํŠธ 6443์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Kubernetes API ์„œ๋ฒ„๋Š” ์ธํ„ฐ๋„ท์ด๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์ ์šฉํ•˜์—ฌ kube-system์— ๋Œ€ํ•œ ์ธํ„ฐ๋„ท ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— default deny policy๊ฐ€ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ Control plane ์„ธ๊ทธ๋จผํŠธ ๋ฐ Worker nodes์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

control plane์„ ๋ณดํ˜ธํ•˜๋Š” ๋‹จ๊ณ„
1.TLS ์•”ํ˜ธํ™” ์„ค์ •
2.๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์„ค์ •
3.์ธํ„ฐ๋„ท ๋ฐ ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
4.RBAC ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ์ œํ•œ
5.์ธ์ฆ ๋ฐ RBAC ์ •์ฑ…์œผ๋กœ etcd ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋ณดํ˜ธ
6.๋ฌด๋‹จ ์ˆ˜์ •์œผ๋กœ๋ถ€ํ„ฐ kubeconfig ํŒŒ์ผ ๋ณดํ˜ธ

๋‹ค์Œ ํ‘œ์—๋Š” control plane ํฌํŠธ ๋ฐ ์„œ๋น„์Šค๊ฐ€ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

Table I: Control plane ports TCP Inbound TCP Inbound TCP Inbound 6443 10250 10257 Kubernetes API server kubelet API kube-controller-manager

Table I: Control plane ports

Etcd

etcd ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ค‘์š”ํ•œ control plane ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ control plane ๋‚ด์—์„œ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

etcd ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ƒํƒœ ์ •๋ณด์™€ ํด๋Ÿฌ์Šคํ„ฐ ๋น„๋ฐ€์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ค‘์š”ํ•œ control plane ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ etcd์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์œผ๋ฉด ์‚ฌ์ด๋ฒ„ ์•กํ„ฐ๊ฐ€ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. etcd ์„œ๋ฒ„๋Š” API ์„œ๋ฒ„์— ํ• ๋‹น๋œ ์ธ์ฆ์„œ๋งŒ ์‹ ๋ขฐํ•˜๋„๋ก ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Etcd๋Š” ๋ณ„๋„์˜ control plane ๋…ธ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฉํ™”๋ฒฝ์ด API ์„œ๋ฒ„์—๋งŒ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” API ์„œ๋ฒ„๊ฐ€ ๋ณดํ˜ธ๋  ๋•Œ ๊ณต๊ฒฉ ์ง€์ ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ธ์ฆ ๋ฐฉ์‹๊ณผ RBAC ์ •์ฑ…์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” etcd ์„œ๋ฒ„์™€ API ์„œ๋ฒ„ ๊ฐ„์— HTTPS(Hypertext Transfer Protocol Secure) ํ†ต์‹ ์„ ์ ์šฉํ•˜๋„๋ก TLS ์ธ์ฆ์„œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. etcd์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์ธ์ฆ ๊ธฐ๊ด€(CA)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ CA์—์„œ ๋ฐœ๊ธ‰ํ•œ ๋ชจ๋“  ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋ฏ€๋กœ ์œ ์ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubeconfig Files

kubeconfig ํŒŒ์ผ์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ, ์‚ฌ์šฉ์ž, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubectl์€ Worker nodes ๋ฐ control plane ๋กœ์ปฌ ์‹œ์Šคํ…œ์˜ $HOME/.kube ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๋Š” ์ด ๊ตฌ์„ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์•…์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๊ณ  ๊ตฌ์„ฑ ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์ˆ˜์ •ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ธ์ฆ๋˜์ง€ ์•Š์€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋Š” ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Worker node segmentation

Worker nodes๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๊ฐ€์ƒ ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๋จธ์‹ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์šฉ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… ์•…์šฉ์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ์†์ƒ๋˜๋ฉด ๊ด€๋ฆฌ์ž๋Š” Worker nodes ๋˜๋Š” Kubernetes ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํŠธ์—์„œ Worker nodes๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ณต๊ฒฉ ์ง€์ ์„ ์‚ฌ์ „์— ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ์— ๋”ฐ๋ผ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€๋ฅผ ํ–ฅํ•œ Worker nodes ๋˜๋Š” ์ „์ฒด Kubernetes ์„œ๋น„์Šค์—์„œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Worker nodes์˜ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฒฉ ์ง€์ ๊ณผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์˜ ์˜ˆ๋กœ๋Š” ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ๋‚ด๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—๋Š” Worker nodes ํฌํŠธ ๋ฐ ์„œ๋น„์Šค๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Encryption(์•”ํ˜ธํ™”)

๊ด€๋ฆฌ์ž๋Š” TLS 1.2 ๋˜๋Š” 1.3 ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ์š”์†Œ, ๋…ธ๋“œ ๋ฐ control plane ์‚ฌ์ด๋ฅผ ํฌํ•จํ•˜์—ฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์ค‘ ๋˜๋Š” ์ดํ›„์— Kubernetes ์„ค๋ช…์„œ์— ์ž์„ธํžˆ ์„ค๋ช…๋œ TLS ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋…ธ๋“œ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ธ์ฆ์„œ๋ฅผ ๋…ธ๋“œ ๊ฐ„์— ๋ฐฐํฌํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Secrets

Kubernetes ์‹œํฌ๋ฆฟ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ, OAuth ํ† ํฐ, SSH(Secure Shell) ํ‚ค์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Secrets์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉด YAML ํŒŒ์ผ, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์•”ํ˜ธ๋‚˜ ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•œ ์•ก์„ธ์Šค ์ œ์–ด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes๋Š” API ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด๋กœ Secret์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€ ๋ฆฌ์†Œ์Šค์— RBAC ์ •์ฑ…์„ ์ ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋ฐ€์€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ๋˜๋ฉฐ API ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API ์„œ๋ฒ„์—์„œ ๋ฏธ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ KMS(ํ‚ค ๊ด€๋ฆฌ ์„œ๋น„์Šค)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€์„ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Secret data-at-rest ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ --encryption-provider-config ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋„๋ก kube-apiserver ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

encryption-provider-config ํŒŒ์ผ์˜ ์˜ˆ๋Š” ๋ถ€๋ก I: ์•”ํ˜ธํ™” ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. KMS ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›์‹œ ์•”ํ˜ธํ™” ํ‚ค๊ฐ€ ๋กœ์ปฌ ๋””์Šคํฌ์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. KMS ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€์„ ์•”ํ˜ธํ™”ํ•˜๋ ค๋ฉด encryption-Provider-config ํŒŒ์ผ์— KMS ๊ณต๊ธ‰์ž๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋Š” ๋ถ€๋ก J: KMS ๊ตฌ์„ฑ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

encryption-provider-config ํŒŒ์ผ์„ ์ ์šฉํ•œ ํ›„ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋น„๋ฐ€์„ ์ฝ๊ณ  ์•”ํ˜ธํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Protecting sensitive cloud infrastructure

Kubernetes๋Š” ์ข…์ข… ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ VM์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.๋”ฐ๋ผ์„œ ๊ด€๋ฆฌ์ž๋Š” Kubernetes Worker nodes๊ฐ€ ์‹คํ–‰ ์ค‘์ธ VM์˜ ๊ณต๊ฒฉ ์ง€์ ์„ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ VM์—์„œ ์‹คํ–‰๋˜๋Š” Pod๋Š” ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์—†๋Š” ์ฃผ์†Œ์˜ ๋ฏผ๊ฐํ•œ ํด๋ผ์šฐ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค๋Š” ์‚ฌ์ด๋ฒ„ ํ–‰์œ„์ž์—๊ฒŒ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋‹จ๊ธฐ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๋Š” ๊ถŒํ•œ ์ƒ์Šน์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค๋ฅผ ๋‚จ์šฉํ•ฉ๋‹ˆ๋‹ค[5]. Kubernetes ๊ด€๋ฆฌ์ž๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํด๋ผ์šฐ๋“œ ๊ตฌ์„ฑ ์ •์ฑ…์„ ํ†ตํ•ด Pod๊ฐ€ ํด๋ผ์šฐ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋Š” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฏ€๋กœ ๊ด€๋ฆฌ์ž๋Š” ๊ณต๊ธ‰์—…์ฒด ์ง€์นจ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์•ก์„ธ์Šค ๋ฒกํ„ฐ๋ฅผ ๊ฐ•ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Authentication and authorization (์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ)

์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๋Š” ์ž˜ ์•Œ๋ ค์ง„ Kubernetes ํฌํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ž˜๋ชป ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ์ธ์ฆ ์—†์ด API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ง€์›๋˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Authentication

Kubernetes clusters์˜ ๋‘๊ฐ€์ง€ ํƒ€์ž…์˜ ์–ด์นด์šดํŠธ:

  • Service accounts

  • Normal user accounts

์„œ๋น„์Šค ๊ณ„์ •์€ Pod๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ API ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ „๋‹ฌ์ž ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ServiceAccount ์Šน์ธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด Kubernetes์—์„œ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์Šน์ธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด Pod์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Pod ์ •์˜๊ฐ€ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์Šน์ธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. Pod ์ •์˜๊ฐ€ automaticServiceAccountToken ๋˜๋Š” automaticServiceAccounttoken์„ false๋กœ ์„ค์ •ํ•˜์—ฌ ์„œ๋น„์Šค ํ† ํฐ ์ถ”๊ฐ€๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ ์Šน์ธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ธฐ๋ณธ ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ํŠน์ • ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ์„œ๋น„์Šค ๊ณ„์ •์„ ์ƒ์„ฑํ•  ๋•Œ ์„œ๋น„์Šค ๊ณ„์ • Secret์„ ์ƒ์„ฑํ•˜๊ณ  Secret์„ ์‚ฌ์šฉํ•˜๋„๋ก Pod๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ Secret์—๋Š” API์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‘๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„ํ—˜ ๋•Œ๋ฌธ์— Kubernetes RBAC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pod Secret์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๋ฐ ๊ด€๋ฆฌ์ž ๊ณ„์ •์˜ ๊ฒฝ์šฐ ์ž๋™ ์ธ์ฆ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ธ์ฆ์„ ํƒ€์‚ฌ ์„œ๋น„์Šค์— ์œ„์ž„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋…๋ฆฝ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. Kubernetes ๋ฌธ์„œ์—๋Š” X509 ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ, ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ† ํฐ ๋ฐ OpenID ํ† ํฐ์„ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ธ์ฆ ๋ฐฉ๋ฒ•์ด ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ธ์ฆํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ชจ๋“ˆ์€ ํ‰๊ฐ€๋ฅผ ๋งˆ๋ฌด๋ฆฌ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์ •์  ์•”ํ˜ธ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์•ฝํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์•ฝํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ํ•ฉ๋ฒ•์ ์ธ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Kubernetes๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋…๋ฆฝ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ต๋ช… ์š”์ฒญ์€ ๊ตฌ์„ฑ๋œ ๋‹ค๋ฅธ ์ธ์ฆ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ๊ฑฐ๋ถ€๋˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž๋‚˜ ํŒŒ๋“œ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์ต๋ช… ์š”์ฒญ์ด ํ™œ์„ฑํ™”๋œ ํ† ํฐ ์ธ์ฆ์„ ์œ„ํ•œ ์„œ๋ฒ„ ์„ค์ •์—์„œ ํ† ํฐ์ด ์—†๋Š” ์š”์ฒญ์€ ์ต๋ช… ์š”์ฒญ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Kubernetes 1.6 ์ด์ƒ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ต๋ช… ์š”์ฒญ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. RBAC๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ต๋ช… ์š”์ฒญ์—๋Š” system:anonymous ์‚ฌ์šฉ์ž ๋˜๋Š” system:unauthenticated ๊ทธ๋ฃน์˜ ๋ช…์‹œ์  ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.--anonymous-auth=false ์˜ต์…˜์„ API ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜์—ฌ ์ต๋ช… ์š”์ฒญ์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ต๋ช… ์š”์ฒญ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ์ธ์ฆ ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Role-based Access Control

๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ RBAC๋Š” ์กฐ์ง ๋‚ด ๊ฐœ์ธ์˜ ์—ญํ• ์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. RBAC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ณ„์ • ๋ฐ ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ RBAC๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด kubectl api-version์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. RBAC๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ .rbac.authorization.k8s.io/v1์šฉ API ๋ฒ„์ „์ด ๋‚˜์—ด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud Kubernetes ์„œ๋น„์Šค์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด RBAC๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RBAC๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์—์„œ --authorization- ๋ชจ๋“œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

kube-apiserver --authorization-mode=RBAC

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

๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Roles โ€“ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ถŒํ•œ ์„ค์ •

  • ClusterRoles โ€“ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ถŒํ•œ ์„ค์ •

์—ญํ• ๊ณผ ClusterRoles๋Š” ๋ชจ๋‘ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ถ€ ๊ทœ์น™์ด ์—†์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ RBAC๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜๊ณ  ์ต๋ช… ์•ก์„ธ์Šค๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ Kubernetes API ์„œ๋ฒ„๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ถŒํ•œ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. RBAC ์—ญํ• ์˜ ์˜ˆ๋Š” ๋ถ€๋ก K: pod-reader RBAC ์—ญํ• ์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Role ๋˜๋Š” ClusterRole์€ ๊ถŒํ•œ์„ ์ •์˜ํ•˜์ง€๋งŒ ๊ถŒํ•œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด RoleBindings ๋ฐ ClusterRoleBindings๋Š” Role ๋˜๋Š” ClusterRole์„ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. RoleBindings๋Š” ์ •์˜๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ•  ๋˜๋Š” ClusterRoles์˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ClusterRoles๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ RoleBinding๊ณผ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์ด ์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์œ ์‚ฌํ•œ ๊ถŒํ•œ์„ ์š”๊ตฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ClusterRole์„ ๋‹ค๋ฅธ RoleBindings์™€ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ๋‹ค๋ฅธ ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ClusterRoleBindings๋Š” ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๊ฑธ์ณ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ClusterRole์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. RBAC RoleBinding ๋ฐ ClusterRoleBinding์˜ ์˜ˆ๋Š” ๋ถ€๋ก L: RBAC RoleBinding ๋ฐ ClusterRoleBinding์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์—ญํ•  ๋ฐ ClusterRoles๋ฅผ ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ๋ฒ”์œ„์˜ ์ƒˆ ์—ญํ• ์— ํฌํ•จ๋œ ๊ถŒํ•œ์ด ์žˆ๊ฑฐ๋‚˜ rbac.authorization.k8s.io API ๊ทธ๋ฃน์˜ ์—ญํ•  ๋˜๋Š” ClusterRoles ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์—์Šค์ปฌ๋ ˆ์ด์…˜ ๋™์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…์‹œ์  ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ธ๋”ฉ์ด ์ƒ์„ฑ๋œ ํ›„์—๋Š” Role ๋˜๋Š” ClusterRole์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ญํ• ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฐ”์ธ๋”ฉ์„ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋ฐ ์„œ๋น„์Šค ๊ณ„์ •์— ํ• ๋‹น๋œ ๊ถŒํ•œ์€ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ญํ• ์„ ๋” ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ๊ด€๋ฆฌ์ž, ๊ฐœ๋ฐœ์ž ๋ฐ ์ธํ”„๋ผ ํŒ€๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค๋ฅธ ๊ทธ๋ฃน์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๋ฐ ์„œ๋น„์Šค ๊ณ„์ •์€ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes API์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ์ ์ ˆํ•œ API ์š”์ฒญ ๋™์‚ฌ ๋ฐ ์ž‘์—…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ RBAC ์—ญํ•  ๋˜๋Š” ClusterRole์„ ์ƒ์„ฑํ•˜์—ฌ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ํ• ๋‹น๋œ ์—ญํ•  ๋ฐ ClusterRoles๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋ฐ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ธ์‡„ํ•˜์—ฌ RBAC ์ •์ฑ…์„ ๊ฐ์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Audit Logging and Threat Detection

๊ฐ์‚ฌ ๋กœ๊ทธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐœ์ƒํ•œ ํ™œ๋™์„ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ์šด์˜๋˜๊ณ  ๊ตฌ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํšจ๊ณผ์ ์ธ ๋กœ๊น… ์†”๋ฃจ์…˜๊ณผ ๋กœ๊ทธ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฒด๊ณ„์ ์ธ ๋ณด์•ˆ ๊ฐ์‚ฌ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋ณด์•ˆ ์„ค์ •์— ๋Œ€ํ•œ ์ผ๊ด€๋˜๊ณ  ์ฒ ์ €ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์š”๊ตฌํ•˜์—ฌ ์นจํ•ด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ์†์„ฑ ํด๋Ÿฌ์Šคํ„ฐ ์ž‘์—…์„ ์ถ”์ ํ•˜๊ณ  ๊ธฐ๋ณธ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ •๋ณด๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋˜๋Š” ๊ฒฝ๊ณ  ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Key points
- ๋น„์ •์ƒ์ ์ธ ํ™œ๋™ ์‹๋ณ„์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ ์‹œ ํฌ๋“œ ๊ธฐ์ค€์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
- ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
- ํ†ตํ•ฉ ์Šค์บ”, ๋ชจ๋‹ˆํ„ฐ๋ง, ๊ฒฝ๊ณ  ๋ฐ ๋ถ„์„์„ ์œ„ํ•ด ๊ธฐ์กด ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
- ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฒฐํ•จ์„ฑ ์ •์ฑ…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Logging

Kubernetes ๋‚ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes ์ด๋ฒคํŠธ๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์˜ ์ „์ฒด ๊ทธ๋ฆผ์„ ์ œ๊ณตํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ปจํ…Œ์ด๋„ˆ, ์ปจํ…Œ์ด๋„ˆ ์—”์ง„, ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, API ์„œ๋ฒ„ ๋ฐ ํด๋ผ์šฐ๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ). ์บก์ฒ˜ํ•œ ํ›„์—๋Š” ์ด๋Ÿฌํ•œ ๋กœ๊ทธ๋ฅผ ๋ชจ๋‘ ๋‹จ์ผ ์„œ๋น„์Šค๋กœ ์ง‘๊ณ„ํ•˜์—ฌ ๋ณด์•ˆ ๊ฐ์‚ฌ์ž, ๋„คํŠธ์›Œํฌ ๋ฐฉ์–ด์ž ๋ฐ ์‚ฌ๊ณ  ๋Œ€์‘์ž์—๊ฒŒ ํ™˜๊ฒฝ ์ „์ฒด์—์„œ ์ทจํ•œ ์กฐ์น˜์— ๋Œ€ํ•œ ์ „์ฒด ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ํ™˜๊ฒฝ ๋‚ด์—์„œ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ชจ๋‹ˆํ„ฐ๋ง/๋กœ๊ทธํ•ด์•ผ ํ•˜๋Š” ์ผ๋ถ€ ์ด๋ฒคํŠธ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • API request history

  • Performance metrics

  • Deployments

  • Resource consumption

  • Operating system calls

  • Protocols, permission changes

  • Network traffic

  • Pod scaling

  • Volume mount actions

  • Image and container modification

  • Privilege changes

  • Scheduled job (cronjob) creations and modifications

๊ด€๋ฆฌ์ž๊ฐ€ ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ์‘๋‹ต ์‹œ๊ฐ„, ์š”์ฒญ, ๋ฆฌ์†Œ์Šค ์†Œ๋น„ ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ์ง€ํ‘œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•˜์—ฌ ๊ธฐ์ค€์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. RBAC ์ •์ฑ… ๊ตฌ์„ฑ๋„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ทธ๋ฆฌ๊ณ  ์กฐ์ง์˜ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ธ์‚ฌ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๊ฒ€ํ† ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ก์„ธ์Šค ์ œ์–ด๊ฐ€ ์ด ๊ฐ€์ด๋“œ์˜ RBAC ์„น์…˜์— ์„ค๋ช…๋œ RBAC ์ •์ฑ… ๊ฐ•ํ™” ์ง€์นจ์„ ์ค€์ˆ˜ํ•˜๋„๋ก ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ผ์ƒ์ ์ธ ์‹œ์Šคํ…œ ๋ณด์•ˆ ๊ฐ์‚ฌ์—๋Š” ํ˜„์žฌ ๋กœ๊ทธ๋ฅผ ์ •์ƒ ํ™œ๋™์˜ ๊ธฐ์ค€ ์ธก์ •์น˜์™€ ๋น„๊ตํ•˜์—ฌ ๊ธฐ๋ก๋œ ๋ฉ”ํŠธ๋ฆญ ๋ฐ ์ด๋ฒคํŠธ์—์„œ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” ๊ทผ๋ณธ ์›์ธ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์†Œ์Šค ์†Œ๋น„๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ํฌ๋ฆฝํ† ๋งˆ์ด๋„ˆ์™€ ๊ฐ™์€ ์•…์„ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ค์น˜๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์˜๋„๋œ ๋ณด์•ˆ ์ œ์•ฝ ์กฐ๊ฑด์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜๊ณ  ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๋กœ๊ทธ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์™ธ๋ถ€ ์•ก์„ธ์Šค๊ฐ€ ์ œํ•œ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๊ฐ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋กœ๊น… ์„œ๋น„์Šค๋กœ ๋กœ๊ทธ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊น๊ฒŒ ์ด์ƒ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ TLS 1.2 ๋˜๋Š” 1.3์œผ๋กœ ์ „์†กํ•˜๋Š” ๋™์•ˆ ๋กœ๊ทธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ์ „์†ก ์ค‘์ธ ๋กœ๊ทธ์— ์•ก์„ธ์Šคํ•˜๊ณ  ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

Kubernetes ๊ธฐ๋ณธ ๊ฐ์‚ฌ ๋กœ๊น… ๊ตฌ์„ฑ

Kubernetes audit logging capabilities are disabled by default

kube-apiserver๋Š” Kubernetes control plane์— ์ƒ์ฃผํ•˜๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ŸฐํŠธ ์—”๋“œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” control plane์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ ์š”์ฒญ์€ ์‹คํ–‰์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋“ฑ๋ก๋˜๋ฉด kube-apiserver๋Š” ๊ฐ์‚ฌ ์ •์ฑ… ํŒŒ์ผ๊ณผ ํ•ด๋‹น ๊ทœ์น™์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์ฒซ ๋ฒˆ์งธ ์ผ์น˜ ๊ทœ์น™์— ์˜ํ•ด ์ •์˜๋œ ์ˆ˜์ค€์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. Kubernetes์˜ ๋‚ด์žฅ ๊ฐ์‚ฌ ๋กœ๊น… ๊ธฐ๋Šฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋Š” ๊ฐ์‚ฌ ์ •์ฑ… YAML ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ  ๊ฐ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ ์œ ํ˜•์„ ๊ธฐ๋กํ•  ์›ํ•˜๋Š” ๊ฐ์‚ฌ ์ˆ˜์ค€์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๊ฐ์‚ฌ ์ •์ฑ… ํŒŒ์ผ์€ ์ ์ ˆํ•œ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ kube-apiserver๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ทœ์น™์ด ์œ ํšจํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ ค๋ฉด ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ๊ฐ์‚ฌ ์ˆ˜์ค€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • None

  • Metadata

  • Request

  • RequestResponse

RequestResponse ์ˆ˜์ค€์—์„œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋ฉด ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์‚ฌ๊ณ  ๋Œ€์‘์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ •๋ณด๋Ÿ‰์„ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋กœ ์ธํ•ด ๋กœ๊ทธ์—์„œ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋น„๋ฐ€์ด ์บก์ฒ˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NSA ๋ฐ CISA๋Š” ๋กœ๊ทธ์—์„œ Secrets ์บก์ฒ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Secrets์™€ ๊ด€๋ จ๋œ ์š”์ฒญ์˜ ๋กœ๊น… ์ˆ˜์ค€์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ˆ˜์ค€์œผ๋กœ ์ค„์ผ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ตœ๊ณ  ์ˆ˜์ค€์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋ฉด ํŠนํžˆ ํ”„๋กœ๋•์…˜ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋งŽ์€ ์–‘์˜ ๋กœ๊ทธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ง์˜ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐ์‚ฌ ์ •์ฑ…์„ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜์—ฌ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์ผ์ƒ์ ์ธ ์ด๋ฒคํŠธ์˜ ๋กœ๊น… ์ˆ˜์ค€์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์‚ฌ ์ •์ฑ…์— ํ•„์š”ํ•œ ํŠน์ • ๊ทœ์น™์€ ๋ฐฐํฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์กฐ์ง์˜ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ๋ฐ ์œ„ํ˜‘ ๋ชจ๋ธ์— ์„ธ์‹ฌํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด์„œ ๋ชจ๋“  ๋ณด์•ˆ์— ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ์ •์ฑ…์„ ๊ฐœ์„ ํ•˜๋Š” ๋ชฉํ‘œ๋Š” ์ค‘๋ณต์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๋™์‹œ์— ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ทธ๋ฆผ๊ณผ ์›์ธ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ค‘์š” ๋ฐ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ ์œ ํ˜• ๋ฐ ๋‹จ๊ณ„์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ˆ˜์ค€์˜ Secrets ๋ฐ RequestResponse ์ˆ˜์ค€์˜ ๊ธฐํƒ€ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฐ์‚ฌ ์ •์ฑ… ํŒŒ์ผ์˜ ์˜ˆ๋Š” ๋ถ€๋ก M: ๊ฐ์‚ฌ ์ •์ฑ…์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

kube-apiserver ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜์˜ ์˜ˆ์™€ ๊ฐ์‚ฌ ์ •์ฑ… ํŒŒ์ผ์„ kube-apiserver์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ์˜ ์˜ˆ๋Š” ๋ถ€๋ก N: ๊ฐ์‚ฌ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ๋ถ€๋ก N: ๊ฐ์‚ฌ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

kube-apiserver์—๋Š” ๊ฐ์‚ฌ ๋กœ๊น…์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋กœ๊น… ๋ฐ ์›นํ›… ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊น… ๋ฐฑ์—”๋“œ๋Š” ์ง€์ •๋œ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ณ  ์›นํ›… ๋ฐฑ์—”๋“œ๋Š” ํŒŒ์ผ์„ ์™ธ๋ถ€ HTTP API๋กœ ๋ณด๋‚ด๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ก N: ๊ฐ์‚ฌ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ˆ์‹œ ํ”Œ๋ž˜๊ทธ์˜ ์˜ˆ์— ์„ค์ •๋œ --audit-log-path ๋ฐ --audit-log-maxage ํ”Œ๋ž˜๊ทธ๋Š” ๋กœ๊น… ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ์˜ ๋‘ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ํŒŒ์ผ์— ์”๋‹ˆ๋‹ค. log-path ํ”Œ๋ž˜๊ทธ๋Š” ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ๊ตฌ์„ฑ์ด๋ฉฐ ๋กœ๊น… ๋ฐฑ์—”๋“œ์— ํ•„์š”ํ•œ ์œ ์ผํ•œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ๊ทธ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ํ˜•์‹์€ JSON(Java Script Object Notation)์ด์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊น… ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์˜ต์…˜์€ Kubernetes ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ๋˜ํ•œ ๊ด€๋ฆฌ์ž๊ฐ€ kubeapiserver์— ์ œ์ถœ๋œ YAML ํŒŒ์ผ์„ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์™ธ๋ถ€ ๋ฐฑ์—”๋“œ์— ๋กœ๊ทธ๋ฅผ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์›นํ›… ๋ฐฑ์—”๋“œ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. webhook ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ kube-apiserver์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ์˜ต์…˜์˜ ์ „์ฒด ๋ชฉ๋ก์€ Kubernetes ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Webhook ๋ฐฑ์—”๋“œ ์ž‘๋™ ๋ฐฉ์‹ ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ์„ค๋ช…์„œ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋กœ๊ทธ ์ง‘๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์™ธ๋ถ€ ๋„๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ ์„น์…˜์—์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Worker node and container logging

Kubernetes ์•„ํ‚คํ…์ฒ˜ ๋‚ด์—์„œ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ ๋กœ๊ทธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์—์„œ ๊ฐ ๋…ธ๋“œ์˜ kubelet์€ ๋กœ๊ทธ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ํŒŒ์ผ ๊ธธ์ด, ์ €์žฅ ๊ธฐ๊ฐ„ ๋ฐ ์ €์žฅ ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ์ •์ฑ…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋กœ์ปฌ๋กœ ์ €์žฅํ•˜๊ณ  ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ๊ทธ๋Š” kubelet์— ์˜ํ•ด ์ œ์–ด๋˜๋ฉฐ ๋ช…๋ น์ค„์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋‹ค์Œ ๋ช…๋ น์€ Pod ๋‚ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

kubectl logs [-f] [-p] POD [-c CONTAINER]

-f ํ”Œ๋ž˜๊ทธ๋Š” ๋กœ๊ทธ๊ฐ€ ์ŠคํŠธ๋ฆฌ๋ฐ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ณ , -p ํ”Œ๋ž˜๊ทธ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ด์ „ ์ธ์Šคํ„ด์Šค๋กœ๋ถ€ํ„ฐ์˜ ๋กœ๊ทธ๊ฐ€ ์กด์žฌํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, -c ํ”Œ๋ž˜๊ทธ๋Š” ์žˆ๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Pod์— ๋‘˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ, ํŒŒ๋“œ ๋˜๋Š” ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Kubernetes์˜ ๊ธฐ๋ณธ ๋กœ๊น… ์†”๋ฃจ์…˜์€ ์‹คํŒจํ•œ ๊ฐœ์ฒด์— ์ €์žฅ๋œ ๋กœ๊ทธ๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NSA ๋ฐ CISA๋Š” ๋…ธ๋“œ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋กœ๊ทธ๋ฅผ ๋ณด์กดํ•˜๋„๋ก ์›๊ฒฉ ๋กœ๊น… ์†”๋ฃจ์…˜์„ ๊ตฌ์„ฑํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ๋กœ๊น… ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Worker nodes์—์„œ ์—์ด์ „ํŠธ ๋กœ๊น…์˜ ์—ฐ์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด DaemonSet์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด DaemonSet์„ ๊ตฌ์„ฑํ•˜๋ฉด ํ•ญ์ƒ ๋ชจ๋“  ๋…ธ๋“œ์— ๋กœ๊น… ์—์ด์ „ํŠธ์˜ ๋ณต์‚ฌ๋ณธ์ด ์žˆ๊ณ  ๋กœ๊น… ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ์ผ๊ด€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฒด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒ€์ด ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ์กฐ์ง์€ ๋กœ๊น… ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋“  ํŒ€์ด ํšจ๊ณผ์ ์ธ ์†”๋ฃจ์…˜์„ ๊ฐ–์ถ”๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Seccomp: ๊ฐ์‚ฌ ๋ชจ๋“œ

์•ž์—์„œ ์„ค๋ช…ํ•œ ๋…ธ๋“œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋กœ๊น… ์™ธ์—๋„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ฐ์‚ฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ seccomp ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜์—ฌ ์ปค๋„์˜ ๊ณต๊ฒฉ ์ง€์ ์„ ๋‚ฎ์ถ”๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Seccomp๋Š” ๊ฐ์‚ฌ ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๊ธฐ๋กํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • seccomp ํ”„๋กœํ•„์€ ํ—ˆ์šฉ, ๊ฑฐ๋ถ€ ๋˜๋Š” ๊ธฐ๋ก๋˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ์ง€์ •๋˜์ง€ ์•Š์€ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ž‘์—…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • seccomp ํ”„๋กœํ•„์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด Kubernetes ๊ด€๋ฆฌ์ž๋Š” seccomp ํ”„๋กœํ•„ JSON ํŒŒ์ผ์„ /var/lib/kubelet/seccomp/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ž‘์„ฑํ•˜๊ณ  seccompProfile์„ ํฌ๋“œ์˜ securityContext์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • seccompProfile์—๋Š” ์œ ํ˜•: Localhost ๋ฐ localhostProfile: myseccomppolicy.json์˜ ๋‘ ํ•„๋“œ๋„ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•˜๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ์žƒ์ง€ ์•Š๊ณ  seccomp ํ”„๋กœํ•„์„ ์ถ”๊ฐ€๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ‘œ์ค€ ์ž‘์—…์— ํ•„์š”ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ด€๋ฆฌ์ž๊ฐ€ Pod์˜ ํ‘œ์ค€ ์ž‘๋™ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ธฐ์ค€์„ ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ํŒจํ„ด์—์„œ ์•…์˜์ ์ธ ํ™œ๋™์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์ดํƒˆ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

syslog

Kubernetes๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ kubelet ๋กœ๊ทธ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๋กœ๊ทธ๋ฅผ journald์— ์”๋‹ˆ๋‹ค. ์กฐ์ง์—์„œ syslog ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ syslog ์„œ๋ฒ„ ๋˜๋Š” ๊ธฐํƒ€ ๋กœ๊ทธ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์ง‘๊ณ„ ํ”Œ๋žซํผ์œผ๋กœ ์ „๋‹ฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Syslog ํ”„๋กœํ† ์ฝœ์€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ํ˜•์‹ ํ‘œ์ค€์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Syslog ๋ฉ”์‹œ์ง€์—๋Š” ํ—ค๋”์™€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ž‘์„ฑ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. syslog-ngยฎ ๋ฐ rsyslog์™€ ๊ฐ™์€ Syslog ๋ฐ๋ชฌ์€ ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ํ†ตํ•ฉ ํ˜•์‹์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ Linux ์šด์˜ ์ฒด์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ rsyslog ๋˜๋Š” journald๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” journalctl์„ ํ†ตํ•ด syslog ํ˜•์‹์˜ ๋กœ๊ทธ ์ €์žฅ ๋ฐ ์ถœ๋ ฅ ๋กœ๊ทธ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ด๋ฒคํŠธ ๋กœ๊น… ๋ฐ๋ชฌ์ž…๋‹ˆ๋‹ค. syslog ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜ธ์ŠคํŠธ ์ˆ˜์ค€์—์„œ ํŠน์ • Linux ๋ฐฐํฌํŒ์„ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ Linux ๋ฐฐํฌํŒ์„ ์‹คํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ syslog๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. Syslog ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๋กœ๊ทธ ์ง‘๊ณ„ ํ”Œ๋žซํผ์ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ํ•œ ๊ฐ ํ•ด๋‹น ๋…ธ๋“œ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. syslog ๋ฐ๋ชฌ ๋˜๋Š” ์ด์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ์ˆ˜์ง‘๋˜๋Š” ์ด๋Ÿฌํ•œ ๋กœ๊ทธ์™€ ๋‹ค๋ฅธ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์ €์žฅ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ์™ธ๋ถ€ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SIEM platforms

SIEM(๋ณด์•ˆ ์ •๋ณด ๋ฐ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ) ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์กฐ์ง์˜ ๋„คํŠธ์›Œํฌ ์ „์ฒด์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ ๋กœ๊ทธ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ๋“ฑ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์™€ ๋ถ„์„๊ฐ€๊ฐ€ ์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SIEM ๋„๊ตฌ์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์€ ๋กœ๊ทธ ์ˆ˜์ง‘, ์ง‘๊ณ„, ์œ„ํ˜‘ ํƒ์ง€ ๋ฐ ๊ฒฝ๊ณ  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ์‹œ์Šคํ…œ ๋™์ž‘์„ ๋” ์ž˜ ์˜ˆ์ธกํ•˜๊ณ  ์ž˜๋ชป๋œ ๊ฒฝ๊ณ ๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„ ํ•™์Šต ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋” ์ž˜ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ Kubernetes์™€ ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes ํ™˜๊ฒฝ์—์„œ ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์€ SIEM ํ”Œ๋žซํผ์˜ ๋Œ€์•ˆ์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ™˜๊ฒฝ์€ ๋…ธ๋“œ, ํฌ๋“œ, ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์„œ๋น„์Šค ๊ฐ„์— ๋งŽ์€ ์ƒํ˜ธ ์ข…์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ์—์„œ Pod์™€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง€์†์ ์œผ๋กœ ์‚ญ์ œ๋˜๊ณ  ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์žฌ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ํ™˜๊ฒฝ์€ ์ผ๋ฐ˜์ ์œผ๋กœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์ƒํ˜ธ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๊ธฐ์กด SIEM์— ์ถ”๊ฐ€ ๊ณผ์ œ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์„ธ๋Œ€ SIEM ํ”Œ๋žซํผ๋„ ๋ณต์žกํ•œ Kubernetes ํ™˜๊ฒฝ์— ํ•ญ์ƒ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kubernetes๊ฐ€ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์œผ๋กœ ๋ถ€์ƒํ•จ์— ๋”ฐ๋ผ SIEM ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋งŽ์€ ์กฐ์ง์ด Kubernetes ํ™˜๊ฒฝ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๋‹ค์–‘ํ•œ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ „์ฒด ๋ชจ๋‹ˆํ„ฐ๋ง ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ํ”Œ๋žซํผ์˜ ๊ธฐ๋Šฅ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ํ–ฅํ›„ ์‚ฌ๊ณ  ๋Œ€์‘์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ์ถฉ๋ถ„ํžˆ ์บก์ฒ˜ํ•˜๋Š” ๋กœ๊น…์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Service meshes

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

  • ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋  ๋•Œ ํŠธ๋ž˜ํ”ฝ ๋ฆฌ๋””๋ ‰์…˜,

  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘,

  • ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์•”ํ˜ธํ™” ๊ด€๋ฆฌ ํ—ˆ์šฉ,

  • ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋กœ๊ทธ ์ˆ˜์ง‘,

  • ๊ฐ ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ ,

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๋˜๋Š” ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๋ฌธ์ œ ๋ฐ ์žฅ์• ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›

  • ์„œ๋น„์Šค๋ฅผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋˜๋Š” ๋‹ค์ค‘ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ Kubernetes ํ™˜๊ฒฝ์— ๋งค์šฐ ์ ํ•ฉํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๋กœ๊น… ๊ธฐ๋Šฅ์€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐ๋„ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ด€๋ฆฌ์ž๋Š” ํ‘œ์ค€ ํด๋Ÿฌ์Šคํ„ฐ ์ž‘์—…์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ด์ƒ ์ง•ํ›„๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌํ˜• Kubernetes ์„œ๋น„์Šค์—๋Š” ์ข…์ข… ์ž์ฒด ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ๋„๋กœ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์ด์ ์€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์˜ ์•”ํ˜ธํ™”์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑ ๋ฐ ์ˆœํ™˜ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ ๊ฐœ๋ณ„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ด๋ฅผ ์„ค์ •ํ•˜๊ณ  ์Šค์Šค๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์„œ๋น„์Šค ๊ฐ„์— ์•ˆ์ „ํ•œ TLS ์ธ์ฆ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ์„œ๋น„์Šค ๊ฐ„ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ณด์•ˆ ๊ฒฝ๊ณ ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Fault tolerance (๊ฒฐํ•จ ํ—ˆ์šฉ)

์กฐ์ง์€ fault tolerance policies์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ •์ฑ…์€ ํŠน์ • Kubernetes ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ •์ฑ… ์ค‘ ํ•˜๋‚˜๋Š” ์ €์žฅ ์šฉ๋Ÿ‰์ด ์ดˆ๊ณผ๋œ ๊ฒฝ์šฐ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ƒˆ ๋กœ๊ทธ๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ „์†ก๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ •์ฑ…์€ ํ†ต์‹  ๋Š๊น€ ๋˜๋Š” ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋กœ์ปฌ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•  ์žฅ์†Œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์„œ๋น„์Šค์™€์˜ ํ†ต์‹ ์ด ๋ณต์›๋˜๋ฉด ๋กœ์ปฌ์— ์ €์žฅ๋œ ๋กœ๊ทธ๊ฐ€ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ํ‘ธ์‹œ๋˜๋Š” ์ •์ฑ…์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Threat Detection

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

**์ฃผ์˜ ์‚ฌํ•ญ:**
์ด ํ‘œ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์•Œ๋ ค์ง„ ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ง€ํ‘œ๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ํ•œ ๊ด€๋ฆฌ์ž๋Š” ์ž์‹ ์˜ ํ™˜๊ฒฝ์—์„œ ํŠน์ • ๋ฌธ์ œ์™€ ์ƒˆ๋กœ์šด ์œ„ํ˜‘์„ ์ธ์‹ํ•˜๊ณ  ๊ฒฝ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ฒฝ๊ณ ๋Š” ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋น„์ •์ƒ์ ์ธ ํ™œ๋™์„ ์‹๋ณ„ํ•˜๋„๋ก ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

Alerting

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

๊ฒฝ๊ณ ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ์˜ ์˜ˆ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์ง€๋งŒ ์ด์— ๊ตญํ•œ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ์— ์žˆ๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ์˜ ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ,

  • ๋ถ€์กฑํ•œ ๋กœ๊น… ๋ณผ๋ฅจ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ €์žฅ ๊ณต๊ฐ„,

  • ์™ธ๋ถ€ ๋กœ๊น… ์„œ๋น„์Šค๊ฐ€ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜๋˜๊ณ ,

  • ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํฌ๋“œ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜,

  • ๊ถŒํ•œ์ด ์—†๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ณ„์ •์˜ ์š”์ฒญ์„ ์œ„ํ•œ,

  • API ์„œ๋ฒ„์— ์ œ์ถœ๋˜๋Š” ์ต๋ช… ์š”์ฒญ,

  • ํฌ๋“œ ์ƒ์„ฑ์˜ ์†Œ์Šค ID๋กœ ๋‚˜์—ด๋˜๋Š” ํฌ๋“œ ๋˜๋Š” Worker nodes IP ์ฃผ์†Œ ์š”๊ตฌ,

  • ๋น„์ •์ƒ์ ์ธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋˜๋Š” ์‹คํŒจํ•œ API ํ˜ธ์ถœ,

  • ๋น„์ •์ƒ์ ์ธ ์‚ฌ์šฉ์ž/๊ด€๋ฆฌ์ž ํ–‰๋™(์ฆ‰, ๋น„์ •์ƒ์ ์ธ ์‹œ๊ฐ„์— ๋˜๋Š” ๋น„์ •์ƒ์ ์ธ ์œ„์น˜) ๋ฐ

  • ํ‘œ์ค€ ์šด์˜ ๋ฉ”ํŠธ๋ฆญ ๊ธฐ์ค€์„ ๊ณผ์˜ ์ƒ๋‹นํ•œ ํŽธ์ฐจ.

2021๋…„ Kubernetes ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ Kubernetes ํ”„๋กœ์ ํŠธ ๊ธฐ์—ฌ์ž๋Š” ์ด ๋ชฉ๋ก์— ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค[7].

  • ํŒŒ๋“œ์˜ securityContext ๋ณ€๊ฒฝ,

  • ์Šน์ธ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ ๋ฐ

  • ํŠน์ • ๋ฏผ๊ฐํ•œ ํŒŒ์ผ/URL ์•ก์„ธ์Šค.

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

tools

Kubernetes์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ด‘๋ฒ”์œ„ํ•œ ๊ฐ์‚ฌ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ์Šคํ…œ์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์ถ•๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ๋งŒ์˜ ๋งž์ถคํ˜• ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋งž๋Š” ๊ธฐ์กด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜์—ฌ ํ™•์žฅ ๊ฒ€์ƒ‰ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ์ดํ„ฐ ๋งคํ•‘ ๊ธฐ๋Šฅ ๋ฐ ๊ฒฝ๊ณ  ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ SIEM ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์€ Kubernetes๋ฅผ ์ด๋Ÿฌํ•œ ๊ธฐ์กด ๊ธฐ๋Šฅ๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Native Computing Foundation์˜ Prometheusยฎ, Grafana Labs์˜ Grafanaยฎ ๋ฐ Elasticsearch์˜ Elastic Stack(ELK)ยฎ๊ณผ ๊ฐ™์€ ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์ด๋ฒคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์œ„ํ˜‘ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฝ๊ณ ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜, ๊ณผ๊ฑฐ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ๋„คํŠธ์›Œํฌ ํ†ต๊ณ„๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RBAC์—์„œ ์œ„ํ—˜ํ•œ ๊ถŒํ•œ ๊ตฌ์„ฑ์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ๊ถŒํ•œ ๊ตฌ์„ฑ์„ ๊ฐ์‚ฌํ•  ๋•Œ ์Šค์บ๋‹ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NSA์™€ CISA๋Š” ๊ธฐ์กด ํ™˜๊ฒฝ์—์„œ IDS(์นจ์ž… ํƒ์ง€ ์‹œ์Šคํ…œ)๋ฅผ ํ™œ์šฉํ•˜๋Š” ์กฐ์ง์ด ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ Kubernetes ํ™˜๊ฒฝ์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ํ†ตํ•ด ์กฐ์ง์€ ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐ ๊นจ๋—ํ•œ ์ด๋ฏธ์ง€์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ Cloud Service Provider๋Š” ๋” ๊ด€๋ฆฌ๋˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ์‚ฌ๋ก€

์ด ๋ฌธ์„œ์— ์š”์•ฝ๋œ ๊ฐ•ํ™” ์ง€์นจ์„ ๋”ฐ๋ฅด๋ฉด Kubernetes ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ์€ ์ง€์†์ ์ธ ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ ํŒจ์น˜, ์—…๋ฐ์ดํŠธ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๊ฐ ๋ถ€๋ถ„์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Kubernetes, ํ•˜์ดํผ๋ฐ”์ด์ €, ๊ฐ€์ƒํ™” ์†Œํ”„ํŠธ์›จ์–ด, ํ”Œ๋Ÿฌ๊ทธ์ธ, ํ™˜๊ฒฝ์ด ์‹คํ–‰๋˜๋Š” ์šด์˜ ์ฒด์ œ, ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์กฐ์ง์˜ CI/CD(์ง€์†์  ํ†ตํ•ฉ/์ง€์†์  ์ „๋‹ฌ) ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ๋“  ์š”์†Œ ๋ฐ ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๊ธฐํƒ€ ์†Œํ”„ํŠธ์›จ์–ด ์—…๋ฐ์ดํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ.์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์—ฐ์ค‘๋ฌดํœด ๊ฐ€๋™ ์‹œ๊ฐ„์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ํšŒ์‚ฌ๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ๋ฌผ๋ฆฌ์  ์‹œ์Šคํ…œ์—์„œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์˜คํ”„๋กœ๋“œ๋˜์–ด ํŽŒ์›จ์–ด, ์ปค๋„ ๋ฐ ์šด์˜ ์ฒด์ œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ ์‹œ์—.

CIS(Center for Internet Security)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ์„ ์œ„ํ•œ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” Kubernetes ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ CIS ๋ฒค์น˜๋งˆํฌ๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์‹œ์Šคํ…œ ๋ณด์•ˆ์ด ์ตœ์‹  ์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์ •๊ธฐ์ ์ธ ์ทจ์•ฝ์  ์Šค์บ” ๋ฐ ์นจํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ตฌ์„ฑ๊ณผ ์ œ๋กœ ๋ฐ์ด ์ทจ์•ฝ์ ์„ ์‚ฌ์ „์— ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐœ๊ฒฌ์€ ์ž ์žฌ์ ์ธ ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž๊ฐ€ ๋ฐœ๊ฒฌํ•˜๊ณ  ์•…์šฉํ•˜๊ธฐ ์ „์— ์ฆ‰์‹œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

Works cited

[1] Center for Internet Security, "CIS Benchmarks Securing Kubernetes," 2021.[Online].Available: https://cisecurity.org/benchmark/kubernetes/.

[2] DISA, "Kubernetes STIG," 2021.[Online].Available: https://public.cyber.mil/stigs/downloads/.

[3] The Linux Foundation, "Kubernetes Documnetation," 2021.[Online].Available: https://kubernetes.io/docs/ .[Accessed 02 2021].

[4] The Linux Foundation, "11 Ways (Not) to Get Hacked," 18 07 2018.[Online].Available: https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/#10-scan-images-and-run- ids.[Accessed 03 2021].

[5] MITRE, "MITRE ATT&CK," 2021.[Online].Available: https://attack.mitre.org/techniques/T1552/005/.[Accessed 7 May 2021].

[6] CISA, "Analysis Report (AR21-013A)," 14 January 2021.[Online].Available: https://www.cisa.gov/uscert/ncas/analysis-reports/ar21-013a.[Accessed 26 May 2021].

[7] Kubernetes, "A Closer Look at NSA/CISA Kubernetes Hardening Guidance," 5 October 2021.[Online].Available: https://www.kubernetes.io/blog/2021/10/05/nsa-cisa-kubernetes- hardening-guidance/ 2021.

[8] MITRE ATT&CK, "Scheduled Task/Job: Container Orchestration Job," 27 7 2021.[Online].Available: https://attack.mitre.org/techniques/T1053/007/.[Accessed 9 11 2021].

[9] The Kubernetes Authors, "Pod Security Admission," [Online].Available: https://kubernetes.io/docs/concepts/security/pod-security-admission/.

Appendix

Appendix A: Example Dockerfile for non-root application

๋‹ค์Œ ์˜ˆ๋Š” ๋น„๊ทธ๋ฃน ๋ฉค๋ฒ„์‹ญ์ด ์žˆ๋Š” ๋น„๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” Dockerfile์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ์ค„์€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Appendix B: Example deployment template for read-only file system (์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์šฉ ๋ฐฐํฌ ํ…œํ”Œ๋ฆฟ ์˜ˆ)

๋‹ค์Œ ์˜ˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” Kubernetes ๋ฐฐํฌ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ์ค„์€ ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ์„ ์€ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ณผ๋ฅจ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Appendix C: Pod Security Policies (deprecated) (ํฌ๋“œ ๋ณด์•ˆ ์ •์ฑ…(๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ))

Appendix D: Example Pod Security Policy

๋‹ค์Œ ์˜ˆ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” Kubernetes Pod ๋ณด์•ˆ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ๋Š” ๊ณต์‹ Kubernetes ๋ฌธ์„œ(https://kubernetes.io/docs/concepts/policy/pod-security-policy/)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ์กฐ์ง์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ •์ฑ…์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Appendix E: Example namespace

๋‹ค์Œ ์˜ˆ๋Š” ๊ฐ ํŒ€ ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์— ๋Œ€ํ•œ ๊ฒƒ์œผ๋กœ kubectl ๋ช…๋ น ๋˜๋Š” YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๊ฐ€ kube-์ธ ์ด๋ฆ„์€ Kubernetes ์‹œ์Šคํ…œ ์˜ˆ์•ฝ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kubectl command to create a namespace:

kubectl create namespace <insert-namespace-name-here>

YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ my-namespace.yaml์ด๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

apiVersion: v1
kind: Namespace
metadata:
  name: <insert-namespace-name-here>

Apply the namespace using:

kubectl create โ€“f ./my-namespace.yaml

To create new Pods in an existing namespace, switch to the desired namespace using:

kubectl config use-context <insert-namespace-here>

Apply new deployment using:

kubectl apply -f deployment.yaml

Alternatively, the namespace can be added to the kubectl command using:

kubectl apply -f deployment.yaml --namespace=<insert-namespace-here>

or specify namespace: <insert-namespace-here> under metadata in the YAML declaration.

๋˜๋Š” YAML ์„ ์–ธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์•„๋ž˜์— namespace: <insert-namespace-here>๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค๋Š” ์ผ๋‹จ ์ƒ์„ฑ๋˜๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ„์— ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•œ ๋‹ค์Œ ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Appendix F: Example network policy

๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋Š” Kubernetes ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด๋ธ” ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” Pod๋กœ nginx ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy/

apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
   name: example-access-nginx
namespace: prod #this can any namespace or be left out if no namespace is used
spec:
      podSelector:
          matchLabels:
              app: nginx
      ingress:
      -from:
          -podSelector:
              matchLabels:
                  access: "true"

The new NetworkPolicy can be applied using:

kubectl apply -f policy.yaml

A default deny all ingress policy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyType: - Ingress

A default deny all egress policy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
spec:
podSelector: {}
policyType: - Egress

Appendix G: Example LimitRange

LimitRange support is enabled by default in Kubernetes 1.10 and newer. The following YAML file specifies a LimitRange with a default request and limit, as well as a min and max request, for each container.

  apiVersion: v1
  kind: LimitRange
  metadata:
     name: cpu-min-max-demo-lr
  spec:
     limits
     -  default:
           cpu: 1
        defaultRequest:
          cpu: 0.5
        max:
          cpu: 2
        min:
           cpu 0.5
        type: Container

A LimitRange can be applied to a namespace with:

kubectl apply -f <example-LimitRange>.yaml --namespace=<Enter-Namespace>

์ด ์˜ˆ์ œ LimitRange ๊ตฌ์„ฑ์ด ์ ์šฉ๋œ ํ›„์—๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ณธ CPU ์š”์ฒญ์ด ํ• ๋‹น๋˜๊ณ  ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ œํ•œ์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์—๋Š” ์ตœ์†Œ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  ์ตœ์†Œ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ CPU ์š”์ฒญ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ CPU ๊ฐ’ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ์ธ์Šคํ„ด์Šคํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Appendix H: Example ResourceQuota

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์ง‘๊ณ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋Š” ResourceQuota ๊ฐœ์ฒด๋Š” YAML ํŒŒ์ผ์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ•˜๊ฑฐ๋‚˜ Pod์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.๋‹ค์Œ ์˜ˆ์ œ๋Š” ๊ณต์‹ Kubernetes ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/

Configuration file for a namespace:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-cpu-mem-resourcequota
spec:
  hard:
    requests.cpu: '1'
    requests.memory: 1Gi
    limits.cpu: '2'
    limits.memory: 2Gi

This ResourceQuota can be applied with:

kubectl apply -f example-cpu-mem-resourcequota.yaml -- namespace=<insert-namespace-here>

This ResourceQuota places the following constraints on the chosen namespace:

  • Every container must have a memory request, memory limit, CPU request, and CPU limit,(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ, ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ, CPU ์š”์ฒญ ๋ฐ CPU ์ œํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

  • Aggregate memory request for all containers should not exceed 1 GiB,(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ด ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์€ 1GiB๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

  • Total memory limit for all containers should not exceed 2 GiB,(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์€ 2GiB๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

  • Aggregate CPU request for all containers should not exceed 1 CPU, and (๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ด CPU ์š”์ฒญ์€ 1 CPU๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ,)

  • Total CPU limit for all containers should not exceed 2 CPUs.(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ์ด CPU ์ œํ•œ์€ 2๊ฐœ์˜ CPU๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

Appendix I: Example encryption

์œ ํœด ์ƒํƒœ์˜ Secret ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์•”ํ˜ธํ™” ๊ตฌ์„ฑ ํŒŒ์ผ์€ ์›ํ•˜๋Š” ์•”ํ˜ธํ™” ์œ ํ˜•๊ณผ ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™” ํŒŒ์ผ์— ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ณด์•ˆ์ด ์•ฝ๊ฐ„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€์€ ์•”ํ˜ธํ™”๋˜์ง€๋งŒ ํ‚ค๋Š” EncryptionConfiguration ํŒŒ์ผ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ๋Š” ๊ณต์‹ Kubernetes ๋ฌธ์„œ(https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration resources:
-  resources:
  -  secrets
  providers:
  -  aescbc:
        keys:
        -  name: key1
            secret: <base 64 encoded secret>
  -  identity: {}

์ด ์•”ํ˜ธํ™” ํŒŒ์ผ๋กœ ์ €์žฅ ์‹œ ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์œ„์น˜์™€ ํ•จ๊ป˜ -- encryption-provider-config ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์—ฌ API ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Appendix J: Example KMS configuration

KMS(ํ‚ค ๊ด€๋ฆฌ ์„œ๋น„์Šค) ๊ณต๊ธ‰์ž ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ Secrets๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ˆ์ œ ์•”ํ˜ธํ™” ๊ตฌ์„ฑ YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์˜ˆ๋Š” ๊ณต์‹ Kubernetes ๋ฌธ์„œ(https://kubernetes.io/docs/tasks/administer-cluster/kms-provider/)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - kms:
          name: myKMSPlugin
          endpoint: unix://tmp/socketfile.sock
          cachesize: 100
          timeout: 3s
      - identity: {}

KMS ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก API ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์œ„์น˜๋กœ --encryption- provider-config ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ณ  API ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์•”ํ˜ธํ™” ๊ณต๊ธ‰์ž์—์„œ KMS๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ˜„์žฌ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ• ์œ„์— EncryptionConfiguration ํŒŒ์ผ์˜ KMS ๊ณต๊ธ‰์ž ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - kms:
          name: myKMSPlugin
          endpoint: unix://tmp/socketfile.sock
          cachesize: 100
          timeout: 3s
      - aescbc:
          keys:
            - name: key1
              secret: <base64 encoded secret>

API ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ KMS ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋น„๋ฐ€์„ ๋‹ค์‹œ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Appendix K: Example pod-reader RBAC Role

์˜ˆ์ œ pod-reader ์—ญํ• ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ YAML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: your-namespace-name
  name: pod-reader
rules:
  - apiGroups: [''] # "" indicates the core API group
    resources: ['pods']
    verbs: ['get', 'watch', 'list']

Apply the Role using:

kubectl apply --f role.yaml

To create the example global-pod-reader ClusterRole:

์˜ˆ์ œ global-pod-reader ClusterRole์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: default
# "namespace" omitted since ClusterRoles are not bound to a namespace
   name: global-pod-reader
  rules:
  -  apiGroups: [""] # "" indicates the core API group
     resources: ["pods"]
     verbs: ["get", "watch", "list"]

Apply the Role using: kubectl apply --f clusterrole.yaml

Appendix L: Example RBAC RoleBinding and ClusterRoleBinding(RBAC RoleBinding ๋ฐ ClusterRoleBinding์˜ ์˜ˆ)

RoleBinding์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ YAML ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

apiVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read Pods in the "your- namespace-name"
# namespace.
# You need to already have a Role names "pod-reader" in that namespace.
kind: RoleBinding
metadata:
  name: read-pods
  namespace: your-namespace-name
subjects:
# You can specify more than one "subject"
-  kind: User
    name: jane # "name" is case sensitive
    apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role/ClusterRole # kind: Role # this must be a Role or ClusterRole
# this must match the name of the Role or ClusterRole you wish to bind to
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

To create a ClusterRoleBinding, create a YAML file with the following contents:

ClusterRoleBinding์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ YAML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binging allows anyone in the "manager" group to read
# Pod information in any namespace.
kind: ClusterRoleBinding
metadata:
      name: global-pod-reader
subjects:
# You can specify more than one "subject"
-  kind: Group
    name: manager # Name is case sensitive
    apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role/ClusterRole kind: ClusterRole # this must be a Role or ClusterRole
  name: global-pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

Apply the RoleBinding using:

kubectl apply --f clusterrolebinding.yaml

Appendix M: Audit Policy

๋‹ค์Œ ์˜ˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ˆ˜์ค€์—์„œ Kubernetes ๋น„๋ฐ€๊ณผ ๊ด€๋ จ๋œ ์š”์ฒญ์„ ๊ธฐ๋กํ•˜๊ณ  ๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฐ์‚ฌ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.

apiVersion: audit.k8s.io/v1
  kind: Policy
  rules:
     -  level: Metadata
         resources:
- group:"" #this refers to the core API group resources: ["secrets"]
     -  level: RequestResponse
# This audit policy logs events involving secrets at the metadata level, and all other audit events at the RequestResponse level

์กฐ์ง์— ๋งŽ์€ ์ˆ˜์˜ ๋กœ๊ทธ๋ฅผ ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ตœ๊ณ  ์ˆ˜์ค€์—์„œ Secrets์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๊ฒƒ์€ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ์ •๋ณด๊ฐ€ ๋กœ๊ทธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์†Œ๋น„ ๋ฐ ๊ฐ€์šฉ์„ฑ์ด ์šฐ๋ ค๋˜๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ๋กœ๊น… ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ถฉ์กฑ๋˜๋Š” ํ•œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๊ถŒํ•œ์ด ์—†๋Š” ์ผ์ƒ์ ์ธ ์ž‘์—…์˜ ๋กœ๊น… ์ˆ˜์ค€์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋กœ๊น… ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes API ์ด๋ฒคํŠธ๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ ๋กœ๊น… ๊ทœ์น™์€ ์š”์ฒญ์˜ ๋‹จ๊ณ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋กœ๊ทธ์—์„œ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes๋Š” ์š”์ฒญ์˜ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.Kubernetes API ์š”์ฒญ์˜ 4๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • RequestReceived

  • ResponseStarted

  • ResponseComplete

  • Panic

์กฐ์ง์˜ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ฆ๊ฐ€ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋„๋ก ํ™•์žฅ๋˜๋ฏ€๋กœ ๊ฐ์‚ฌ ์ •์ฑ…์ด ๋กœ๊น… ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ณ„์† ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์š”์†Œ๊ฐ€ ๊ฐ„๊ณผ๋˜์ง€ ์•Š๋„๋ก ๊ฐ์‚ฌ ์ •์ฑ…์€ ์ด์ „ ๊ทœ์น™์ด ๊ธฐ๋กํ•˜์ง€ ์•Š์€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํฌ๊ด„ ๊ทœ์น™์œผ๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ์ง€์ •๋œ ์ด๋ฒคํŠธ์— ์ ์šฉ๋˜๋Š” ๊ฐ์‚ฌ ์ •์ฑ…์˜ ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž ์žฌ์ ์œผ๋กœ ๊ฒน์น˜๋Š” ๊ทœ์น™์ด ์ž‘์„ฑ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.๋น„๋ฐ€์— ๊ด€ํ•œ ๊ทœ์น™์€ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ •์ฑ… ํŒŒ์ผ์˜ ๋งจ ์œ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ˆ˜์ค€๋ณด๋‹ค ๋†’์€ ์ˆ˜์ค€์˜ ๋กœ๊น…์œผ๋กœ ์ธํ•ด ๊ฒน์น˜๋Š” ๊ทœ์น™์ด ์‹ค์ˆ˜๋กœ ๋น„๋ฐ€์„ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฌ๊ด„ ๊ทœ์น™์€ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ทœ์น™์ด ๋จผ์ € ์ผ์น˜ํ•˜๋„๋ก ํ•˜๋Š” ์ •์ฑ…์˜ ๋งˆ์ง€๋ง‰ ๊ทœ์น™์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Request ๋˜๋Š” RequestResponse ์ˆ˜์ค€์—์„œ ๊ธฐ๋กํ•ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ ์œ ํ˜•์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋กœ๊ทธ์˜ ์ค‘๋ณต์„ฑ์„ ์ค„์ด๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊น๊ฒŒ ๋กœ๊ทธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์ง์˜ ๋Šฅ๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ๋œ ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ ์œ ํ˜• ๋ฐ ๋‹จ๊ณ„์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Critical:

  • ํฌ๋“œ ๋ฐฐํฌ ๋ฐ ๋ณ€๊ฒฝ

  • ์ธ์ฆ ์š”์ฒญ

  • RBAC ๋ฆฌ์†Œ์Šค ์ˆ˜์ •(clusterrolebindings, clusterroles ๋“ฑ)

  • ์˜ˆ์•ฝ๋œ ์ž‘์—… ์ƒ์„ฑ

  • ํฌ๋“œ ๋ณด์•ˆ ์Šน์ธ ๋˜๋Š” ํฌ๋“œ ๋ณด์•ˆ ์ •์ฑ…์— ๋Œ€ํ•œ ํŽธ์ง‘

Noncritical:

  • RequestReceived ๋‹จ๊ณ„

  • ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  ์ผ์ƒ์ ์œผ๋กœ ์•ก์„ธ์Šค๋˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ธ์ฆ๋œ ์š”์ฒญ

์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ๋Š” ๊ณต์‹ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค: https://kubernetes.io/docs/tasks/debug-application-cluster/audit/.

Appendix N: Example Flags to Enable Audit Logging

control plane์˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ kube-apiserver.yaml ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.kube-apiserver ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml

Add the following text to the kube-apiserver.yaml file:

kube-apiserver.yaml ํŒŒ์ผ์— ๋‹ค์Œ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

--audit-policy-file=/etc/kubernetes/policy/audit-policy.yaml
--audit-log-path=/var/log/audit.log
--audit-log-maxage=1825

audit-policy-file ํ”Œ๋ž˜๊ทธ๋Š” ๊ฐ์‚ฌ ์ •์ฑ…์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•˜๊ณ , audit-log-path ํ”Œ๋ž˜๊ทธ๋Š” ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋  ์›ํ•˜๋Š” ๋ณด์•ˆ ์œ„์น˜๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋กœ๊ทธ๋ฅผ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š” ์ตœ๋Œ€ ์ผ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ audit-log-maxage ํ”Œ๋ž˜๊ทธ์™€ ๋ณด๊ด€ํ•  ๊ฐ์‚ฌ ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ์ˆ˜, ์ตœ๋Œ€ ๋กœ๊ทธ ํŒŒ์ผ ํฌ๊ธฐ(MB)๋ฅผ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๊ธฐํƒ€ ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.๋“ฑ.๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์œ ์ผํ•œ ํ”Œ๋ž˜๊ทธ๋Š” audit-policy-file ๋ฐ audit-log-path ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.๋‹ค๋ฅธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ง์˜ ์ •์ฑ…๊ณผ ์ผ์น˜ํ•˜๋„๋ก ๋กœ๊น…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ kube-apiserver๊ฐ€ Pod๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๊ณ  ๊ฐ์‚ฌ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณด๊ด€ํ•  ์ •์ฑ… ๋ฐ ๋กœ๊ทธ ํŒŒ์ผ ์œ„์น˜์˜ hostPath๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์ด๊ฒƒ์€ Kubernetes ๋ฌธ์„œ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ kube-apiserver.yaml ํŒŒ์ผ์— ๋‹ค์Œ ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://kubernetes.io/docs/tasks/debug-application-cluster/audit/

volumeMounts:
  - mountPath: /etc/kubernetes/audit-policy.yaml
    name: audit
    readOnly: true
  - mountPath: /var/log/audit.log
    name: audit-log
    readOnly: false

volumes:
  - hostPath:
      path: /etc/kubernetes/audit-policy.yaml
      type: File
    name: audit
  - hostPath:
      path: /var/log/audit.log
      type: FileOrCreate
    name: audit-log

Last updated