๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋๋ฅผ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์์ํ๊ธฐ ์ํด Amazon์ ์ฐธ์ฌ๋ก ๊ฐ๋ฐ๋ Linux ๋ฐฐํฌํ Bottlerocket 1.7.0์ด ์ถ์๋์์ต๋๋ค. ๋ฐฐํฌํ์ ๋๊ตฌ์ ์ ์ด ๊ตฌ์ฑ ์์๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. Amazon ECS, VMware ๋ฐ AWS EKS Kubernetes ํด๋ฌ์คํฐ์์ Bottlerocket ์คํ์ ์ง์ํ๊ณ ์ปจํ ์ด๋์ ๋ํ ๋ค์ํ ์ค์ผ์คํธ๋ ์ด์ ๋ฐ ๋ฐํ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ๋น๋ ๋ฐ ์๋์ ์์ฑ์ ์ง์ํฉ๋๋ค.
๋ฐฐํฌํ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๊ตฌ์ฑ ์์๋ง ํฌํจํ์ฌ Linux ์ปค๋๊ณผ ์ต์ ์์คํ ํ๊ฒฝ์ ํฌํจํ๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๋ถํ ํ ์ ์๋ ์์คํ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ๊ฒฝ์๋ systemd ์์คํ ๊ด๋ฆฌ์, Glibc ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Buildroot ๋น๋ ๋๊ตฌ, GRUB ๋ถํธ ๋ก๋, ์ฌ์ ํ ๋คํธ์ํฌ ๊ตฌ์ฑ์, ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋๋ฅผ ์ํ ์ปจํ ์ด๋ ๋ฐํ์, Kubernetes ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ, aws-iam-authenticator ๋ฐ Amazon์ด ํฌํจ๋ฉ๋๋ค. ECS ์์ด์ ํธ.
์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋๊ณ API ๋ฐ AWS SSM ์์ด์ ํธ๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ ๋ณ๋์ ๊ด๋ฆฌ ์ปจํ ์ด๋๋ก ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง์๋ ๋ช ๋ น ์ ธ, SSH ์๋ฒ ๋ฐ ํด์๋ ์ธ์ด(์: Python ๋๋ Perl ์์)๊ฐ ์์ต๋๋ค. ๊ด๋ฆฌ ๋๊ตฌ ๋ฐ ๋๋ฒ๊น ๋๊ตฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์๋ ๋ณ๋์ ์๋น์ค ์ปจํ ์ด๋์ ๋ฐฐ์น๋ฉ๋๋ค.
Fedora CoreOS, CentOS/Red Hat Atomic Host์ ๊ฐ์ ์ ์ฌํ ๋ฐฐํฌํ๊ณผ์ ์ฃผ์ ์ฐจ์ด์ ์ ๊ฐ๋ฅํ ์ํ์ผ๋ก๋ถํฐ ์์คํ ๋ณดํธ๋ฅผ ๊ฐํํ์ฌ OS ๊ตฌ์ฑ ์์์ ์ทจ์ฝ์ ์ ์ ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋งฅ๋ฝ์์ ์ต๋ ๋ณด์์ ์ ๊ณตํ๋ ๋ฐ ์ฃผ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. . ์ปจํ ์ด๋๋ ํ์ค Linux ์ปค๋ ๋ฉ์ปค๋์ฆ(cgroup, ๋ค์์คํ์ด์ค ๋ฐ seccomp)์ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค. ์ถ๊ฐ ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ฐฐํฌํ์ "๊ฐ์ " ๋ชจ๋์์ SELinux๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฃจํธ ํํฐ์ ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง์ดํธ๋๊ณ , /etc ์ค์ ํํฐ์ ์ tmpfs์ ๋ง์ดํธ๋์ด ์ฌ์์ ํ ์๋ ์ํ๋ก ๋ณต์๋ฉ๋๋ค. /etc/resolv.conf ๋ฐ /etc/containerd/config.toml๊ณผ ๊ฐ์ /etc ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ง์ ์์ ํ๋ ๊ฒ์ ์ง์๋์ง ์์ต๋๋ค. ์ค์ ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ ค๋ฉด API๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋ณ๋์ ์ปจํ ์ด๋๋ก ์ด๋ํด์ผ ํฉ๋๋ค. dm-verity ๋ชจ๋์ ๋ฃจํธ ํํฐ์ ์ ๋ฌด๊ฒฐ์ฑ์ ์ํธํ ๋ฐฉ์์ผ๋ก ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ธ๋ก ์ฅ์น ์์ค์์ ๋ฐ์ดํฐ ์์ ์๋๊ฐ ๊ฐ์ง๋๋ฉด ์์คํ ์ด ์ฌ๋ถํ ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์์คํ ๊ตฌ์ฑ ์์๋ After Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ ๋ฐ ๋ฒํผ ์ค๋ฒ๋ฐ์ผ๋ก ์ธํ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Rust๋ก ์์ฑ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋ํ ๋ ์ปดํ์ผ ๋ชจ๋ "-enable-default-pie" ๋ฐ "-enable-default-ssp"๋ ์คํ ํ์ผ ์ฃผ์ ๊ณต๊ฐ(PIE)์ ๋ฌด์์ํ๋ฅผ ํ์ฑํํ๊ณ ์นด๋๋ฆฌ์ ๋์ฒด๋ฅผ ํตํ ์คํ ์ค๋ฒํ๋ก๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. C/C++๋ก ์์ฑ๋ ํจํค์ง์ ๊ฒฝ์ฐ "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" ๋ฐ "-fstack-clash" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ํ์ฑํ -๋ณดํธ".
์ ๋ฆด๋ฆฌ์ค์์:
- RPM ํจํค์ง๋ฅผ ์ค์นํ ๋ JSON ํ์์ ํ๋ก๊ทธ๋จ ๋ชฉ๋ก์ ์์ฑํ๊ณ ์ด๋ฅผ ํธ์คํธ ์ปจํ ์ด๋์ /var/lib/bottlerocket/inventory/application.json ํ์ผ๋ก ๋ง์ดํธํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ํจํค์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- "๊ด๋ฆฌ์" ๋ฐ "์ ์ด" ์ปจํ ์ด๋๊ฐ ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- Go ๋ฐ Rust ์ธ์ด์ ๋ํ ํจํค์ง ๋ฒ์ ๋ฐ ์ข ์์ฑ์ด ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ํ์ฌ ํ๋ก๊ทธ๋จ์ผ๋ก ํจํค์ง ๋ฒ์ ์ด ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- kmod-5.10-nvidia์ ๋ํ tmpfilesd ๊ตฌ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
- tuftool์ ์ค์นํ๋ฉด ์ข ์์ฑ ๋ฒ์ ์ด ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru