๊ณ ๊ฐ ๊ด€๋ฆฌ ์•”ํ˜ธํ™” ํ‚ค ์‚ฌ์šฉ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Dataform์— CMEK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ  Dataform ์ €์žฅ์†Œ์˜ CMEK ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Dataform์€ ์ €์žฅ ์ค‘ ๊ณ ๊ฐ ์ฝ˜ํ…์ธ ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. Dataform์€ ์‚ฌ์šฉ์ž ์ธก์˜ ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ์ž๋™์œผ๋กœ ์•”ํ˜ธํ™”๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ Google ๊ธฐ๋ณธ ์•”ํ˜ธํ™”๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์ œ์–ดํ•˜๋ ค๋ฉด Dataform์„ ํฌํ•จํ•œ CMEK ํ†ตํ•ฉ ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ Cloud KMS์—์„œ ๊ณ ๊ฐ ๊ด€๋ฆฌ ์•”ํ˜ธํ™” ํ‚ค(CMEK)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Cloud KMS ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณดํ˜ธ ์ˆ˜์ค€, ์œ„์น˜, ์ˆœํ™˜ ์ผ์ •, ์‚ฌ์šฉ ๋ฐ ์•ก์„ธ์Šค ๊ถŒํ•œ, ์•”ํ˜ธํ™” ๊ฒฝ๊ณ„๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud KMS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค ์‚ฌ์šฉ์„ ์ถ”์ ํ•˜๊ณ , ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ , ํ‚ค ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Google์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋Œ€์นญ ํ‚ค ์•”ํ˜ธํ™” ํ‚ค (KEK)๋ฅผ ์†Œ์œ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉ์ž๊ฐ€ Cloud KMS์—์„œ ์ด๋Ÿฌํ•œ ํ‚ค๋ฅผ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CMEK๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค์ •ํ•œ ํ›„ Dataform ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ํ™˜๊ฒฝ์€ Google ๊ธฐ๋ณธ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™” ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณ ๊ฐ ๊ด€๋ฆฌ ์•”ํ˜ธํ™” ํ‚ค(CMEK)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

Dataform ์ €์žฅ์†Œ์— CMEK ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ €์žฅ์†Œ์˜ ๋ชจ๋“  Dataform ๊ด€๋ฆฌ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ์†Œ์— ์„ค์ •๋œ CMEK ๋ณดํ˜ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ ์ƒํƒœ์—์„œ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • Dataform ์ €์žฅ์†Œ ๋ฐ ์ž‘์—…๊ณต๊ฐ„์˜ Git ์ €์žฅ์†Œ ์ฝ˜ํ…์ธ 
  • ์ปดํŒŒ์ผ๋œ SQL ์ฟผ๋ฆฌ ๋ฐ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
  • ์›Œํฌํ”Œ๋กœ ์ž‘์—…์˜ ์ €์žฅ๋œ SQL ์ฟผ๋ฆฌ
  • ์‹คํ–‰๋œ ์›Œํฌํ”Œ๋กœ ์ž‘์—…์˜ ์˜ค๋ฅ˜ ์„ธ๋ถ€์ •๋ณด

Dataform์€ ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ CMEK ๋ณดํ˜ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ €์žฅ๋œ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ์˜ ๋ณตํ˜ธํ™”๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—… ์ค‘. ์ด๋Ÿฌํ•œ ์ž‘์—…์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜๋ฉฐ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ฐ ์ €์žฅ ๋ฐ์ดํ„ฐ(customer data at rest)๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—… ์ค‘. ์ด ์ž‘์—…์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜๋ฉฐ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Dataform์€ Dataform ๋ฆฌ์†Œ์Šค์—๋งŒ ์—ฐ๊ฒฐ๋œ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์•”ํ˜ธํ™”๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Dataform์€ Dataform ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์„ ํ†ตํ•ด BigQuery์—์„œ ์ƒ์„ฑ๋œ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์•”ํ˜ธํ™”๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. BigQuery์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ ค๋ฉด BigQuery์šฉ CMEK๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ํ‚ค

Dataform์€ ๋‹ค์Œ ์œ ํ˜•์˜ CMEK ํ‚ค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค ๊ฐ€์šฉ์„ฑ์€ ํ‚ค ์œ ํ˜• ๋ฐ ๋ฆฌ์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. CMEK ํ‚ค์˜ ์ง€๋ฆฌ์  ๊ฐ€์šฉ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud KMS ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

Dataform์€ ๋‹ค์Œ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ๋Š” CMEK๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • CMEK๋กœ ์•”ํ˜ธํ™”๋œ ์ €์žฅ์†Œ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” 512MB์ž…๋‹ˆ๋‹ค.
  • CMEK๋กœ ์•”ํ˜ธํ™”๋œ ์ €์žฅ์†Œ์˜ ์ž‘์—…๊ณต๊ฐ„ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” 512MB์ž…๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ์ €์žฅ์†Œ์— CMEK ๋ณดํ˜ธ ํ‚ค๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์•ˆ์—๋งŒ CMEK ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ์—์„œ CMEK ๋ณดํ˜ธ ํ‚ค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ์˜ CMEK ๋ณดํ˜ธ ํ‚ค๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Google Cloud ํ”„๋กœ์ ํŠธ์— ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ ์œ„์น˜์— ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ƒˆ ์ €์žฅ์†Œ๋Š” CMEK๋กœ ์•”ํ˜ธํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Google Cloud ํ”„๋กœ์ ํŠธ ์œ„์น˜์— ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๊ธฐ๋ณธ Dataform CMEK ํ‚ค ๋˜๋Š” ๋‹ค๋ฅธ CMEK ํ‚ค๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ์ €์žฅ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋Š” ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ Dataform CMEK ํ‚ค์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ธฐ์กด ์ €์žฅ์†Œ์—๋Š” ์ด์ „ ๊ฐ’์ด ์ ์šฉ๋˜๊ณ  ๋ณ€๊ฒฝ ํ›„ ์ƒ์„ฑ๋œ ์ €์žฅ์†Œ์—๋Š” ์—…๋ฐ์ดํŠธ๋œ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์œ„์น˜๋ณ„๋กœ Google Cloud ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์— ํ•˜๋‚˜์˜ ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CMEK ์กฐ์ง ์ •์ฑ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์šฉ์„ฑ์— ๋”ฐ๋ผ Cloud HSM ๋ฐ Cloud EKM ํ‚ค ์‚ฌ์šฉ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์œ„์น˜ ๊ฐ„ ํ‚ค ๊ฐ€์šฉ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud KMS ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Cloud KMS ํ• ๋‹น๋Ÿ‰ ๋ฐ Dataform

Dataform์—์„œ Cloud HSM ํ‚ค์™€ Cloud EKM ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dataform์—์„œ CMEK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ์—์„œ Cloud KMS ์•”ํ˜ธํ™” ์š”์ฒญ ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CMEK๋กœ ์•”ํ˜ธํ™”๋œ Dataform ์ €์žฅ์†Œ๋Š” ์ €์žฅ์†Œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ด ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CMEK ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™” ์ž‘์—…์€ ํ•˜๋“œ์›จ์–ด (Cloud HSM) ๋˜๋Š” ์™ธ๋ถ€(Cloud EKM) ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ Cloud KMS ํ• ๋‹น๋Ÿ‰์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud KMS ํ• ๋‹น๋Ÿ‰์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ‚ค ๊ด€๋ฆฌ

๋ชจ๋“  ํ‚ค ๊ด€๋ฆฌ ์ž‘์—…์— Cloud KMS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Dataform์€ Cloud KMS์—์„œ ์ „ํŒŒ๋  ๋•Œ๊นŒ์ง€ ์–ด๋–ค ํ‚ค ๋ณ€๊ฒฝ์‚ฌํ•ญ๋„ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ ๋Œ€์‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ‚ค ์‚ฌ์šฉ ์ค‘์ง€ ๋˜๋Š” ์‚ญ์ œ์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ž‘์—…์€ ์ „ํŒŒ๋˜๋Š” ๋ฐ ์ตœ๋Œ€ 3์‹œ๊ฐ„๊นŒ์ง€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.

์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“  ํ›„ Dataform์€ Cloud KMS๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฐ ์ž‘์—… ์ค‘์— ํ‚ค๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Dataform์—์„œ Cloud KMS ํ‚ค๊ฐ€ ์‚ฌ์šฉ ์ค‘์ง€๋˜์—ˆ๊ฑฐ๋‚˜ ์‚ญ์ œ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ์ง€๋˜๋ฉด ํ•ด๋‹น ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Dataform์„ ํ†ตํ•œ Cloud KMS ํ˜ธ์ถœ๋กœ ์ด์ „์— ์‚ฌ์šฉ ์ค‘์ง€๋œ ํ‚ค๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜๋ฉด Dataform์ด ์ž๋™์œผ๋กœ ์•ก์„ธ์Šค๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

Cloud EKM์—์„œ ์™ธ๋ถ€ ํ‚ค ์‚ฌ์šฉ

Cloud KMS์— ์žˆ๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ง€์›๋˜๋Š” ์™ธ๋ถ€ ํ‚ค ๊ด€๋ฆฌ ํŒŒํŠธ๋„ˆ์— ์žˆ๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด Cloud ์™ธ๋ถ€ ํ‚ค ๊ด€๋ฆฌ์ž (Cloud EKM)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Google Cloud์™ธ๋ถ€์— ์žˆ๋Š” ํ‚ค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ธ ์™ธ๋ถ€ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud ์™ธ๋ถ€ ํ‚ค ๊ด€๋ฆฌ์ž๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Cloud EKM์œผ๋กœ ์™ธ๋ถ€ ํ‚ค๋ฅผ ๋งŒ๋“  ํ›„ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•ด๋‹น ํ‚ค์˜ ID๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ƒˆ Dataform ์ €์žฅ์†Œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ๋Š” ์ƒˆ ์ €์žฅ์†Œ์— Cloud KMS ํ‚ค๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Dataform ๊ธฐ๋ณธ CMEK ํ‚ค ์‚ฌ์šฉ

๋™์ผํ•œ CMEK ํ‚ค๋กœ ์—ฌ๋Ÿฌ Dataform ์ €์žฅ์†Œ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ ค๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Dataform CMEK ํ‚ค์˜ Google Cloud ํ”„๋กœ์ ํŠธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Google Cloud ํ”„๋กœ์ ํŠธ๋‹น ํ•˜๋‚˜์˜ ๊ธฐ๋ณธ CMEK ํ‚ค๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด Dataform์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Google Cloud ํ”„๋กœ์ ํŠธ ์œ„์น˜์— ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ƒˆ ์ €์žฅ์†Œ์— ํ‚ค๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ CMEK ํ‚ค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ‚ค ์ƒํƒœ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

๋“œ๋ฌธ ๊ฒฝ์šฐ์ง€๋งŒ Cloud KMS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๊ฐ„ ์ค‘์—๋Š” Dataform์ด Cloud KMS์—์„œ ํ‚ค ์ƒํƒœ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform์ด Cloud KMS์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ ์‹œ์ ์— ์‚ฌ์šฉ ์„ค์ •๋œ ํ‚ค๋กœ Dataform ์ €์žฅ์†Œ๊ฐ€ ๋ณดํ˜ธ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•”ํ˜ธํ™”๋œ ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Dataform์ด Cloud KMS์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ  Cloud KMS์—์„œ ํ‚ค๊ฐ€ ํ™œ์„ฑ ์ƒํƒœ๋ผ๊ณ  ์‘๋‹ตํ•  ๋•Œ๊นŒ์ง€ ์•”ํ˜ธํ™”๋œ ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

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

๋กœ๊น…

ํ”„๋กœ์ ํŠธ์—์„œ Cloud KMS API์— ๋Œ€ํ•ด ๊ฐ์‚ฌ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•œ ๊ฒฝ์šฐ Cloud Logging์—์„œ ์‚ฌ์šฉ์ž ๋Œ€์‹  Dataform์ด Cloud KMS์— ์ „์†กํ•˜๋Š” ์š”์ฒญ์„ ๊ฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ Cloud KMS ๋กœ๊ทธ ํ•ญ๋ชฉ์€ Cloud Logging์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

  • Dataform๊ณผ Cloud KMS๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์‹คํ–‰ํ• ์ง€ ๋˜๋Š” ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Google Cloud ํ”„๋กœ์ ํŠธ ID ๋ฐ ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ ์‹๋ณ„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • Cloud KMS๋ฅผ ์‹คํ–‰ํ•˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. Cloud Key Management Service API ์‚ฌ์šฉ ์„ค์ •
    2. ํ‚ค๋ง ๋ฐ ํ‚ค ๋งŒ๋“ค๊ธฐ์˜ ์„ค๋ช…๋Œ€๋กœ ํ‚ค๋ง๊ณผ ํ‚ค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Dataform ์ €์žฅ์†Œ์˜ ์œ„์น˜์™€ ์ผ์น˜ํ•˜๋Š” ์œ„์น˜์—์„œ ํ‚ค๋ง์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • ์ €์žฅ์†Œ๋Š” ์ผ์น˜ํ•˜๋Š” ๋ฆฌ์ „ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด asia-northeast3 ๋ฆฌ์ „์˜ ์ €์žฅ์†Œ๋Š” asia-northeast3์— ์žˆ๋Š” ํ‚ค๋ง์˜ ํ‚ค๋กœ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • global ๋ฆฌ์ „์€ Dataform๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
      Dataform ๋ฐ Cloud KMS๊ฐ€ ์ง€์›ํ•˜๋Š” ์œ„์น˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

CMEK ์‚ฌ์šฉ ์„ค์ •

์‚ฌ์šฉ์ž๊ฐ€ Cloud KMS CryptoKey ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”(roles/cloudkms.cryptoKeyEncrypterDecrypter) ์—ญํ• ์„ ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌํ•œ ํ›„ Dataform์ด ์‚ฌ์šฉ์ž ๋Œ€์‹  ํ‚ค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ • ID์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— CryptoKey ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ํ‚ค ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

    ํ‚ค ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

  2. ํ‚ค๊ฐ€ ํฌํ•จ๋œ ํ‚ค๋ง์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์—ญํ• ์„ ์ถ”๊ฐ€ํ•  ์•”ํ˜ธํ™” ํ‚ค์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ ํƒญ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.

  4. ๊ตฌ์„ฑ์› ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค ๊ณ„์ •์ด ๊ตฌ์„ฑ์› ๋ชฉ๋ก์— ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ์—ญํ• ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์˜ ํ˜„์žฌ ์—ญํ•  ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ์—ญํ•  ์„ ํƒ ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ Cloud KMS๋ฅผ ํด๋ฆญํ•œ ํ›„ Cloud KMS CryptoKey ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ์—ญํ• ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์ €์žฅ์„ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ• ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud

Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญํ• ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_ACCOUNT \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • KMS_PROJECT_ID: Cloud KMS๋ฅผ ์‹คํ–‰ํ•˜๋Š” Google Cloudํ”„๋กœ์ ํŠธ์˜ ID
  • SERVICE_ACCOUNT: ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ
  • KMS_KEY_LOCATION: Cloud KMS ํ‚ค์˜ ์œ„์น˜ ์ด๋ฆ„
  • KMS_KEY_RING: Cloud KMS ํ‚ค์˜ ํ‚ค๋ง ์ด๋ฆ„
  • KMS_KEY: Cloud KMS ํ‚ค์˜ ํ‚ค ์ด๋ฆ„

CMEK ์กฐ์ง ์ •์ฑ… ์ ์šฉ

