Openshift - SCC

์ด ํŽ˜์ด์ง€์˜ ์› ์ €์ž๋Š” Guillaume

์ •์˜

Openshift์—์„œ SCC๋Š” Security Context Constraints์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. Security Context Constraints๋Š” Openshift ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” pod์˜ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ์ด๋Š” pod๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐ ํ—ˆ์šฉ๋˜๋Š” ๋ณด์•ˆ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๋ฐ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

SCC๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ๋ณด์•ˆ ์ •์ฑ…์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด pod๊ฐ€ ์ ์ ˆํ•œ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์กฐ์ง์˜ ๋ณด์•ˆ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์•ฝ ์กฐ๊ฑด์€ pod ๋ณด์•ˆ์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

  1. Linux capabilities: ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ(ํŠน๊ถŒ ์ž‘์—… ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋“ฑ).

  2. SELinux context: ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ SELinux ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  3. Read-only root filesystem: ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ์ˆ˜์ •์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ.

  4. ํ—ˆ์šฉ๋œ ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ๋ณผ๋ฅจ: pod๊ฐ€ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ๋ณผ๋ฅจ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ.

  5. Run as UID/GID: ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน ID๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ.

  6. ๋„คํŠธ์›Œํฌ ์ •์ฑ…: pod์˜ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์œผ๋กœ, egress ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SCC๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ๊ด€๋ฆฌ์ž๋Š” pod๊ฐ€ ์ ์ ˆํ•œ ์ˆ˜์ค€์˜ ๋ณด์•ˆ ๊ฒฉ๋ฆฌ์™€ ์•ก์„ธ์Šค ์ œ์–ด๋กœ ์‹คํ–‰๋˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด๋‚˜ ๋ฌด๋‹จ ์•ก์„ธ์Šค์˜ ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ pod ๋ฐฐํฌ๊ฐ€ ์š”์ฒญ๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์Šน์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค:

์ด ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ ๊ณ„์ธต์€ ํŠน๊ถŒ์ด ์žˆ๋Š” pod์˜ ์ƒ์„ฑ, ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋งˆ์šดํŠธ, ๋˜๋Š” ํŠน๊ถŒ ์ƒ์Šน์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์–ด๋– ํ•œ ์†์„ฑ ์„ค์ •๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

SCC ๋ชฉ๋ก

Openshift ํด๋ผ์ด์–ธํŠธ๋กœ ๋ชจ๋“  SCC๋ฅผ ๋‚˜์—ดํ•˜๋ ค๋ฉด:

$ oc get scc #List all the SCCs

$ oc auth can-i --list | grep securitycontextconstraints #Which scc user can use

$ oc describe scc $SCC #Check SCC definitions

๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์žฅ ์—„๊ฒฉํ•œ SCC์ธ "restricted" ๋ฐ "restricted-v2"์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SCC ์‚ฌ์šฉ

Pod์— ์‚ฌ์šฉ๋˜๋Š” SCC๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์„ ๋‚ด์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค:

$ oc get pod MYPOD -o yaml | grep scc
openshift.io/scc: privileged

์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ SCC์— ์•ก์„ธ์Šค ํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” SCC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธˆ์ง€๋œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ oc apply -f evilpod.yaml #Deploy a privileged pod
Error from server (Forbidden): error when creating "evilpod.yaml": pods "evilpod" is forbidden: unable to validate against any security context constrain

SCC ์šฐํšŒ

์ฐธ๊ณ  ์ž๋ฃŒ

Last updated