Google ๊ณ„์ •์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” App Engine ํ‘œ์ค€ ๋˜๋Š” ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  IAP(Identity-Aware Proxy)๋กœ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น ๋ฅธ ์‹œ์ž‘์—๋Š” ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ํ™•์ธํ•˜๋Š” App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ ์›น ์•ฑ์šฉ์˜ ์ƒ˜ํ”Œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋น ๋ฅธ ์‹œ์ž‘์€ Cloud Shell์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณต์ œํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น ๋ฅธ ์‹œ์ž‘์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ ๋˜๋Š” App Engine ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ ์•ฑ์— IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CDN(์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ)์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ๊ถŒ์žฅ์‚ฌํ•ญ ๊ฐ€์ด๋“œ์—์„œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

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


Google Cloud ์ฝ˜์†”์—์„œ ์ด ํƒœ์Šคํฌ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด๋ฅผ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‘˜๋Ÿฌ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‘˜๋Ÿฌ๋ณด๊ธฐ


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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

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

App Engine์— IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒญ๊ตฌ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ Google Cloud ์ฝ˜์†” ํ”„๋กœ์ ํŠธ

App Engine ์ธ์Šคํ„ด์Šค๋ฅผ ์•„์ง ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์ฒด์ ์œผ๋กœ ๋‘˜๋Ÿฌ๋ณด๋ ค๋ฉด App Engine ๋ฐฐํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

IAP๋Š” Google ๊ด€๋ฆฌ OAuth ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ง ๋‚ด ์‚ฌ์šฉ์ž๋งŒ IAP๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— IAP ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ฝ˜์†”

Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Google ๊ด€๋ฆฌ OAuth ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐ŸŒ ๋น ๋ฅธ ์‹œ์ž‘: Google ๊ณ„์ •์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ  |  Identity-Aware Proxy  |  Google Cloud๋™์  ํฌํ•จ ํŒŒ์ผ - cloud.google.com

ํ”„๋กœ์ ํŠธ์˜ OAuth ๋™์˜ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์•˜์œผ๋ฉด, ๊ตฌ์„ฑํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. OAuth ๋™์˜ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด OAuth ๋™์˜ ํ™”๋ฉด ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

IAP ์•ก์„ธ์Šค ์„ค์ •

  1. Identity-Aware Proxy ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    IAP(Identity-Aware Proxy) ํŽ˜์ด์ง€๋กœ ์ด๋™
  2. IAP๋กœ ๋ณดํ˜ธํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋ฆฌ์†Œ์Šค ์˜†์— ์žˆ๋Š” ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ์˜ค๋ฅธ์ชฝ ํŒจ๋„์—์„œ ์ฃผ ๊ตฌ์„ฑ์› ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ํ‘œ์‹œ๋œ ์ฃผ ๊ตฌ์„ฑ์› ์ถ”๊ฐ€ ๋Œ€ํ™”์ƒ์ž์—์„œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ทธ๋ฃน ๋˜๋Š” ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์ฃผ ๊ตฌ์„ฑ์›์ด ์ด ์—ญํ• ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • Google ๊ณ„์ •: user@gmail.com
    • Google Groups: admins@googlegroups.com
    • ์„œ๋น„์Šค ๊ณ„์ •: server@example.gserviceaccount.com
    • Google Workspace ๋„๋ฉ”์ธ: example.com

    ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” Google ๊ณ„์ •์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  6. ์—ญํ•  ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ Cloud IAP > IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

IAP ์‚ฌ์šฉ ์„ค์ • ์ค‘

  1. IAP(Identity-Aware Proxy) ํŽ˜์ด์ง€์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์— IAP๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด
  2. ํ‘œ์‹œ๋˜๋Š” IAP ์‚ฌ์šฉ ์ฐฝ์—์„œ ์‚ฌ์šฉ์„ ํด๋ฆญํ•˜์—ฌ IAP๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•  ๊ฒƒ์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. IAP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์— ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž ์—ญํ• ์ด ์žˆ๋Š” ๊ณ„์ •๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

ํ”„๋กœ์ ํŠธ์™€ IAP๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ์ตœ์‹  ๋ฒ„์ „์˜ gcloud CLI๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. gcloud CLI ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud CLI ์„ค์น˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  1. ์ธ์ฆํ•˜๋ ค๋ฉด Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud auth login
  2. ํ‘œ์‹œ๋˜๋Š” URL์„ ํด๋ฆญํ•˜๊ณ  ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋กœ๊ทธ์ธํ•œ ํ›„์—๋Š” ํ‘œ์‹œ๋œ ํ™•์ธ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ด๋ฅผ ๋ช…๋ น์ค„์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.
  4. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ IAP๋กœ ๋ณดํ˜ธํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    gcloud config set project PROJECT_ID
  5. IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
    gcloud iap web enable --resource-type=app-engine --versions=version
  6. IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ์ฃผ ๊ตฌ์„ฑ์›์„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    gcloud projects add-iam-policy-binding PROJECT_ID \
           --member=PRINCIPAL_IDENTIFIER \
           --role=roles/iap.httpsResourceAccessor
    • PROJECT_ID๋ฅผ ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • PRINCIPAL_IDENTIFIER๋ฅผ ํ•„์š”ํ•œ ์ฃผ ๊ตฌ์„ฑ์›์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ, ๊ทธ๋ฃน, serviceAccount ๋˜๋Š” ์‚ฌ์šฉ์ž ์œ ํ˜•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด user:myemail@example.com์ž…๋‹ˆ๋‹ค.

IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ํ›„ gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IAM ์—ญํ•  roles/iap.httpsResourceAccessor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IAP ์•ก์„ธ์Šค ์ •์ฑ…์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ•  ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

API

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ settings.json ํŒŒ์ผ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true
      }
    }
    EOF
    

  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap"
    

IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ํ›„ Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IAM ์—ญํ•  roles/iap.httpsResourceAccessor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IAP ์•ก์„ธ์Šค ์ •์ฑ…์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ•  ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

์‚ฌ์šฉ์ž ์ธ์ฆ ํ…Œ์ŠคํŠธ

  1. ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž ์—ญํ• ๋กœ IAP์— ์ถ”๊ฐ€ํ•œ Google ๊ณ„์ •์—์„œ ์•ฑ URL์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์— ๋ฌด์ œํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. Chrome์—์„œ ์‹œํฌ๋ฆฟ ์ฐฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. IAP ๋ณด์•ˆ ์›น ์•ฑ ์‚ฌ์šฉ์ž ์—ญํ• ๋กœ ์Šน์ธ๋˜์ง€ ์•Š์€ ๊ณ„์ •์œผ๋กœ ์•ฑ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด '์ง€๊ธˆ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค'๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

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