Dataform์˜ VPC ์„œ๋น„์Šค ์ œ์–ด ๊ตฌ์„ฑ

VPC ์„œ๋น„์Šค ์ œ์–ด๋Š” ๋ฐ์ดํ„ฐ ๋ฌด๋‹จ ๋ฐ˜์ถœ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Google Cloud ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Dataform๊ณผ ํ•จ๊ป˜ VPC ์„œ๋น„์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

VPC ์„œ๋น„์Šค ์ œ์–ด๋Š” Identity and Access Management(IAM)์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ณดํ˜ธ์™€ ๋ณ„๊ฐœ๋กœ Google Cloud ์„œ๋น„์Šค ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

VPC ์„œ๋น„์Šค ์ œ์–ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ VPC ์„œ๋น„์Šค ์ œ์–ด ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

Dataform์€ VPC ์„œ๋น„์Šค ์ œ์–ด๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • dataform.restrictGitRemotes ์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Dataform ๋ฐ BigQuery๋Š” ๊ฐ™์€ VPC ์„œ๋น„์Šค ์ œ์–ด ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋กœ ์ œํ•œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

Dataform์— VPC ์„œ๋น„์Šค ์ œ์–ด ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•  ๋•Œ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌํ•œ ๊ถŒํ•œ์— ๋”ฐ๋ผ ํ•ด๋‹น ์„œ๋น„์Šค ๊ณ„์ •์€ VPC ์„œ๋น„์Šค ์ œ์–ด์— ๊ด€๊ณ„์—†์ด ์„œ๋น„์Šค ๊ณ„์ •์ด ์†ํ•œ ํ”„๋กœ์ ํŠธ์˜ BigQuery ๋˜๋Š” Secret Manager ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ VPC ์„œ๋น„์Šค ์ œ์–ด ๊ฒฝ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dataform์„ ์ œํ•œํ•ด๋„ BigQuery ๋˜๋Š” Secret Manager์™€์˜ ํ†ต์‹ ์€ ์ฐจ๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Dataform ์ €์žฅ์†Œ์—์„œ ์‹œ์ž‘๋œ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด BigQuery์™€์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. BigQuery์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋“œ ํŒŒํ‹ฐ Git ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ๋œ Dataform ์ €์žฅ์†Œ๊ฐ€ ์—†์œผ๋ฉด Secret Manager์™€์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Secret Manager์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Secret Manager์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

Dataform์˜ VPC ์„œ๋น„์Šค ์ œ์–ด ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— ์›๊ฒฉ ์ €์žฅ์†Œ ์ œํ•œ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ dataform.restrictGitRemotes ์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Dataform์„ ์‚ฌ์šฉํ•  ๋•Œ VPC ์„œ๋น„์Šค ์ œ์–ด ๊ฒ€์‚ฌ๊ฐ€ ์‹œํ–‰๋˜๊ณ  Dataform Git ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์„œ๋“œ ํŒŒํ‹ฐ ์•ก์„ธ์Šค๊ฐ€ ์ œํ•œ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด dataform.restrictGitRemotes ์กฐ์ง ์ •์ฑ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์—ญํ• 

VPC ์„œ๋น„์Šค ์ œ์–ด ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ Access Context Manager ํŽธ์ง‘์ž(roles/accesscontextmanager.policyEditor) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปค์Šคํ…€ ์—ญํ• ์ด๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

VPC ์„œ๋น„์Šค ์ œ์–ด ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ IAM์œผ๋กœ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

VPC ์„œ๋น„์Šค ์ œ์–ด๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ VPC ์„œ๋น„์Šค ์ œ์–ด ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dataform์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Dataform์„ BigQuery๋ฅผ ์ œํ•œํ•˜๋Š” ๊ธฐ์กด ์„œ๋น„์Šค ๊ฒฝ๊ณ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • Dataform ๋ฐ BigQuery๋ฅผ ๋ชจ๋‘ ์ œํ•œํ•˜๋Š” ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

