์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ ์‚ฌ์šฉ

์‚ฌ์šฉ ์ค‘์ธ ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ ํƒœ์Šคํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ธ์ฆ๋œ ์ฃผ ๊ตฌ์„ฑ์›(์‚ฌ์šฉ์ž ๊ณ„์ • ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •)์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ•„์š”ํ•œ ์Šน์ธ์ด ์žˆ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•ด ๋‹จ๊ธฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ๋œ ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ์—ญํ• ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ Service Account Credentials API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Enable the API

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

์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž(roles/iam.serviceAccountTokenCreator) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์—๋Š” ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ iam.serviceAccounts.getAccessToken ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ž์‹ ์ด ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๊ณ„์ •์— ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud CLI ์‚ฌ์šฉ

gcloud CLI์—์„œ๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ Google Cloud ๋ฆฌ์†Œ์Šค ๋˜๋Š” ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • gcloud CLI ๋ช…๋ น์–ด์˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ๋ช…๋ น์–ด์— ์ž๋™์œผ๋กœ ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก gcloud CLI๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • gcloud CLI ๋ช…๋ น์–ด์— ๊ฐ€์žฅ ์‚ฌ์šฉ

ํŠน์ • gcloud CLI ๋ช…๋ น์–ด์— ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด --impersonate-service-account ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ID์™€ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ† ๋ฆฌ์ง€ ๋ฒ„ํ‚ท์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

gcloud storage buckets list --impersonate-service-account=SERVICE_ACCT_EMAIL

์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด gcloud CLI๊ฐ€ ์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์˜ ๋‹จ๊ธฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API์— ์ธ์ฆํ•˜๊ณ  ์•ก์„ธ์Šค๋ฅผ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. gcloud CLI์— ๋กœ๊ทธ์ธ๋œ ์ฃผ ๊ตฌ์„ฑ์›(์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ณ„์ •)์—๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ gcloud CLI๋กœ ๊ฐ€์žฅ ์‚ฌ์šฉ

๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋น„์Šค ๊ณ„์ •์—์„œ ์ œ๊ณตํ•˜๋Š” ID์™€ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก gcloud CLI๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด gcloud CLI ๊ตฌ์„ฑ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL

์ด ๊ตฌ์„ฑ ์†์„ฑ์„ ์„ค์ •ํ•˜๋ฉด gcloud CLI๊ฐ€ ์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์˜ ๋‹จ๊ธฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API์— ์ธ์ฆํ•˜๊ณ  ๋ชจ๋“  ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค๋ฅผ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. gcloud CLI์— ๋กœ๊ทธ์ธ๋œ ์ฃผ ๊ตฌ์„ฑ์›์€ ์„œ๋น„์Šค ๊ณ„์ •์— ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์„ค์ •

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(ADC) ํŒŒ์ผ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ์„ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋กœ์ปฌ ADC ํŒŒ์ผ์€ ๋‹ค์Œ ์–ธ์–ด์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • C#
  • Go
  • Java
  • Node.js
  • Python

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ADC ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL

์ด์ œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋กœ ๋กœ์ปฌ ADC ํŒŒ์ผ์„ ์„ค์ •ํ•œ ํ›„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง€์›๋˜๋Š” ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ธ์ฆ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋กœ์ปฌ ADC ํŒŒ์ผ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋Š” ์ผ๋ถ€ ์ธ์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์—์„œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜๋œ ์˜ค๋ฅ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹จ๊ธฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ

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

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

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