๋ณด์•ˆ ๊ฐœ์š”

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์•”ํ˜ธํ™” ๋ฐ ๋…ธ๋“œ ๊ตฌ์„ฑ์„ ํฌํ•จํ•˜์—ฌ AWS์šฉ GKE์˜ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์— ๊ด€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ฝ˜ํ…์ธ , ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„, ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ, ํด๋Ÿฌ์Šคํ„ฐ API ์„œ๋ฒ„ ์•ก์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ ๋ณด์•ˆ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ํŠน์ • ์ฑ…์ž„์„ ์งˆ ๊ฒƒ์— ๋™์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GKE ํด๋Ÿฌ์Šคํ„ฐ ๊ณต๋™ ์ฑ…์ž„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

AWS KMS ์•”ํ˜ธํ™”

AWS์šฉ GKE๋Š” ๊ณ ๊ฐ ๊ด€๋ฆฌ AWS ํ‚ค ๊ด€๋ฆฌ ์„œ๋น„์Šค(KMS) ๋Œ€์นญ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ๊ตฌ์„ฑ ๋ฐ ๋ณผ๋ฅจ ์•”ํ˜ธํ™”์— ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‚ค๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํ‚ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ณด์•ˆ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๊ถŒํ•œ ์ง‘ํ•ฉ๋งŒ ํ• ๋‹นํ•˜๋Š” AWS KMS ํ‚ค ์ •์ฑ…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠน์ • ๊ถŒํ•œ์œผ๋กœ KMS ํ‚ค ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ €์žฅ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”

์ €์žฅ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋Š” ์ „์†ก ์ค‘ ๋ฐ์ดํ„ฐ์™€ ๊ตฌ๋ถ„๋˜๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•”ํ˜ธํ™”์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ AWS์šฉ GKE๋Š” AWS ํ”Œ๋žซํผ ๊ด€๋ฆฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ etcd ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ณผ๋ฅจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

AWS์šฉ GKE๋Š” AWS Elastic Block Storage(EBS) ๋ณผ๋ฅจ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ EBS ๋ณผ๋ฅจ์€ ํ•ญ์ƒ AWS Key Management System(AWS KMS) ํ‚ค๋กœ ์ €์žฅ ์ƒํƒœ์—์„œ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ๋…ธ๋“œ ํ’€์„ ๋งŒ๋“ค ๋•Œ ๊ณ ๊ฐ ๊ด€๋ฆฌ KMS ํ‚ค(CMK)๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ๋ณธ EBS ๋ณผ๋ฅจ์„ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด AWS๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” AWS ๋ฆฌ์ „ ๋‚ด์—์„œ ๊ธฐ๋ณธ AWS ๊ด€๋ฆฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” etcd์— ์ €์žฅ๋˜๋Š” Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด ๋ณด์•ˆ ๋น„๋ฐ€ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ etcd ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๊ธฐ๋ณธ ๋ณผ๋ฅจ์— ๋Œ€ํ•ด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๋”๋ผ๋„ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ AWS KMS ํ‚ค๋ฅผ --database-encryption-kms-key-arn ํ•„๋“œ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‚ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ์˜ ๋ด‰ํˆฌ ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค ํ•„๋“œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์—๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ KMS ํ‚ค ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ‚ค ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ์ €์žฅ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํ‚ค๋ฅผ ์ˆœํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ์•”ํ˜ธํ™” ์ž‘๋™ ๋ฐฉ๋ฒ•

Kubernetes๋Š” ๋ด‰ํˆฌ ์•”ํ˜ธํ™”๋กœ ์•Œ๋ ค์ง„ ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ํ‚ค(DEK)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋กœ์ปฌ ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์—๋Š” ํ‚ค ์•”ํ˜ธํ™” ํ‚ค(KEK)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋ณด์กฐ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ DEK ์ž์ฒด๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. KEK๋Š” Kubernetes์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋งŒ๋“ค ๋•Œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Kubernetes API ์„œ๋ฒ„๊ฐ€ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ ๋น„๋ฐ€์˜ ๊ณ ์œ ํ•œ DEK๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. Kubernetes API ์„œ๋ฒ„๊ฐ€ DEK๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋กœ์ปฌ๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

  3. Kubernetes API ์„œ๋ฒ„๊ฐ€ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•ด DEK๋ฅผ AWS KMS๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  4. AWS KMS๋Š” ์‚ฌ์ „ ์ƒ์„ฑ๋œ KEK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DEK๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์•”ํ˜ธํ™”๋œ DEK๋ฅผ Kubernetes API ์„œ๋ฒ„์˜ AWS KMS ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  5. Kubernetes API ์„œ๋ฒ„๊ฐ€ ์•”ํ˜ธํ™”๋œ ๋ณด์•ˆ ๋น„๋ฐ€๊ณผ ์•”ํ˜ธํ™”๋œ DEK๋ฅผ etcd์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๋œ DEK๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  6. Kubernetes API ์„œ๋ฒ„๊ฐ€ ์•”ํ˜ธํ™”๋œ DEK๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ DEK์— ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํ•ญ๋ชฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด API ์„œ๋ฒ„๊ฐ€ AWS KMS์— ์ฟผ๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ์ตœ๊ทผ์— ์•ก์„ธ์Šค๋œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ Kubernetes API ์„œ๋ฒ„์—์„œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ์š”์ฒญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.

  1. Kubernetes API ์„œ๋ฒ„๊ฐ€ etcd์—์„œ ์•”ํ˜ธํ™”๋œ ๋ณด์•ˆ ๋น„๋ฐ€ ๋ฐ ์•”ํ˜ธํ™”๋œ DEK๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  2. Kubernetes API ์„œ๋ฒ„๊ฐ€ ์บ์‹œ์—์„œ ๊ธฐ์กด ๋งต ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๊ณ  ํ•ญ๋ชฉ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋ณตํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ผ์น˜ํ•˜๋Š” ์บ์‹œ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด API ์„œ๋ฒ„๊ฐ€ KEK๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณตํ˜ธํ™”๋ฅผ ์œ„ํ•ด DEK๋ฅผ AWS KMS๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ณตํ˜ธํ™”๋œ DEK๊ฐ€ ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  4. ๋งˆ์ง€๋ง‰์œผ๋กœ, Kubernetes API ์„œ๋ฒ„๊ฐ€ ๋ณตํ˜ธํ™”๋œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค ์ˆœํ™˜

์ธ์ฆ์„œ ์ˆœํ™˜๊ณผ ๋ฐ˜๋Œ€๋กœ ํ‚ค ์ˆœํ™˜์€ ํ‚ค ์•”ํ˜ธํ™” ํ‚ค(KEK)์— ํฌํ•จ๋œ ๊ธฐ๋ณธ ์•”ํ˜ธํ™” ์ž๋ฃŒ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์˜ˆ์•ฝ๋œ ์ˆœํ™˜์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋˜๋Š” ํ‚ค๊ฐ€ ์†์ƒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์ˆ˜๋™์œผ๋กœ ํ‚ค ์ˆœํ™˜์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค ์ˆœํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ‚ค์—์„œ ์›์‹œ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ํ‚ค ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋‹จ์ผ ํ•„๋“œ๋งŒ ๋ฐ”๋€๋‹ˆ๋‹ค.

KMS ํ‚ค ์ˆœํ™˜

AWS KMS๋Š” KMS ํ‚ค์˜ ์ž๋™ ์ˆœํ™˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด AWS์—์„œ ํ‚ค์— ๋Œ€ํ•œ ์ƒˆ ์•”ํ˜ธํ™” ํ‚ค ์ž๋ฃŒ๋ฅผ 1๋…„์— ํ•œ ๋ฒˆ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์กฐ์น˜๋ฅผ ์ทจํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ‚ค ์ˆœํ™˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋Ÿฌ์Šคํ„ฐ ์‹ ๋ขฐ

๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ํ†ต์‹ ์€ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ž์ฒด ์„œ๋ช…๋œ ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€(CA)์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹๋ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ ๋ฃจํŠธ CA๋Š” API ์„œ๋ฒ„๋กœ ์ „์†ก๋˜๋Š” ์š”์ฒญ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • etcd ๋ฃจํŠธ CA๋Š” etcd ๋ณต์ œ๋ณธ์œผ๋กœ ์ „์†ก๋˜๋Š” ์š”์ฒญ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ๊ณ ์œ ํ•œ ๋ฃจํŠธ CA๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ CA๊ฐ€ ์†์ƒ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์˜ CA๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฃจํŠธ CA๋Š” ์œ ํšจ ๊ธฐ๊ฐ„์ด 30๋…„์ž…๋‹ˆ๋‹ค.

