CKA-14์ผ์ฐจ

YeJi Kimยท2023๋…„ 3์›” 1์ผ
0

CKA

๋ชฉ๋ก ๋ณด๊ธฐ
14/15

๐Ÿ“ CKA 14์ผ์ฐจ
๐Ÿ“ Udemy-Certified Kubernetes Administrator (CKA) with Practice Tests 163-173




164. Solution - Cluster Roles and Role Bindings

clusterroles์™€ clusterrolebindings ๊ฐœ์ˆ˜ ์„ธ๊ธฐ


clusterroles๋Š” cluster wide(ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด) ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— namespace๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.


์ฃผ์˜ํ•  ์ !

kubectl get clusterrolebinding ๋ช…๋ น์–ด๋Š” ํ• ๋‹น๋œ user์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.
user์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” kubectl describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


๋ช…๋ น์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ clusterrole๊ณผ clusterrolebinding ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.




165. Service Accounts

Service Account์˜ ๊ฐœ๋…์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‹ค๋ฅธ ๋ณด์•ˆ ๊ด€๋ จ ๊ฐœ๋…๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณ„์ •์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ๋‹ค.
์‚ฌ์šฉ์ž ๊ณ„์ •์€ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋น„์Šค ๊ณ„์ •์€ ์ปดํ“จํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ์˜ˆ์‹œ) ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” Admin์ด ๋  ์ˆ˜ ์žˆ๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฐฐํฌ ๋“ฑ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” Developer๊ฐ€ ์žˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ •์˜ ์˜ˆ์‹œ) ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API์˜ ์„ฑ๋Šฅ์„ ๋ฝ‘์•„๋‚ด๋Š” Prometheus, ์  ํ‚จ์Šค ๊ฐ™์€ ์ž๋™ํ™”๋œ ๋นŒ๋“œ ํˆด์„ ์ด์šฉํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐํฌํ•˜๋Š” Jenkins

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

์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ํ† ํฐ์€ Secret ๊ฐ์ฒด๋กœ ์ €์žฅ๋œ๋‹ค. Service Account๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋จผ์ € Service Account๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๋‹ค์Œ Service Account๋ฅผ ์œ„ํ•œ ํ† ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Secret์„ ๋งŒ๋“ค์–ด ๊ทธ ์•ˆ์— ํ† ํฐ์„ ์ €์žฅํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•œ ํƒ€์‚ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ, ํƒ€์‚ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ํŒŒ๋“œ ๋‚ด๋ถ€์— Service Account์˜ Secret ํ† ํฐ์„ ๋ณผ๋ฅจ์œผ๋กœ ์ž๋™ ๋งˆ์šดํŠธํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” default๋ผ๊ณ  ๋ช…๋ช…๋œ Service Account๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
๋”ฐ๋ผ์„œ, ๊ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ default Service Account๊ฐ€ ์žˆ๊ณ  ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค default Service Account๊ณผ ํ† ํฐ์ด ์ž๋™์œผ๋กœ ํ•ด๋‹น ํŒŒ๋“œ๋กœ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋œ๋‹ค.

ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์„ ํ™•์ธํ•ด๋ณด๋ฉด ์–ด๋– ํ•œ Secret์ด๋‚˜ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๋‹ค.
ํ•˜์ง€๋งŒ kubectl describe ๋ช…๋ น์–ด๋กœ ํŒŒ๋“œ์˜ ์ƒ์„ธ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๋ฉด default-token์ด๋ผ๋Š” Secret์œผ๋กœ๋ถ€ํ„ฐ ๋ณผ๋ฅจ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  default-token Secret์€ Service Account๋ฅผ ์œ„ํ•œ ํ† ํฐ์„ ํฌํ•จํ•˜๋Š” Secret์ด๋‹ค.

default-token Secret์˜ ์œ„์น˜๊ฐ€ '/var/run/secrets/kubernetes.io/serviceaccount'์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋“œ ๋‚ด๋ถ€์—์„œ ls ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๋Š” 3๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋งˆ์šดํŠธ๋œ secret์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ํ† ํฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ token์ด๋ผ๋Š” ํŒŒ์ผ์ด๋‹ค. ํ•ด๋‹น ํŒŒ์ผ ๋‚ด์šฉ์„ ๋ณด๋ฉด kubernetes API ์ ‘๊ทผ์— ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

default Service Account๋Š” ๊ธฐ๋ณธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ถŒํ•œ๋งŒ ๊ฐ–๋„๋ก ์ œํ•œ๋œ๋‹ค.
๋‹ค๋ฅธ Service Account๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ serviceAccountName ํ•„๋“œ๊ฐ€ ์ƒˆ๋กœ์šด Service Account์˜ ์ด๋ฆ„์„ ์ฐธ์กฐํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

๊ธฐ์กด ํŒŒ๋“œ์˜ Service Account๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ deployment์˜ ๊ฒฝ์šฐ, ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ž๋™์œผ๋กœ deployment๋ฅผ ์œ„ํ•ด rolloutํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Service Account์œผ๋กœ ์ƒˆ ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์ƒ์„ฑํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ default Service Account๋ฅผ ๋งˆ์šดํŠธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•ด๋ผ!!

automountServiceAccountToken ํ•„๋“œ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด Service Account๋ฅผ ์ž๋™์œผ๋กœ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.



๋ฆด๋ฆฌ์ฆˆ๋ฒ„์ „ 1.22, 1.24์—์„œ Service Account์™€ ๊ด€๋ จํ•ด ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๋“ค์„ ํ™•์ธํ•ด๋ณด์ž!

๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” default Service Account์ด ์žˆ๊ณ  ๊ทธ Service Account์—๋Š” ๊ด€๋ จ๋œ token์ด ์žˆ๋Š” Secret์ด ์žˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ž๋™์œผ๋กœ Service Account์™€ ํŒŒ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ํŒŒ๋“œ ๋‚ด ์ž˜ ์•Œ๋ ค์ง„ ์œ„์น˜๋กœ ํ† ํฐ์„ ๋งˆ์šดํŠธํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ์—” 'var/run/secrets/kubernetes.io/serviceaccount'์ด๋‹ค.

ํ† ํฐ์„ jwt ์›น์‚ฌ์ดํŠธ์—์„œ ํ•ด๋…ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋…ํ•ด๋ดค๋“ฏ์ด ํ† ํฐ์— ๋งŒ๋ฃŒ์ผ์ž๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์กด์žฌํ•˜๋Š” ํ•œ ํ† ํฐ์€ ์œ ํšจํ•˜๋‹ค.
๋”๊ตฌ๋‚˜ ๊ฐ JWT๋Š” ์„œ๋น„์Šค ๋‹น ๊ฐœ๋ณ„ Secret ๊ฐœ์ฒด๋ฅผ ์š”๊ตฌํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ™•์žฅ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
๋ฒ„์ „1.22์—์„œ TokenRequestAPI๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐœ์„  ์ œ์•ˆ์„œ1205์˜ ์ผ๋ถ€๋กœ API๋ฅผ ํ†ตํ•ด ๋” ์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ์„ฑ ์žˆ๊ฒŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ–ˆ๋‹ค.
TokenRequestAPI์—์„œ ์ƒ์„ฑ๋œ ํ† ํฐ์€ Audience Bound, Time Bound, Object Bound๋กœ ์ธํ•ด ๋” ์•ˆ์ „ํ•˜๋‹ค.

๋ฒ„์ „ 1.22 ์ดํ›„๋กœ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋” ์ด์ƒ Service Account์˜ Secret token์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋Œ€์‹  TokenRequestAPI๋ฅผ ํ†ตํ•ด ์ •ํ•ด์ง„ ๋งŒ๋ฃŒ์ผ์ž๋ฅผ ๊ฐ€์ง„ ํ† ํฐ์ด ์ƒ์„ฑ๋˜๊ณ  ํŒŒ๋“œ์— volume์œผ๋กœ ํƒ‘์žฌ๋œ๋‹ค.

๋ฒ„์ „ 1.24์—์„œ๋Š” ๋” ์ด์ƒ ์ž๋™์œผ๋กœ Secret์ด๋‚˜ Secret Token์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
๋”ฐ๋ผ์„œ, kubectl create ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ํ† ํฐ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ํ•„์š”ํ•œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์œ„ํ•œ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

์ƒ์„ฑํ•œ ํ† ํฐ์„ ํ•ด๋…ํ•ด๋ณด๋ฉด ์‹œ๊ฐ„ 'exp' ๋งŒ๋ฃŒ ๋‚ ์งœ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์‹œ๊ฐ„ ์ œํ•œ์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ณดํ†ต 1์‹œ๊ฐ„์œผ๋กœ ์ œํ•œํ•œ๋‹ค. ๋ช…๋ น์— ์ถ”๊ฐ€ ์˜ต์…˜์„ ์ „๋‹ฌํ•ด ํ† ํฐ์˜ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ๋Š˜๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฒ„์ „ 1.24์—์„œ ์˜›๋‚  ๋ฐฉ์‹์œผ๋กœ Secret token์„ ์ด์šฉํ•œ service account๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด Secret ์ •์˜ ํŒŒ์ผ์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. kind ํ•„๋“œ๋ฅผ 'kubernetes.io/service-account-token'์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  metadata ์˜์—ญ์— kubernetes.io/service-account.name ํ•„๋“œ์— service account์˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.
์„œ๋น„์Šค ๊ณ„์ •์„ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— Secret์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— secret ๊ฐœ์ฒด๊ฐ€ ํŠน์ • service account์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ service-account-token ํƒ€์ž…์œผ๋กœ secret์„ ๋งŒ๋“ค๋ฉด service account์™€ ๊ด€๋ จ๋œ secret ๊ฐœ์ฒด์— ๋งŒ๋ฃŒ๋˜์ง€ ์•Š๋Š” ํ† ํฐ์„ ์ƒ์„ฑํ•  ๊ฒƒ์ด๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์— ๋ช…์‹œ๋œ Service account token Secrets์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.




166. Practice Test Service Accounts


pod์— service account๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€




167. Image Security

ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ด๋ฆ„์€ Docker์˜ ์ด๋ฏธ์ง€ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฅธ ๊ฒƒ์ด๋‹ค.
nginx๋Š” ์ด๋ฏธ์ง€ ํ˜น์€ ์ €์žฅ์†Œ ์ด๋ฆ„์ด๋‹ค.
์ด๋ฏธ์ง€ ์ด๋ฆ„์˜ ์•ž ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ณ„์ • ์ด๋ฆ„์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๋‚˜ ๊ณ„์ • ์ด๋ฆ„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด library๋ผ๊ณ  ์ธ์‹ํ•œ๋‹ค. library๋Š” docker์˜ ๊ณต์‹ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋œ๋Š” ๊ธฐ๋ณธ ๊ณ„์ •์˜ ์ด๋ฆ„์ด๋‹ค.

์‚ฌ์šฉ์ž ์ด๋ฆ„์˜ ์•ž ๋ถ€๋ถ„์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ด๋ฆ„์ด๋‹ค. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ด๋ฆ„์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด Docker์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ Docker Hub๋กœ ์ถ”์ •๋œ๋‹ค.
Docker Hub์˜ DNS ์ด๋ฆ„์€ docker.io์ด๋‹ค.

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์ด๋‹ค.
์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œ(push)ํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋Œ์–ด์˜จ๋‹ค(pull).

Docker hub ์ด ์™ธ์—๋„ ๊ตฌ๊ธ€์˜ gcr ๋“ฑ ์œ ๋ช…ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋“ค์ด ๋งŽ๋‹ค.

์ผ๋ฐ˜์ธ์—๊ฒŒ ๊ณต๊ฐœ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์„ ๊ฒฝ์šฐ private registry๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
private registry์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๊ฒฉ ์ฆ๋ช…์ด ํ•„์š”ํ•˜๋‹ค.

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




169. Solution - Image Security

kubectl create secret docker-registry ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ private registry์— ๋Œ€ํ•œ secret์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด '-h' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ž!


imagePullSecret์„ pod ์ •์˜ ํŒŒ์ผ์— ๋ช…์‹œํ•˜๊ธฐ




170. Pre-requisite - Security in Docker

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

๊ณ ์œ ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ์–ด ๊ณ ์œ ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๊นฅ์ด๋‚˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋Š” ๋ณผ ์ˆ˜ ์—†๋‹ค.

sleep 3600 ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” docker conatainer ๋‚ด์—์„œ ps aux ๋ช…๋ น์–ด๋กœ docker contaner ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜์—ดํ•˜๋ฉด PID 1๋กœ sleep 3600 ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ˜ธ์ŠคํŠธ์—์„œ ps aux ๋ช…๋ น์–ด๋กœ ํ˜ธ์ŠคํŠธ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜์—ดํ•˜๋ฉด sleep 3600๋ฅผ ์‹คํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ PID๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋‹ค๋ฅธ PID๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์ด docker๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

docker ํ˜ธ์ŠคํŠธ๋Š” ๋ฃจํŠธ ์œ ์ € ํ•œ ๋ช…๊ณผ ๋‹ค์ˆ˜์˜ ๋น„๋ฃจํŠธ ์œ ์ €๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ์šฉ์ž ์ง‘ํ•ฉ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
๊ธฐ๋ณธ๊ฐ’์œผ๋กœ docker๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์•ˆ๊ณผ ๋ฐ–์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜๊ธธ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด docker run ๋ช…๋ น ์•ˆ์—์„œ '--user' ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ƒˆ ์‚ฌ์šฉ์ž ID๋ฅผ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค. ๋ช…์‹œ๋œ USER ID๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž ๋ณด์•ˆ์„ ์‹คํ–‰ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ Dockerfile์—์„œ USER๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

docker๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด ๋ฃจํŠธ ์‚ฌ์šฉ์ž์˜ ๋Šฅ๋ ฅ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋Š” ํ˜ธ์ŠคํŠธ์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž์™€๋Š” ๋‹ค๋ฅด๋‹ค.
docker๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฃจํŠธ ์‚ฌ์šฉ์ž๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ์ž์ด๋‹ค. ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋Š” ๋ญ๋“  ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฃจํŠธ ์‚ฌ์šฉ์ž์— ์˜ํ•œ ํ”„๋กœ์„ธ์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹œ์Šคํ…œ์˜ ์ œํ•œ ์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. '/usr/include/linux/capability.h'์—์„œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ docker๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•œ๋‹ค.
ํ˜ธ์ŠคํŠธ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ํ˜ธ์ŠคํŠธ๋‚˜ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฉํ•ดํ•  ์ˆ˜ ์—†๋‹ค.
์ด ๋™์ž‘์„ ์žฌ์ •์˜ํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ํŠน๊ถŒ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด docker run ๋ช…๋ น์— '--cap-add [์ถ”๊ฐ€ํ•  ๊ถŒํ•œ]' ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
๋“œ๋กญ ํŠน๊ถŒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด '--cap-drop [์ œ๊ฑฐํ•  ๊ถŒํ•œ]' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
๋ชจ๋“  ๊ถŒํ•œ์ด ํ™œ์„ฑํ™”๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด '--previleged' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.






171. Security Contexts

์ง€๋‚œ ๊ฐ•์˜์—์„œ ๋ดค๋“ฏ์ด docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ณด์•ˆ ํ‘œ์ค€ ์ง‘ํ•ฉ์„ ์ •์˜ํ•  ์˜ต์…˜์ด ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํŒŒ๋“œ์— ๋„ฃ์–ด ๋ณด๊ด€ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์ด๋‚˜ ํŒŒ๋“œ ์ˆ˜์ค€์—์„œ ๋ณด์•ˆ ์„ค์ •์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ๋“œ ์ˆ˜์ค€์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํŒŒ๋“œ ๋‚ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์„ค์ •๊ฐ’์ด ์ „๋‹ฌ๋œ๋‹ค.

ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์—์„œ securityContext ์˜์—ญ์„ ํ†ตํ•ด ํŒŒ๋“œ ์ˆ˜์ค€์˜ ๋ณด์•ˆ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
runAsUser ํ•„๋“œ์œผ๋กœ ํŒŒ๋“œ ์‚ฌ์šฉ์ž ID๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ ๋ณด์•ˆ์„ ์„ค์ •ํ•˜๋ ค๋ฉด containers ์˜์—ญ์— securityContext ์˜์—ญ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  capabilities ์˜์—ญ์— ์ถ”๊ฐ€ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค. capabilities ์˜์—ญ์€ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ๋งŒ ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค!




173. Solution - Security Contexts

ํŒŒ๋“œ ์ˆ˜์ค€์—์„œ ๋ณด์•ˆ ์„ค์ •์„ ํ•ด์•ผํ•˜์ง€ ์•Š๋‚˜...? ์™œ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ ๋ณด์•ˆ ์„ค์ •์„ ํ•˜๋Š” ๊ฑฐ์ง€...?๐Ÿ˜Ÿ

๊ทธ๋ฆฌ๊ณ  ์™œ ํŒŒ๋“œ ์ˆ˜์ค€์—์„œ ์„ค์ •ํ•˜๋ฉด edit๋˜์ง€ ์•Š์„๊นŒ???

ํŒŒ๋“œ ์‹คํ–‰์ž๋ฅผ ์ง€์ •ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๋“œ์˜ ์‹คํ–‰์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.


ํŒŒ๋“œ ๋ ˆ๋ฒจ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ๋ฒจ ๋ณด์•ˆ ์„ค์ • ์˜ˆ์‹œ

profile
์ด์ „์˜ ๊ธฐ๋ก๋“ค ๐Ÿ‘‰ https://blog.naver.com/reviewerkyj

0๊ฐœ์˜ ๋Œ“๊ธ€