Dataform์€ ์กฐ์ง ์ „๋ฐ˜์˜ CMEK ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ์กฐ์ง ์ •์ฑ… ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

  • constraints/gcp.restrictNonCmekServices๋Š” CMEK ๋ณดํ˜ธ๋ฅผ ์š”๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • constraints/gcp.restrictCmekCryptoKeyProjects๋Š” CMEK ๋ณดํ˜ธ์— ์‚ฌ์šฉ๋˜๋Š” Cloud KMS ํ‚ค๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ์ง์˜ Dataform ์ €์žฅ์†Œ์— ๋Œ€ํ•ด ๋‹ค์Œ ์•”ํ˜ธํ™” ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ์ง ์ •์ฑ… ์ ์šฉ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

CMEK ์กฐ์ง ์ •์ฑ…์„ ์ ์šฉํ•˜๊ธฐ ์ „์— ์•Œ์•„๋‘์–ด์•ผ ํ•  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ „ํŒŒ ์ง€์—ฐ ๋Œ€๋น„

์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ƒˆ ์ •์ฑ…์ด ์ ์šฉ๋˜๋Š” ๋ฐ ์ตœ๋Œ€ 15๋ถ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋ฆฌ์†Œ์Šค ๊ณ ๋ ค

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

์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ ํ™•์ธ

ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ๋Š” ์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํš๋“ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง ์ •์ฑ… ๊ด€๋ฆฌ์ž ์—ญํ• ์„ ๋ถ€์—ฌ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, ์ด ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ ๋˜๋Š” ํด๋” ์ˆ˜์ค€์ด ์•„๋‹Œ ์กฐ์ง ์ˆ˜์ค€์—์„œ๋งŒ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ์ง ์ˆ˜์ค€์—์„œ ์—ญํ• ์„ ๋ถ€์—ฌ๋ฐ›์•„์•ผ ํ•˜์ง€๋งŒ ํŠน์ • ํ”„๋กœ์ ํŠธ๋‚˜ ํด๋”์—๋งŒ ์ ์šฉ๋˜๋Š” ์ •์ฑ…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ƒˆ Dataform ์ €์žฅ์†Œ์— CMEK ํ•„์š”

constraints/gcp.restrictNonCmekServices ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ง์˜ ๋ชจ๋“  ์ƒˆ Dataform ์ €์žฅ์†Œ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ CMEK๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•˜๋ฉด ์ง€์ •๋œ Cloud KMS ํ‚ค๊ฐ€ ์—†๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ ์š”์ฒญ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์„ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ ์ €์žฅ์†Œ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Cloud KMS ํ‚ค๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ธฐ์กด ์ €์žฅ์†Œ๋„ ๊ณ„์† ์กด์žฌํ•˜๋ฉฐ ๋ฌธ์ œ ์—†์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์กฐ์ง ์ •์ฑ… ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์กฐ์ง ์ •์ฑ…์œผ๋กœ ์ด๋™

  2. ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    constraints/gcp.restrictNonCmekServices
    
  3. ์ด๋ฆ„ ์—ด์—์„œ CMEK ์—†์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ์ œํ•œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์ •์ฑ… ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์ •์ฑ… ์ˆ˜์ • ํŽ˜์ด์ง€์˜ ์ •์ฑ… ์†Œ์Šค์—์„œ ์ƒ์œ„ ์ •์ฑ… ์žฌ์ •์˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ๊ทœ์น™์—์„œ ๊ทœ์น™ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์ •์ฑ… ๊ฐ’ ๋ชฉ๋ก์—์„œ ์ปค์Šคํ…€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  8. ์ •์ฑ… ์œ ํ˜• ๋ชฉ๋ก์—์„œ ๊ฑฐ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  9. ์ปค์Šคํ…€ ๊ฐ’ ํ•„๋“œ์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    is:dataform.googleapis.com
    
  10. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์ •์ฑ… ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. ์ •์ฑ…์„ ์ €์žฅํ•  /tmp/policy.yaml ์ž„์‹œ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:dataform.googleapis.com

    PROJECT_ID๋ฅผ ์ด ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. org-policies set-policy ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud org-policies set-policy /tmp/policy.yaml

์ •์ฑ…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์— Dataform ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. Cloud KMS ํ‚ค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

Dataform ํ”„๋กœ์ ํŠธ์˜ Cloud KMS ํ‚ค ์ œํ•œ