๋…ธ๋“œ ๋ณด์•ˆ

AWS์šฉ GKE๋Š” AWS EC2 ์ธ์Šคํ„ด์Šค์˜ ๋…ธ๋“œ ํ’€์— ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๋…ธ๋“œ์˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Ubuntu

๋…ธ๋“œ๊ฐ€ ์ตœ์ ํ™”๋œ Ubuntu OS ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Ubuntu ๋ฌธ์„œ์˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ์ ํ™”๋œ ํŒจํ‚ค์ง€ ์„ธํŠธ

  • Google Cloud์šฉ Linux ์ปค๋„

  • ์ œํ•œ๋œ ์‚ฌ์šฉ์ž ๊ณ„์ • ๋ฐ ๋ฃจํŠธ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ ์ค‘์ง€

Ubuntu์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ณด์•ˆ ๊ฐ€์ด๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ ๋ณดํ˜ธ

์‚ฌ์šฉ์ž๋Š” Kubernetes๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ”„๋กœ๋น„์ €๋‹, ํ™•์žฅ, ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ Google Cloud ์„œ๋น„์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€์ž‘์šฉ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋“œ ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ์„ธ์Šค ๊ถŒํ•œ ์ œํ•œ

ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ์„ ์œ„ํ•ด์„œ๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ”„๋กœ์„ธ์Šค์˜ ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ ๊ด€๋ จ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ณด์•ˆ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์™€ ๊ทธ๋ฃน
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Linux ๊ธฐ๋Šฅ
  • ๊ถŒํ•œ ์—์Šค์ปฌ๋ ˆ์ด์…˜

AWS์šฉ GKE ๋…ธ๋“œ ๊ธฐ๋ณธ ์šด์˜์ฒด์ œ์ธ Ubuntu๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ณธ Docker AppArmor ๋ณด์•ˆ ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. GitHub์—์„œ ํ”„๋กœํ•„ ํ…œํ”Œ๋ฆฟ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์ด ํ”„๋กœํ•„์€ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ID ๋””๋ ‰ํ„ฐ๋ฆฌ(/proc/)์—์„œ ํŒŒ์ผ์— ์ง์ ‘ ์“ฐ๊ธฐ
  • /proc/์— ์—†๋Š” ํŒŒ์ผ์— ์“ฐ๊ธฐ
  • /proc/sys์—์„œ /proc/sys/kernel/shm* ์ด์™ธ์˜ ํŒŒ์ผ์— ์“ฐ๊ธฐ
  • ํŒŒ์ผ ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ

์›Œํฌ๋กœ๋“œ๊ฐ€ ์ž์ฒด ์ˆ˜์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œํ•œ

ํŠน์ • Kubernetes ์›Œํฌ๋กœ๋“œ, ํŠนํžˆ ์‹œ์Šคํ…œ ์›Œํฌ๋กœ๋“œ์—๋Š” ์ž์ฒด ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ถ€ ์›Œํฌ๋กœ๋“œ๋Š” ์ˆ˜์ง์ ์œผ๋กœ ์ž๋™ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋…ธ๋“œ๋ฅผ ์ด๋ฏธ ์†์ƒ์‹œํ‚จ ๊ณต๊ฒฉ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ถ”๊ฐ€๋กœ ์—์Šค์ปฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฒฉ์ž๋Š” ๋…ธ๋“œ์— ์žˆ๋Š” ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋™์ผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์กด์žฌํ•˜๋Š” ๊ถŒํ•œ์ด ๋†’์€ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ์— ์ž์ฒด ์ˆ˜์ • ๊ถŒํ•œ์ด ์• ์ดˆ์— ๋ถ€์—ฌ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž์ฒด ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์— ์ •์ฑ… ์ปจํŠธ๋กค๋Ÿฌ ๋˜๋Š” Gatekeeper๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋ณด์•ˆ ์ •์ฑ…์„ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค Gatekeeper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ NoUpdateServiceAccount์™€ ๊ฐ™์€ ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•˜์—ฌ ๊ถŒํ•œ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์ฑ…์„ ๋ฐฐํฌํ•  ๋•Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ •์ฑ…์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ ์ ์šฉ๊ณผ ๊ฐ™์ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AWS์šฉ GKE์— NoUpdateServiceAccount ์ •์ฑ…์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ Constraint์— ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

parameters:
  allowedGroups: []
  allowedUsers:
  - service-PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com

PROJECT_NUMBER๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ฒˆํ˜ธ(ID ์•„๋‹˜)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

