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
TCP
Inbound
6443
Kubernetes API server
TCP
Inbound
2379-2380
etcd server client API
TCP
Inbound
10250
kubelet API
TCP
Inbound
10259
kube-scheduler
TCP
Inbound
10257
kube-controller-manager
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 ํฌํธ ๋ฐ ์๋น์ค๊ฐ ๋์ด๋์ด ์์ต๋๋ค.
TCP
Inbound
10250
Kubelet API
TCP
Inbound
30000-32767
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
ํจ๊ณผ์ ์ธ ๋ก๊น ์๋ฃจ์ ์ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ ๋ค์ ์์ง๋ ๋ฐ์ดํฐ์์ ์ํ ์ ํธ๋ฅผ ์ต๋ํ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ๋ ๊ฐ์ง ์ค์ํ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๊ฒ์ฌ๋์ง ์์ผ๋ฉด ์ธ๊ณ ์ต๊ณ ์ ๋ก๊น ์๋ฃจ์ ์ ์ธ๋ชจ๊ฐ ์์ต๋๋ค. ๋ก๊ทธ ๊ฒ์ฌ ํ๋ก์ธ์ค์ ๋๋ถ๋ถ์ ์๋ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์ ์ ์ฑ ์ ์์ฑํ๊ฑฐ๋ ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ๊ฒ์ฌํ ๋ ๋ฌด์์ ์ฐพ์์ผ ํ๋์ง ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ํด๋ฌ์คํฐ๋ฅผ ์ ์ฉํ๋ ค๊ณ ํ๋ฉด ๋ก๊ทธ์ ํ๋์ ํ์ ์ ๋จ๊น๋๋ค. ๋ค์ ํ์๋ ๊ณต๊ฒฉ์๊ฐ ํด๋ฌ์คํฐ๋ฅผ ์ ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ๊ณผ ๋ก๊ทธ์ ๋ํ๋ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋์ ์์ต๋๋ค.
**์ฃผ์ ์ฌํญ:**
์ด ํ์๋ ๋ช ๊ฐ์ง ์๋ ค์ง ์์ฌ์ค๋ฌ์ด ์งํ๊ฐ ๋์ด๋์ด ์์ต๋๋ค.๋ํ ๊ด๋ฆฌ์๋ ์์ ์ ํ๊ฒฝ์์ ํน์ ๋ฌธ์ ์ ์๋ก์ด ์ํ์ ์ธ์ํ๊ณ ๊ฒฝ๊ณ ํด์ผ ํฉ๋๋ค.
๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ฒฝ๊ณ ๋ ํน์ ํด๋ฌ์คํฐ์ ๋น์ ์์ ์ธ ํ๋์ ์๋ณํ๋๋ก ์กฐ์ ๋ฉ๋๋ค.
๊ณต๊ฒฉ์๋ ์์ ์ ์ ์ฑ ์ํํธ์จ์ด๋ฅผ ์คํํ๊ฑฐ๋ ๊ณต๊ฒฉ์ ์คํ ์ด์ง ๊ทธ๋ผ์ด๋/ํผ๋ฒ ํฌ์ธํธ๋ก ์ฌ์ฉํ๊ธฐ ์ํด Pod ๋๋ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๋ ค๊ณ ํ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ์๋ ์ด๋ฆ๊ณผ ๋ช ๋ช ๊ท์น์ ๋ณต์ฌํ์ฌ ๋ฐฐํฌ๋ฅผ ํฉ๋ฒ์ ์ธ ์ด๋ฏธ์ง๋ก ๊ฐ์ฅํ ์ ์์ต๋๋ค.
๊ถํ์ ์์น์ํค๊ธฐ ์ํด ๋ฃจํธ ๊ถํ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ค๊ณ ํ ์๋ ์์ต๋๋ค.
๋น์ ํ Pod ๋ฐ ์ปจํ ์ด๋ ๋ฐฐํฌ๋ฅผ ์ดํด๋ณด์ญ์์ค.
์ ํจํ ์ด๋ฏธ์ง์ ์์ฌ๋๋ ์ด๋ฏธ์ง ๋ฐฐํฌ๋ฅผ ๋น๊ตํ๋ ค๋ฉด ์ด๋ฏธ์ง ID์ ๋ ์ด์ด ํด์๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ฃจํธ ๊ถํ์ผ๋ก ์์๋๋ Pod ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ฅผ ๊ด์ฐฐํ์ญ์์ค.
๊ณต๊ฒฉ์๋ ๋ฐฐํฌ๋ฅผ ์ํด ์ด๋ฏธ์ง์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๊ฑฐ๋ ํฉ๋ฒ์ ์ธ ๋น์ฌ์๊ฐ ํฉ๋ฒ์ ์ธ ์ด๋ฏธ์ง ๋์ ์ ์ฑ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐํฌํ๋๋ก ์์ด๊ธฐ ์ํด ์ ์ฑ ์ด๋ฏธ์ง๋ฅผ ํผํด์ ์กฐ์ง์ ๋ ์ง์คํธ๋ฆฌ๋ก ๊ฐ์ ธ์ค๋ ค๊ณ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ปจํ ์ด๋ ์์ง ๋๋ ์ด๋ฏธ์ง ์ ์ฅ์ ๋ก๊ทธ.๋คํธ์ํฌ ๋ฐฉ์ด์๋ ํ์ค ๋ฐฐํฌ ํ๋ก์ธ์ค์ ๋ชจ๋ ๋ณํ์ ์กฐ์ฌํด์ผ ํฉ๋๋ค.
ํน์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ด๋ ์ ์ด๋ฏธ์ง ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฐฐํฌ๋ ํ ์ปจํ ์ด๋์ ๋์ ๋ณ๊ฒฝ์ ํตํด ๊ฐ์งํ ์๋ ์์ต๋๋ค.
๊ณต๊ฒฉ์๊ฐ ์ปจํ ์ด๋์์ ๋ช ๋ น ์คํ ๊ธฐ๋ฅ์ ํ๋ํ๋ ์ง์ ๊น์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ๋ ๊ฒฝ์ฐ ํ๋์ ๊ตฌ์ฑ์ ๋ฐ๋ผ ํ๋ ๋ด์์ API ์์ฒญ์ ํ ์ ์์ผ๋ฉฐ ์ ์ฌ์ ์ผ๋ก ๊ถํ์ ํ๋ํ๊ณ ๋ด์์ ์ธก๋ฉด์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ ๋๋ ํธ์คํธ์ ์นจ์ .
Pod ๋ด๋ถ์์ ๋ฐ์ํ๋ ๋น์ ์์ ์ธ API ์์ฒญ(Kubernetes ๊ฐ์ฌ ๋ก๊ทธ์์) ๋๋ ๋น์ ์์ ์ธ ์์คํ ํธ์ถ(seccomp ๋ก๊ทธ์์).
์ด๊ฒ์ ๋ํ ํฌ๋ IP ์ฃผ์๋ฅผ ์์ค IP๋ก ๋ฑ๋กํ๋ ํฌ๋ ์์ฑ ์์ฒญ์ผ๋ก ํ์๋ ์ ์์ต๋๋ค.
Kubernetes ํด๋ฌ์คํฐ์ ๋ํ ์ด๊ธฐ ์ก์ธ์ค ๊ถํ์ ์ป์ ๊ณต๊ฒฉ์๋ kube-apiserver์ ์ํธ ์์ฉํด์ผ ํ๋ ํด๋ฌ์คํฐ์ ๋ ๊น์ด ์นจํฌํ๋ ค๊ณ ์๋ํ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ค์ด ์ด๋ค ์ด๊ธฐ ๋จ๊ณ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ๋์ ๊ถํ์ด ์์ผ๋ฉด API ์๋ฒ์ ์ฌ๋ฌ ๋ฒ ์คํจํ ์์ฒญ์ ํ ์ ์์ต๋๋ค.
๋ฐ๋ณต์ ์ผ๋ก ์คํจํ API ์์ฒญ ๋ฐ ํน์ ๊ณ์ ์ ๋ํด ๋น์ ์์ธ ์์ฒญ ํจํด์ ์ํ ์ ํธ์ ๋๋ค.
๊ณต๊ฒฉ์๋ ํผํด์์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒด ํฌ๋ฆฝํ ๋ง์ด๋๋ฅผ ์คํํ๊ธฐ ์ํด ํด๋ฌ์คํฐ๋ฅผ ์์์ํค๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค(์ฆ, ํฌ๋ฆฝํ ์ฌํน ๊ณต๊ฒฉ).
๊ณต๊ฒฉ์๊ฐ ํฌ๋ฆฝํ ์ฌํน ๊ณต๊ฒฉ์ ์ฑ๊ณต์ ์ผ๋ก ์์ํ๋ฉด ๋ก๊ทธ์ ๋ฆฌ์์ค ์๋น๊ฐ ๊ฐ์๊ธฐ ๊ธ์ฆํ๋ ๊ฒ์ผ๋ก ํ์๋ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ์๋ ํด๋ฌ์คํฐ์์ ํ๋์ ๊ท์์ ํผํ๊ธฐ ์ํด ์ต๋ช ๊ณ์ ์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ์์ ๋ชจ๋ ์ต๋ช ์์ ์ ๊ด์ฐฐํฉ๋๋ค.
๊ณต๊ฒฉ์๋ ํธ์คํธ์ ์ก์ธ์คํ๊ธฐ ์ํด ์์๋์๊ฑฐ๋ ์์ฑ ์ค์ธ ์ปจํ ์ด๋์ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ ์ ์์ต๋๋ค.
๋ณผ๋ฅจ ๋ง์ดํธ ์์ ์ ์ด์์ด ์๋์ง ๋ฉด๋ฐํ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
์์ฝ๋ ์์ (Kubernetes CronJobs๋ผ๊ณ ๋ ํจ)์ ์์ฑํ ์ ์๋ ๊ณต๊ฒฉ์๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes๊ฐ ํด๋ฌ์คํฐ์์ ๋งฌ์จ์ด๋ฅผ ์๋์ผ๋ก ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋๋ก ํ ์ ์์ต๋๋ค[8].
์์ฝ๋ ์์ ์์ฑ ๋ฐ ์์ ์ ๋ฉด๋ฐํ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
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
Was this helpful?