๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ

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

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Compute Engine ์ธ์Šคํ„ด์Šค์—๋Š” ์ด ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ

๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ์ ์ ˆํ•œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ

๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์„œ๋น„์Šค ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

  1. ์„œ๋น„์Šค ๊ณ„์ •์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ด ํŽ˜์ด์ง€์˜ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ ๊ฐ„ ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•  ๋ฆฌ์†Œ์Šค ์œ ํ˜•๊ณผ ํ•ด๋‹น ์œ ํ˜•์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•œ ์„œ๋น„์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด Pub/Sub ๊ตฌ๋…์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ Pub/Sub๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

  4. ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

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

  5. ์„œ๋น„์Šค ์—์ด์ „ํŠธ์— ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž ์—ญํ• (roles/iam.serviceAccountTokenCreator)์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

    ์ฝ˜์†”

    1. Google Cloud ์ฝ˜์†”์—์„œ ์„œ๋น„์Šค ๊ณ„์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

      ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ด๋™

    2. ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์„œ๋น„์Šค ๊ณ„์ •์„ ์†Œ์œ ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    3. ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    4. ๊ถŒํ•œ ํƒญ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ด ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ์ฃผ ๊ตฌ์„ฑ์› ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

    5. ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ํด๋ฆญํ•œ ํ›„ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    6. ์—ญํ•  ์„ ํƒ์„ ํด๋ฆญํ•˜๊ณ  Service Account Token Creator๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ์—ญํ• ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    7. ์ €์žฅ์„ ํด๋ฆญํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    8. ์„ ํƒ์‚ฌํ•ญ: ๋‹ค๋ฅธ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์— ์—ญํ• ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

    gcloud

    gcloud iam service-accounts add-iam-policy-binding ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:SERVICE_AGENT_EMAIL \
        --role=roles/iam.serviceAccountTokenCreator

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

    • SERVICE_ACCOUNT_NAME: ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„.
    • PROJECT_ID: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ID.
    • SERVICE_AGENT_EMAIL: ์„œ๋น„์Šค ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ.

    ์ด ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์—…๋ฐ์ดํŠธ๋œ ํ—ˆ์šฉ ์ •์ฑ…์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์„ ํƒ์‚ฌํ•ญ: ๋‹ค๋ฅธ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์— ์—ญํ• ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    REST

    ์ด ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด ์ฝ๊ธฐ-์ˆ˜์ •-์“ฐ๊ธฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ํ—ˆ์šฉ ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ํ—ˆ์šฉ ์ •์ฑ…์„ ์ฝ์Šต๋‹ˆ๋‹ค.

    projects.serviceAccounts.getIamPolicy ๋ฉ”์„œ๋“œ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ํ—ˆ์šฉ ์ •์ฑ…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ ID. ํ”„๋กœ์ ํŠธ ID๋Š” my-project์™€ ๊ฐ™์€ ์˜์ˆซ์ž ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • USER_SA_NAME: ๋ฆฌ์†Œ์Šค์— ๋ฐ”์ธ๋”ฉํ•  ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„.

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "requestedPolicyVersion": 3
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    ๋‹ค์Œ์œผ๋กœ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์„œ๋น„์Šค ์ƒ์„ฑ์ž ์—ญํ• ์„ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์— ๋ถ€์—ฌํ•˜๋„๋ก ํ—ˆ์šฉ ์ •์ฑ…์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }

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

    • SERVICE_AGENT_EMAIL: ์„œ๋น„์Šค ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ.
    • SERVICE_ACCOUNT_NAME: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„.
    • PROJECT_ID: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ID.

    ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ํ—ˆ์šฉ ์ •์ฑ…์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

    projects.serviceAccounts.setIamPolicy ๋ฉ”์„œ๋“œ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ํ—ˆ์šฉ ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ ID. ํ”„๋กœ์ ํŠธ ID๋Š” my-project์™€ ๊ฐ™์€ ์˜์ˆซ์ž ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • USER_SERVICE_ACCOUNT_NAME: ๋ฆฌ์†Œ์Šค์— ๋ฐ”์ธ๋”ฉํ•  ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„.
    • SERVICE_AGENT_EMAIL: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์˜ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋งŒ๋“ค ์„œ๋น„์Šค ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ.

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "policy": {
        "version": 1,
        "etag": "BwWl3KCTUMY=",
        "bindings": [
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:SERVICE_AGENT_EMAIL"
            ]
          },
          {
            "role": "roles/iam.serviceAccountUser",
            "members": [
              "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
            ]
          }
        ]
      }
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
      "version": 1,
      "etag": "BwWo331TkHE=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

์ƒˆ ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ

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