Binary Authorization ์‚ฌ์šฉ

์›Œํฌ๋กœ๋“œ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ Binary Authorization์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Binary Authorization์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋งŒ GKE ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋˜๋„๋ก ํ•˜๋Š” ๋ณด์•ˆ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ด€๋ฆฌ์ž๋Š” ์ด๋ฏธ์ง€ ๋ฐฐํฌ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๋Š” ์ •์ฑ…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ด๋ฏธ์ง€์— ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ์Šน์ธ๋œ ํ•ญ๋ชฉ(์ฆ๋ช…์ž) ์ง€์ •์ด ํฌํ•จ๋˜๋ฉฐ ๋ฐฐํฌ์— ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋ ค๋ฉด ์ด๋ฏธ์ง€์—์„œ ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๊ธฐ์ค€์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ฆ๋ช…์ž(์˜ˆ: ๊ฐœ๋ฐœ์ž ๋˜๋Š” ์ž๋™ํ™” ์‹œ์Šคํ…œ)๋Š” ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ์Œ(๋น„๊ณต๊ฐœ ๋ฐ ๊ณต๊ฐœ ํ‚ค)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ณด์•ˆ ๋น„๋ฐ€๋กœ ์œ ์ง€๋˜๋Š” ๋น„๊ณต๊ฐœ ํ‚ค๋Š” ์ด๋ฏธ์ง€์˜ ๋””์ง€ํ„ธ ์„œ๋ช…(์ฆ‰, ๊ณ ์œ ํ•œ ๋ฌธ์ž ์ง‘ํ•ฉ)์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ช…์€ ์Šน์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒ€์‚ฌ์™€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

  4. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋””์ง€ํ„ธ ์„œ๋ช…์ด ์ด๋ฏธ์ง€์— '์—ฐ๊ฒฐ'๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ช…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  5. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹œ์Šคํ…œ์—์„œ ์„œ๋ช… ํ™•์ธ์— ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ ํ‚ค๊ฐ€ Binary Authorization ์‹œ์Šคํ…œ์— ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

  6. ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ์š”์ฒญํ•˜๋ฉด Binary Authorization ์‹œ์Šคํ…œ์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์ด๋ฏธ์ง€์— ์—ฐ๊ฒฐ๋œ ๋””์ง€ํ„ธ ์„œ๋ช…์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  7. Binary Authorization ์‹œ์Šคํ…œ์€ ๋“ฑ๋ก๋œ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์— ์—ฐ๊ฒฐ๋œ ๋””์ง€ํ„ธ ์„œ๋ช…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์ •์ฑ…์— ์ •์˜๋œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํ‚ค์™€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์ง€ํ„ธ ์„œ๋ช…์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์ •์ฑ…์— ์ •์˜๋œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋ฉด Binary Authorization ์‹œ์Šคํ…œ์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํ‚ค์™€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์ง€ํ„ธ ์„œ๋ช…์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๊ฐ€ ์ •์ฑ…์— ์ •์˜๋œ ๋‹ค๋ฅธ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด Binary Authorization ์‹œ์Šคํ…œ์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

Binary Authorization ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Binary Authorization ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Binary Authorization์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ Binary Authorization์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ „์šฉ ๋…ธ๋“œ ํ’€์—์„œ ์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ

Kubernetes taint ๋ฐ ํ†จ๋Ÿฌ๋ ˆ์ด์…˜(toleration)์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์œ ํ˜•์˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํŠน์ • ๋…ธ๋“œ ํ’€์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ์›Œํฌ๋กœ๋“œ์—์„œ ์‚ฌ์šฉ์ž ์›Œํฌ๋กœ๋“œ๋ฅผ ์˜ˆ์•ฝํ•˜๊ฑฐ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ ํ’€์— ์‹ ๋ขฐ ์ˆ˜์ค€์ด ๋‹ค๋ฅธ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•˜๋„๋ก AWS์šฉ GKE์— ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

taint ๋ฐ ํ†จ๋Ÿฌ๋ ˆ์ด์…˜(toleration)์„ ์‚ฌ์šฉํ•œ ์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ๋Š” ๋ณด์žฅ๋œ ๋ณด์•ˆ ์กฐ์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฅผ AWS์šฉ GKE์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ•ํ™” ๋ฐฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ „์šฉ ๋…ธ๋“œ ํ’€์—์„œ ์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„