BigQuery๋ฅผ ์ œํ•œํ•˜๋Š” ์„œ๋น„์Šค ๊ฒฝ๊ณ„์— Dataform์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด VPC ์„œ๋น„์Šค ์ œ์–ด ๋ฌธ์„œ์˜ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ์—…๋ฐ์ดํŠธ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Dataform ๋ฐ BigQuery๋ฅผ ๋ชจ๋‘ ์ œํ•œํ•˜๋Š” ์ƒˆ ์„œ๋น„์Šค ๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด VPC ์„œ๋น„์Šค ์ œ์–ด ๋ฌธ์„œ์˜ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๋งŒ๋“ค๊ธฐ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์„ ํƒ์‚ฌํ•ญ: BigQuery์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ

Dataform์ด BigQuery์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Dataform์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ • ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์€ bigquery.jobs.create ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ BigQuery์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. Dataform์ด BigQuery์—์„œ SQL ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• ์„ ๋ถ€์—ฌํ•  ๋•Œ ์ด ๊ถŒํ•œ์ด ํฌํ•จ๋œ ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ • ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •๊ณผ BigQuery ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋œ bigquery.jobs.create ๊ถŒํ•œ์ด ํฌํ•จ๋œ ๋ชจ๋“  ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ๊ณผ ์ปค์Šคํ…€ ์—ญํ• ์„ ์ทจ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ญํ• ์„ ์ทจ์†Œํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ปค์Šคํ…€ Dataform ์„œ๋น„์Šค ๊ณ„์ •์€ ๋‹ค์Œ ๊ถŒํ•œ๊ณผ ์—ญํ• ์„ ์‚ฌ์šฉํ•˜์—ฌ BigQuery์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ปค์Šคํ…€ ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋˜๋Š” bigquery.jobs.create ๊ถŒํ•œ
  • ์ปค์Šคํ…€ ์„œ๋น„์Šค ๊ณ„์ •์˜ ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž(roles/iam.serviceAccountTokenCreator) ์—ญํ• 

๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์ปค์Šคํ…€ Dataform ์„œ๋น„์Šค ๊ณ„์ •๊ณผ BigQuery ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ ํƒํ•œ ์ปค์Šคํ…€ Dataform ์„œ๋น„์Šค ๊ณ„์ •์˜ ๊ธฐ๋ณธ ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋œ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž(roles/iam.serviceAccountTokenCreator) ์—ญํ• ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž(roles/iam.serviceAccountTokenCreator) ์—ญํ• ์„ ์ทจ์†Œํ•˜๋ ค๋ฉด ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  • ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์—์„œ bigquery.jobs.create ๊ถŒํ•œ์ด ํฌํ•จ๋œ ์ปค์Šคํ…€ ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋œ ๋ชจ๋“  ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ๊ณผ ์ปค์Šคํ…€ ์—ญํ• ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์—ญํ• ์„ ์ทจ์†Œํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

bigquery.jobs.create ๊ถŒํ•œ์€ ์ทจ์†Œ๋˜์–ด์•ผ ํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์ •์˜๋œ BigQuery IAM ์—ญํ• ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒ์‚ฌํ•ญ: Secret Manager์™€์˜ ํ†ต์‹  ์ฐจ๋‹จ

Dataform์€ secretmanager.versions.access ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ Secret Manager ๋ณด์•ˆ ๋น„๋ฐ€์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. Dataform ์ €์žฅ์†Œ๋ฅผ ์„œ๋“œ ํŒŒํ‹ฐ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•  ๋•Œ ์„ ํƒํ•œ Secret Manager ๋ณด์•ˆ ๋น„๋ฐ€์˜ ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ์ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

Dataform ๋ฐ Secret Manager ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์—์„œ ๋ชจ๋“  ๋ณด์•ˆ ๋น„๋ฐ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ทจ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์—์„œ Secret Manager ๋ณด์•ˆ ๋น„๋ฐ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ทจ์†Œํ•˜๋ ค๋ฉด Secret Manager ๋ฌธ์„œ์˜ ๋ณด์•ˆ ๋น„๋ฐ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. ์„ ํƒํ•œ ๋ณด์•ˆ ๋น„๋ฐ€์˜ ๊ธฐ๋ณธ Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ๋ถ€์—ฌ๋œ secretmanager.versions.access ๊ถŒํ•œ์ด ํฌํ•จ๋œ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ๊ณผ ์ปค์Šคํ…€ ์—ญํ• ์„ ๋ชจ๋‘ ์ทจ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

secretmanager.versions.access ๊ถŒํ•œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์ •์˜๋œ Secret Manager IAM ์—ญํ• ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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