๋งŒ๋“ค๋ ค๋Š” ๋ฆฌ์†Œ์Šค ์œ ํ˜•์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ
AI Platform Prediction ๋ชจ๋ธ ๋ฒ„์ „
AI Platform Training ์ž‘์—…
App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ ์•ฑ ๋ฒ„์ „
App Engine ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ ์•ฑ ๋ฒ„์ „
Cloud Composer ํ™˜๊ฒฝ
Cloud Run Functions Cloud Run ํ•จ์ˆ˜
Cloud Life Sciences ํŒŒ์ดํ”„๋ผ์ธ
Cloud Run ์„œ๋น„์Šค
Cloud Scheduler ์ž‘์—…
Cloud Source Repositories
Compute Engine
Dataproc ํด๋Ÿฌ์Šคํ„ฐ
Google Kubernetes Engine
Notebooks ๋ฉ”๋ชจ์žฅ ์ธ์Šคํ„ด์Šค
Pub/Sub ๊ตฌ๋…

๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•œ ํ›„ ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ์ฃผ ๊ตฌ์„ฑ์›์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์—ญํ•  ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ ค๋ฉด ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ, ๋ณ€๊ฒฝ, ์ทจ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์„œ๋น„์Šค ๊ณ„์ •์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์กฐ์ง ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฐ„ ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ ์‚ฌ์šฉ ์„ค์ •

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

  • ํ”„๋กœ์ ํŠธ์— iam.disableCrossProjectServiceAccountUsage ๋ถ€์šธ ์ œ์•ฝ์กฐ๊ฑด์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

    ์ด ์ œ์•ฝ์กฐ๊ฑด์ด ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด IAM์€ ํ”„๋กœ์ ํŠธ ์‚ญ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์„ ์ทจ๊ถŒ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ ์ทจ๊ถŒ์—๋Š” ์›๋ณธ iam.googleapis.com/cross-project-service-accounts๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ ์ทจ๊ถŒ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ๊ถŒ์žฅ์‚ฌํ•ญ: ํ”„๋กœ์ ํŠธ์— iam.restrictCrossProjectServiceAccountLienRemoval ๋ถ€์šธ ์ œ์•ฝ์กฐ๊ฑด์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋ถ€์šธ ์ œ์•ฝ์กฐ๊ฑด์€ ์ฃผ ๊ตฌ์„ฑ์›์ด ์กฐ์ง ์ˆ˜์ค€์˜ resourcemanager.projects.updateLiens ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ”„๋กœ์ ํŠธ ์„ ์ทจ๊ถŒ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ œ์•ฝ์กฐ๊ฑด์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ฃผ ๊ตฌ์„ฑ์›์ด ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์—์„œ ์ด ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ํ”„๋กœ์ ํŠธ ์„ ์ทจ๊ถŒ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ”„๋กœ์ ํŠธ ๊ฐ„ ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ ์‚ฌ์šฉ ์ค‘์ง€

์ด์ „์— ํ”„๋กœ์ ํŠธ ๊ฐ„ ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉ ์„ค์ •ํ•œ ๊ฒฝ์šฐ, ํŠนํžˆ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์„œ๋น„์Šค ๊ณ„์ •์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค์Œ์„ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

  • iam.disableCrossProjectServiceAccountUsage ๋ถˆ๋ฆฌ์–ธ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ์กฐ์ง ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ๋งˆ์„ธ์š”.
  • iam.restrictCrossProjectServiceAccountLienRemoval ๋ถˆ๋ฆฌ์–ธ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ์กฐ์ง ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ์›๋ณธ iam.googleapis.com/cross-project-service-accounts๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์„ ์ทจ๊ถŒ์„ ์‚ญ์ œํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜์ง€ ๋งˆ์„ธ์š”.

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

์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ๋กœ๊ทธ

์ฃผ ๊ตฌ์„ฑ์›์ด iam.serviceAccounts.actAs ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•˜๋ฉด IAM์—์„œ ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์‚ฌ ๋กœ๊ทธ์—๋Š” ๋‹ค์Œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•œ ์ฃผ ๊ตฌ์„ฑ์›์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ
  • ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด

์„œ๋น„์Šค ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์€ ์ด ํŽ˜์ด์ง€์˜ ์ƒˆ ๋ฆฌ์†Œ์Šค์— ์„œ๋น„์Šค ๊ณ„์ • ์—ฐ๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ์œ ํ˜•์˜ ๊ฐ์‚ฌ ๋กœ๊ทธ ์˜ˆ์‹œ๋Š” iam.serviceAccounts.actAs ๊ถŒํ•œ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฐ์‚ฌ ๋กœ๊ทธ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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