Search

[CKA] 51. Security Contexts

Date
2025/01/21
Category
Devops
Tag
Kubernetes
CKA
Security
Docker
๋ชฉ์ฐจ

ย Docker Security

ย Process Isolation

Process Isolation์ด๋ž€ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํ˜ธ์ŠคํŠธ์˜ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
์ปจํ…Œ์ด๋„ˆ๋Š” ํ˜ธ์ŠคํŠธ์™€ ๊ฐ™์€ ์ปค๋„์„ ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋Š” ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋‹ฌ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜ธ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ž์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ์‚ฌ์‹ค์ƒ ํ˜ธ์ŠคํŠธ ์‹คํ–‰๋˜์ง€๋งŒ, ๊ฐ์ž์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ด๋กœ ์ธํ•ด Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์™ธ๋ถ€ ๋˜๋Š” ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ณผ ์ˆ˜ ์—†๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, docker run ubuntu sleep 3600 ๋ช…๋ น์„ ํ†ตํ•ด ์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•˜์ž. Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜์—ดํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ID๊ฐ€ 1์ธ sleep ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
# Docker Container ๋‚ด์—์„œ ํ”„๋กœ์„ธ์Šค ํ™•์ธ $ ps aux USER PID ... COMMAND root 1 ... sleep 3600
Bash
๋ณต์‚ฌ
๋ฐ˜๋ฉด, Docker ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ๊ฐ€์ง„ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ž์‹ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํ”„๋กœ์„ธ์Šค๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์ผ์ง€๋ผ๋„ ํ˜ธ์ŠคํŠธ์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ID์™€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ID๊ฐ€ ๋‹ค๋ฅด๋‹ค.
# Host์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ํ™•์ธ $ ps aus USER PID ... COMMAND ... root 3802 ... docker-containerd-shime -namespace m root 3816 ... sleep 3600
Bash
๋ณต์‚ฌ
์ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ID๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Docker๋Š” ์‹œ์Šคํ…œ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ๋‹ค.

ย User Security

ย Users

ํ˜ธ์ŠคํŠธ๋Š” root ์œ ์ € ํ•œ ๋ช…๊ณผ ๋‹ค์ˆ˜์˜ non-root ์œ ์ €๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Docker๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด์™ธ๋ถ€ ๋ชจ๋‘์—์„œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋œ๋‹ค.

ย User Instruction

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด docker run ๋ช…๋ น์˜ --user์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ID๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
# ID๊ฐ€ 1000์ธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ docker run --user=1000 ubuntu sleep 3600
Bash
๋ณต์‚ฌ
์‚ฌ์šฉ์ž ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ์ž ID๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Dockerfile์— ์‚ฌ์šฉ์ž ID๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ID๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, ํ”„๋กœ์„ธ์Šค๋Š” ์ง€์ •๋œ ์‚ฌ์šฉ์ž ID๋กœ ์‹คํ–‰๋œ๋‹ค.
# Dockerfile FROM ubuntu User 1000
Docker
๋ณต์‚ฌ
docker build -t my-ubuntu-image . docker rub my-ubuntu-image sleep 3600
Bash
๋ณต์‚ฌ

ย Capabilities

Docker๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์—ฌ, ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ŠคํŠธ์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž์™€ ๋™์ผํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ์ฆ‰, ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž์™€ ํ˜ธ์ŠคํŠธ์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋Š” ๋™์ผํ•œ ๊ถŒํ•œ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.
Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œํ•œ๋œ ๊ธฐ๋Šฅ(Capabilities)์„ ๊ฐ€์ง€๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ถŒํ•œ์ด ์—†๋‹ค.
Docker๋Š” Linux์˜ Capabilities๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ํŒŒ์ผ ์ˆ˜์ •, ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋ฐ ์ข…๋ฃŒ, ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ž‘์—…, ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ… ๋“ฑ์˜ ๋‹ค์–‘ํ•œ Linux ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋Š” /usr/include/linux/capability.h์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ย Privilege

Docker๊ฐ€ ์ง€๋‹Œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ๊ถŒํ•œ์„ ์กฐ์ •ํ•จ์œผ๋กœ์จ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ๋ฐ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์˜ํ–ฅ๋ ฅ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
Docker๊ฐ€ ๊ฐ€์ง€๋Š” Capabilities๋ฅผ ์ถ”๊ฐ€ ๋ฐ ์ œ์™ธ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ docker run ๋ช…๋ น์— --cap-add, --cap-drop ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์ผ ๋ชจ๋“  ๊ถŒํ•œ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด --privileged ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
# ๊ธฐ๋Šฅ ์ถ”๊ฐ€ docker run --cap-run MAC_ADMIN ubuntu # ๊ธฐ๋Šฅ ์ œํ•œ docker run --cap-drop KILL ubuntu # ๋ชจ๋“  ๊ถŒํ•œ ํ™œ์„ฑํ™” docker run --privileged ubuntu
Bash
๋ณต์‚ฌ

ย Security Contexts

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋„ ๋„์ปค์—์„œ์ฒ˜๋Ÿผ Linux์˜ Capabilities๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” Pod์— ์บก์Šํ™”๋˜์–ด, Pod Level๊ณผ Container Level์—์„œ ๋ณด์•ˆ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ย Pod Level

ํŒŒ๋“œ ์ˆ˜์ค€์—์„œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•  ๊ฒฝ์šฐ, ํŒŒ๋“œ ๋‚ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค. security context๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” spec.securityContext ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
apiVersion: v1 kind: Pod metadata: name: web-pod spec: securityContext: runAsUser: 1000 # ์‚ฌ์šฉ์ž ID ์„ค์ • containers: - name: ubuntu image: ubuntu command: ["sleep", "3600"]
YAML
๋ณต์‚ฌ

ย Container Level

์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ ์„ค์ •์„ ํ•  ๊ฒฝ์šฐ, ์„ค์ •๋œ ์ปจํ…Œ์ด๋„ˆ์—๋งŒ ์ ์šฉ๋œ๋‹ค. ๋งŒ์ผ ํŒŒ๋“œ ์ˆ˜์ค€์—์„œ ๊ตฌ์„ฑ์ด ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์ด ํŒŒ๋“œ์˜ ์„ค์ •์„ ๋ฎ์–ด์“ด๋‹ค.
์ •์˜ ํŒŒ์ผ์—์„œ๋Š” ํŒŒ๋“œ์—์„œ ์‚ฌ์šฉํ•œ securityContext ํ•„๋“œ๋ฅผ spec.containers ์•„๋ž˜์— ๋‘ฌ์•ผ ํ•œ๋‹ค.
apiVersion: v1 kind: Pod metadata: name: web-pod spec: containers: - name: ubuntu image: ubuntu command: ["sleep", "3600"] securityContext: runAsUser: 1000 # ์‚ฌ์šฉ์ž ID ์„ค์ • capabilities: add: ["MAC_ADMIN"] # ๊ธฐ๋Šฅ ์ถ”๊ฐ€ drop: ["KILL"] # ๊ธฐ๋Šฅ ์ œํ•œ # privileged: true # ๋ชจ๋“  ๊ถŒํ•œ ํ™œ์„ฑํ™”
YAML
๋ณต์‚ฌ
์ฃผ์˜ํ•  ์ ์œผ๋กœ, capabilities๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ ˆ๋ฒจ์—์„œ๋งŒ ์ง€์›๋œ๋‹ค.