constraints/gcp.restrictCmekCryptoKeyProjects ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ Dataform ํ”„๋กœ์ ํŠธ์˜ ์ €์žฅ์†Œ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Cloud KMS ํ‚ค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 'projects/my-company-data-project์˜ ๋ชจ๋“  Dataform ์ €์žฅ์†Œ์— ๋Œ€ํ•ด ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Cloud KMS ํ‚ค๋Š” projects/my-company-central-keys ๋˜๋Š” projects/team-specific-keys์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค'์™€ ๊ฐ™์€ ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์กฐ์ง ์ •์ฑ… ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์กฐ์ง ์ •์ฑ…์œผ๋กœ ์ด๋™

  2. ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. ์ด๋ฆ„ ์—ด์—์„œ CMEK์šฉ KMS CryptoKey๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ œํ•œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์ •์ฑ… ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์ •์ฑ… ์ˆ˜์ • ํŽ˜์ด์ง€์˜ ์ •์ฑ… ์†Œ์Šค์—์„œ ์ƒ์œ„ ์ •์ฑ… ์žฌ์ •์˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ๊ทœ์น™์—์„œ ๊ทœ์น™ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์ •์ฑ… ๊ฐ’ ๋ชฉ๋ก์—์„œ ์ปค์Šคํ…€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  8. ์ •์ฑ… ์œ ํ˜• ๋ชฉ๋ก์—์„œ ํ—ˆ์šฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  9. ์ปค์Šคํ…€ ๊ฐ’ ํ•„๋“œ์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    under:projects/KMS_PROJECT_ID
    

    KMS_PROJECT_ID๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” Cloud KMS ํ‚ค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด under:projects/my-kms-project์ž…๋‹ˆ๋‹ค.

  10. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์ •์ฑ… ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. ์ •์ฑ…์„ ์ €์žฅํ•  /tmp/policy.yaml ์ž„์‹œ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ์ด ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ID
    • KMS_PROJECT_ID: ์‚ฌ์šฉํ•˜๋ ค๋Š” Cloud KMS ํ‚ค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ID
  2. org-policies set-policy ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud org-policies set-policy /tmp/policy.yaml

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

๊ธฐ๋ณธ Dataform CMEK ํ‚ค ์„ค์ •

Google Cloud ํ”„๋กœ์ ํŠธ์— ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋™์ผํ•œ CMEK ํ‚ค๋กœ ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ๋ฅผ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Dataform ์ €์žฅ์†Œ์— ๊ธฐ๋ณธ ํ‚ค ์‚ฌ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ธฐ๋ณธ CMEK ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”์ฒญ์—์„œ Dataform API๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • KMS_KEY_RING: Cloud KMS ํ‚ค์˜ ํ‚ค๋ง ์ด๋ฆ„
  • KMS_KEY: Cloud KMS ํ‚ค์˜ ์ด๋ฆ„
  • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค.
  • PROJECT_LOCATION: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ์œ„์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform CMEK ํ‚ค ์‚ญ์ œ

Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”์ฒญ์—์„œ Dataform API๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค.
  • PROJECT_LOCATION: ๊ธฐ๋ณธ CMEK๋ฅผ ์„ค์ • ํ•ด์ œํ•˜๋ ค๋Š” Google Cloud ํ”„๋กœ์ ํŠธ์˜ ์œ„์น˜ ์ด๋ฆ„

๊ธฐ๋ณธ Dataform CMEK ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

Google Cloud ํ”„๋กœ์ ํŠธ์— ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”์ฒญ์—์„œ Dataform API๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค.
  • PROJECT_LOCATION: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ์œ„์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ €์žฅ์†Œ์— CMEK ์ ์šฉ

์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์•ˆ Dataform ์ €์žฅ์†Œ์— CMEK ๋ณดํ˜ธ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform ์ €์žฅ์†Œ์— CMEK ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ Dataform CMEK ํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๊ณ ์œ ํ•œ Cloud KMS ํ‚ค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” Dataform ์ €์žฅ์†Œ์˜ ์•”ํ˜ธํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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