IAP๋กœ ๊ฐ€์ƒ ๋จธ์‹  ๋ณด์•ˆ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” IAP(Identity-Aware Proxy) TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ธํ„ฐ๋„ท์„ ํ†ตํ•œ ์ง์ ‘ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” VM ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด SSH, RDP, ๊ธฐํƒ€ ํŠธ๋ž˜ํ”ฝ์„ VM ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์•”ํ˜ธํ™”๋œ ํ„ฐ๋„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IAP TCP ์ „๋‹ฌ์€ ๋˜ํ•œ ํ„ฐ๋„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” VM ์ธ์Šคํ„ด์Šค๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

IAP TCP ์ „๋‹ฌ ์ž‘๋™ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ TCP ์ „๋‹ฌ ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

IAP TCP ์ „๋‹ฌ์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์ค€๋น„

์ด ์„น์…˜์—์„œ๋Š” Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ

IAP๊ฐ€ VM ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋งŒ๋“œ์„ธ์š”.

  • IAP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • IP ๋ฒ”์œ„ 35.235.240.0/20์—์„œ์˜ ์ธ๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„์—๋Š” IAP๊ฐ€ TCP ์ „๋‹ฌ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

    IPv6 VM์˜ ๊ฒฝ์šฐ 2600:2d00:1:7::/64 IP ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํฌํŠธ(์˜ˆ: SSH์˜ ๊ฒฝ์šฐ ํฌํŠธ 22 ๋ฐ RDP์˜ ๊ฒฝ์šฐ ํฌํŠธ 3389)์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ RDP ๋ฐ SSH ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

    ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ํŽ˜์ด์ง€ ์—ด๊ธฐ

    ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„๋Š” Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•ด ๋ณด๊ธฐ
  3. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ํŽ˜์ด์ง€์—์„œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค์Œ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฆ„: allow-ingress-from-iap
    • ํŠธ๋ž˜ํ”ฝ ๋ฐฉํ–ฅ: ์ธ๊ทธ๋ ˆ์Šค
    • ๋Œ€์ƒ: ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค
    • ์†Œ์Šค ํ•„ํ„ฐ: IP ๋ฒ”์œ„
    • ์†Œ์Šค IP ๋ฒ”์œ„: 35.235.240.0/20
    • ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ: TCP๋ฅผ ์„ ํƒํ•˜๊ณ  22,3389๋ฅผ ์ž…๋ ฅํ•˜์—ฌ RDP ๋ฐ SSH๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉํ•˜์„ธ์š”.
  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ RDP ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

gcloud compute firewall-rules create allow-rdp-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:3389 \
  --source-ranges=35.235.240.0/20

SSH ์•ก์„ธ์Šค์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

gcloud compute firewall-rules create allow-ssh-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

gcloud compute firewall-rules create allow-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:PORT \
  --source-ranges=35.235.240.0/20

์—ฌ๊ธฐ์„œ PORT๋Š” ํ”„๋กœํ† ์ฝœ์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ์ž…๋‹ˆ๋‹ค.

IAP TCP ์ „๋‹ฌ์„ ์œ„ํ•œ ์—ญํ•  ๋ถ€์—ฌ

IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน๊ณผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” VM ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์–ดํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ Identity and Access Management(IAM) ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์„ธ์š”.

OS ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(๊ถŒ์žฅ) ์‚ฌ์šฉ์ž ๊ณ„์ •์— OS ๋กœ๊ทธ์ธ ์—ญํ•  ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” TCP ์ „๋‹ฌ ๋ฐ ๊ด€๋ จ ํƒœ์Šคํฌ์— ๋Œ€ํ•ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ž‘์—… ์—ญํ•  ์ถ”๊ฐ€ ์ •๋ณด
TCP ์ „๋‹ฌ IAP ๋ณด์•ˆ ํ„ฐ๋„ ์‚ฌ์šฉ์ž(roles/iap.tunnelResourceAccessor) ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ ๋˜๋Š” ํŠน์ • VM์— ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
SSH ์•ก์„ธ์Šค ๊ถŒํ•œ Compute ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž(v1)(roles/compute.instanceAdmin.v1)
์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ์ž(roles/iam.serviceAccountUser) serviceAccountUser ์—ญํ• ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ํƒœ์Šคํฌ์— ํ•„์š”ํ•œ ํŠน์ • ๊ถŒํ•œ๋งŒ ํฌํ•จ๋œ ์ปค์Šคํ…€ ์—ญํ• ์„ ๋งŒ๋“ค๋ ค๋ฉด ๊ถŒํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์š”ํ•œ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค ๋˜๋Š” ํŠน์ • VM์— ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Œ

IAP TCP ์ „๋‹ฌ์— ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ

ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์—์„œ ํ•„์š”ํ•œ IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    IAM ๋ฐ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์—ด๊ธฐ

    ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„๋Š” Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. IAM ๋ฐ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ ์ฃผ ๊ตฌ์„ฑ์›: ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์—ญํ•  ์„ ํƒ Cloud IAP > IAP ๋ณด์•ˆ ํ„ฐ๋„ ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์กฐ๊ฑด ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ œ๋ชฉ: ์กฐ๊ฑด ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ํ‘œํ˜„์‹: IAP ๋ณด์•ˆ ํ„ฐ๋„ ์‚ฌ์šฉ์ž ์—ญํ• ์˜ ๊ถŒํ•œ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ CEL ํ‘œํ˜„์‹์€ ํฌํŠธ 22์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

    destination.port == 22

    ์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋”ฐ๋ผ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    destination.port == 22 &&
    "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels

    FULL_ACCESS_LEVEL_NAME์€ ๊ธฐ์กด ์•ก์„ธ์Šค ์ˆ˜์ค€์ด๋ฉฐ ๋‹ค์Œ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME

  4. ๋‹ค๋ฅธ ์—ญํ•  ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์—ญํ•  ์„ ํƒ์—์„œ Compute Engine > Compute ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž(v1)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์„ธ์š”.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:EMAIL \
    --role=roles/iap.tunnelResourceAccessor
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:EMAIL \
    --role=roles/compute.instanceAdmin.v1

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

  • PROJECT_ID: ํ”„๋กœ์ ํŠธ์˜ ID
  • EMAIL: ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ(์˜ˆ: user@example.com)

ํŠน์ • VM์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ

์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน์— ํŠน์ • VM์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด ํ•ด๋‹น VM์—์„œ roles/iap.tunnelResourceAccessor ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ์— ๋ถ€์—ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. IAP ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์—ด๊ณ  SSH ๋ฐ TCP ๋ฆฌ์†Œ์Šค ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    Chrome Enterprise Premium ๊ด€๋ฆฌ ํŽ˜์ด์ง€ ์—ด๊ธฐ

    ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„๋Š” Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. IAP ๊ด€๋ฆฌ ํŽ˜์ด์ง€์˜ SSH ๋ฐ TCP ๋ฆฌ์†Œ์Šค ํƒญ์—์„œ ๊ตฌ์„ฑํ•  VM ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ •๋ณด ํŒจ๋„์ด ๋ณด์ด์ง€ ์•Š์œผ๋ฉด ์ •๋ณด ํŒจ๋„ ํ‘œ์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ฃผ ๊ตฌ์„ฑ์› ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ์ƒˆ ์ฃผ ๊ตฌ์„ฑ์›: ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์—ญํ•  ์„ ํƒ Cloud IAP > IAP ๋ณด์•ˆ ํ„ฐ๋„ ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์กฐ๊ฑด ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ์ œ๋ชฉ: ์กฐ๊ฑด ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ํ‘œํ˜„์‹: IAP ๋ณด์•ˆ ํ„ฐ๋„ ์‚ฌ์šฉ์ž ์—ญํ• ์˜ ๊ถŒํ•œ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ CEL ํ‘œํ˜„์‹์€ ํฌํŠธ 22์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

          destination.port == 22

    ์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋”ฐ๋ผ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

        destination.port == 22 &&
        "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels

    FULL_ACCESS_LEVEL_NAME์€ ๊ธฐ์กด ์•ก์„ธ์Šค ์ˆ˜์ค€์ด๋ฉฐ accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  6. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

API

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ policy.json ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ์•„๋ž˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. IAM API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Chrome Enterprise Premium ๋ณด์•ˆ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  1. ๋‹ค์Œ ๋ณ€์ˆ˜๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

    export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  2. getIamPolicy ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Compute Engine ์ธ์Šคํ„ด์Šค์˜ IAM ์ •์ฑ…์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์— ๋น„์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋น„ํŠธ๋Š” curl ์š”์ฒญ์„ GET ๋Œ€์‹  POST๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \
         -d ''

  3. IAM ์ •์ฑ… JSON ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ iap.tunnelResourceAccessor ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

  4. ํ•„์š”ํ•œ ๊ฒฝ์šฐ IAM ์กฐ๊ฑด ๋ฐ ์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋”ฐ๋ผ ํŠน์ • ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š” ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ๋งŒ ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ์€ iap.tunnelResourceAccessor ์—ญํ• ์„ VM ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž ๊ทธ๋ฃน์— ๋ถ€์—ฌํ•˜์—ฌ Chrome Enterprise Premium ๋ณด์•ˆ ํ„ฐ๋„ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์ˆ˜์ •๋œ policy.json ํŒŒ์ผ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. destination.ip ๋ฐ destination.port IAM ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธ 22์—์„œ ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๊ฐ€ 10.0.0.1์ธ VM ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž ๊ทธ๋ฃน์˜ ์ฃผ ๊ตฌ์„ฑ์›๋งŒ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก IAM ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ACCESS_LEVEL_NAME ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ ์†Œ์œ ์ž ์—ญํ• ์ด ์žˆ๋Š” ๊ฒฝ์šฐ TCP ์ „๋‹ฌ์— IAP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


    ์˜ˆ์‹œ policy.json ํŒŒ์ผ

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.tunnelResourceAccessor",
            "members": ["group:instance-admins@example.com"],
            "condition": {
              "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }

    ์ •์ฑ… ์ด๋ฆ„์„ ์ฐพ์œผ๋ ค๋ฉด accessPolicies.list๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

    GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
    
  5. setIamPolicy ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ policy.json ํŒŒ์ผ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    curl -i -H "Content-Type:application/json" \
              -H "Authorization: Bearer $(gcloud auth print-access-token)" \
              ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \
              -d @${JSON_NEW_POLICY}

๊ถŒํ•œ ์„ธ๋ถ€์ •๋ณด

ํ•„์ˆ˜ ๊ถŒํ•œ์€ ์‚ฌ์šฉ์ž๊ฐ€ IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ๊ถŒํ•œ ํ•„์š”
์ „์ฒด
  • iap.tunnelInstances.accessViaIAP
gcloud compute [start-iap-tunnel, ssh, scp] ์‚ฌ์šฉ
  • compute.instances.get
  • compute.instances.list
gcloud compute [ssh, scp] ์‚ฌ์šฉ
  • compute.projects.get
OS ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” VM ์ด ์•ˆ๋‚ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
OS ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • compute.instances.setMetadata
  • compute.projects.setCommonInstanceMetadata
  • compute.globalOperations.get
์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ SSH๋ฅผ ํ†ตํ•ด VM์— ์—ฐ๊ฒฐ
  • iam.serviceAccounts.actAs
๋ธŒ๋ผ์šฐ์ €์—์„œ SSH๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์ด ์•ˆ๋‚ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ OS ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” VM์— gcloud compute ssh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • iap.tunnelInstances.accessViaIAP
  • compute.instances.get
  • compute.instances.list
  • compute.projects.get
  • compute.instances.setMetadata
  • compute.projects.setCommonInstanceMetadata
  • compute.globalOperations.get
  • iam.serviceAccounts.actAs

SSH ์—ฐ๊ฒฐ ํ„ฐ๋„๋ง

IAP๋ฅผ ํ†ตํ•ด SSH ํŠธ๋ž˜ํ”ฝ์„ ํ„ฐ๋„๋งํ•˜์—ฌ ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์—†๋Š” Linux ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IAP ํ„ฐ๋„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด IAP ํ”„๋ก์‹œ๊ฐ€ VM์˜ ๊ธฐ๋ณธ ๋‚ด๋ถ€ IPv4 ์ฃผ์†Œ์ธ nic0์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Console

์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด Google Cloud ์ฝ˜์†”์—์„œ SSH ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์•ก์„ธ์Šค ๊ตฌ์„ฑ(IAM ๊ถŒํ•œ์„ ํ†ตํ•ด ์ •์˜)์€ IAP๋ฅผ ํ†ตํ•œ TCP ํ„ฐ๋„๋ง์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud

์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด gcloud compute ssh ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์•ก์„ธ์Šค ๊ตฌ์„ฑ(IAM ๊ถŒํ•œ์„ ํ†ตํ•ด ์ •์˜)์€ IAP๋ฅผ ํ†ตํ•œ TCP ํ„ฐ๋„๋ง์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud compute ssh INSTANCE_NAME

INSTANCE_NAME์„ SSH๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์— ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์€ ์ž๋™์œผ๋กœ IAP TCP ํ„ฐ๋„๋ง์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์— ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์€ IAP TCP ํ„ฐ๋„๋ง ๋Œ€์‹  ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud compute ssh๊ฐ€ ํ•ญ์ƒ IAP TCP ํ„ฐ๋„๋ง์„ ์‚ฌ์šฉํ•˜๋„๋ก --tunnel-through-iap ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud compute ssh๊ฐ€ IAP TCP ํ„ฐ๋„๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  VM์˜ ๋‚ด๋ถ€ IP์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋„๋ก --internal-ip ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋Œ€์ƒ VM๊ณผ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

IAP ๋ฐ์Šคํฌํ†ฑ

IAP ๋ฐ์Šคํฌํ†ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด SSH ๋ฐ IAP TCP ์ „๋‹ฌ์„ ํ†ตํ•ด VM ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŒŒ์ผ > Google Cloud ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ํ”„๋กœ์ ํŠธ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” VM ์ธ์Šคํ„ด์Šค๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

IAP ๋ฐ์Šคํฌํ†ฑ

IAP ๋ฐ์Šคํฌํ†ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

PuTTY ์•ฑ

IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ VM ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋„๋ก PuTTY Windows ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์•ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์•ก์„ธ์Šค ๊ตฌ์„ฑ(IAM ๊ถŒํ•œ์„ ํ†ตํ•ด ์ •์˜)์€ IAP๋ฅผ ํ†ตํ•œ TCP ํ„ฐ๋„๋ง์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PuTTY ์•ฑ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— gcloud compute ssh ๋ช…๋ น์–ด๋ฅผ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ๋น„๊ณต๊ฐœ SSH ํ‚ค๊ฐ€ ์žˆ๊ณ  ๊ณต๊ฐœ SSH ํ‚ค๊ฐ€ Compute Engine์— ๊ฒŒ์‹œ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ VM ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute ssh INSTANCE_NAME `
      --tunnel-through-iap `
      --project PROJECT_ID `
      --zone ZONE

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

    • INSTANCE_NAME: ์—ฐ๊ฒฐํ•  ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
    • PROJECT_ID: VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID
    • ZONE: VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์˜์—ญ

    ํ•„์š”์— ๋”ฐ๋ผ Y๋ฅผ ๋ˆŒ๋Ÿฌ SSH ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  2. VM์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    whoami

    ๋‚˜์ค‘์— ์ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋„๋ก PuTTY ์•ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. PuTTY ์•ฑ์„ ์—ด๊ณ  ์นดํ…Œ๊ณ ๋ฆฌ ์—ฐ๊ฒฐ > ํ”„๋ก์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ ํ”„๋ก์‹œ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • Proxy type(ํ”„๋ก์‹œ ์œ ํ˜•)์œผ๋กœ Local(๋กœ์ปฌ)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • Telnet command, or local proxy command(Telnet ๋ช…๋ น์–ด ๋˜๋Š” ๋กœ์ปฌ ํ”„๋ก์‹œ ๋ช…๋ น์–ด) ํ•„๋“œ์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE

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

      • PROJECT_ID: VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID
      • ZONE: VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์˜์—ญ
    • Print proxy diagnostics in the terminal window(ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ํ”„๋ก์‹œ ์ง„๋‹จ ์ธ์‡„)์— Only until session starts(์„ธ์…˜์ด ์‹œ์ž‘๋  ๋•Œ๊นŒ์ง€๋งŒ)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. Connection(์—ฐ๊ฒฐ) > SSH > Auth(์ธ์ฆ) ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. Browse(์ฐพ์•„๋ณด๊ธฐ)๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋ถ™์—ฌ๋„ฃ์€ ๋‹ค์Œ Open(์—ด๊ธฐ)์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    %USERPROFILE%\.ssh\google_compute_engine.ppk
  5. Session(์„ธ์…˜) ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ๋‹ค์Œ ํ”„๋ก์‹œ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • Host name (or IP address)(ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋˜๋Š” IP ์ฃผ์†Œ) ํ•„๋“œ์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      USERNAME@INSTANCE_NAME

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

      • USERNAME: ์ด์ „์— ๊ฒฐ์ •ํ•œ Linux ์‚ฌ์šฉ์ž ์ด๋ฆ„
      • INSTANCE_NAME: ์—ฐ๊ฒฐํ•  VM ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
    • Saved sessions(์ €์žฅ๋œ ์„ธ์…˜): ์„ธ์…˜์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  7. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  8. ์—ด๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ SSH ์„ธ์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ssh

gcloud๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ProxyCommand ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ssh ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ ํ„ฐ๋„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ „์ฒด ssh ๋ช…๋ น์–ด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud compute ssh INSTANCE_NAME --dry-run

RDP ์—ฐ๊ฒฐ ํ„ฐ๋„๋ง

IAP๋ฅผ ํ†ตํ•ด RDP ํŠธ๋ž˜ํ”ฝ์„ ํ„ฐ๋„๋งํ•˜์—ฌ ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์—†๋Š” Windows ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IAP ๋ฐ์Šคํฌํ†ฑ

IAP ๋ฐ์Šคํฌํ†ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ IAP TCP ์ „๋‹ฌ์„ ํ†ตํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ VM ์ธ์Šคํ„ด์Šค์˜ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŒŒ์ผ > Google Cloud ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ํ”„๋กœ์ ํŠธ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” VM ์ธ์Šคํ„ด์Šค๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

IAP ๋ฐ์Šคํฌํ†ฑ

IAP ๋ฐ์Šคํฌํ†ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gcloud

VM ์ธ์Šคํ„ด์Šค์˜ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋จผ์ € ํ„ฐ๋„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  1. gcloud compute start-iap-tunnel ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VM ์ธ์Šคํ„ด์Šค์˜ RDP ํฌํŠธ์— ๋Œ€ํ•œ ์•”ํ˜ธํ™”๋œ ํ„ฐ๋„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \
        --local-host-port=localhost:LOCAL_PORT \
        --zone=ZONE

    INSTANCE_NAME์„ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” VM ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. LOCAL_PORT๋ฅผ ํ”„๋ก์‹œ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” localhost ํฌํŠธ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ 0์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํฌํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ZONE์„ VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์˜์—ญ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. gcloud๋Š” VM ์ธ์Šคํ„ด์Šค๋กœ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ํ„ฐ๋„์„ ์—ด๊ณ  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    Listening on port [LOCAL_PORT].

    localhost:LOCAL_PORT๋กœ ์ „์†ก๋œ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ VM ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํฌํŠธ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. gcloud๋ฅผ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ๋กœ ๋‘๊ณ  Microsoft Windows ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ ์—ฐ๊ฒฐ ์•ฑ์„ ์—ฝ๋‹ˆ๋‹ค.

  4. ์ปดํ“จํ„ฐ ์ด๋ฆ„์œผ๋กœ ํ„ฐ๋„ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    localhost:LOCAL_PORT

    LOCAL_PORT๋ฅผ ํ„ฐ๋„์ด gcloud๋กœ ์—ด๋ ธ์„ ๋•Œ ํ‘œ์‹œ๋œ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  5. ์—ฐ๊ฒฐ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ TCP ์—ฐ๊ฒฐ ํ„ฐ๋„๋ง

gcloud compute start-iap-tunnel ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํฌํŠธ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋‹ค๋ฅธ TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์— IAP TCP ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ํฌํŠธ๋Š” HTTPS ์ŠคํŠธ๋ฆผ์—์„œ ๋กœ์ปฌ ๋จธ์‹ ์œผ๋กœ๋ถ€ํ„ฐ ์›๊ฒฉ ๋จธ์‹ ์œผ๋กœ์˜ ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ์„ ํ„ฐ๋„๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ IAP๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ ์šฉํ•˜๊ณ  ๋ž˜ํ•‘ ํ•ด์ œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์›๊ฒฉ ํฌํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์›๊ฒฉ ํฌํŠธ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋„ ๋ž˜ํ•‘๋˜์–ด ๋กœ์ปฌ ํฌํŠธ๋กœ ์ „์†ก๋˜๊ณ  ์ดํ›„ ๋ž˜ํ•‘ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

gcloud

VM ์ธ์Šคํ„ด์Šค์˜ ํฌํŠธ์— ์•”ํ˜ธํ™”๋œ ํ„ฐ๋„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \
    --local-host-port=localhost:LOCAL_PORT \
    --zone=ZONE

INSTANCE_NAME ๋ฐ INSTANCE_PORT๋ฅผ ์—ฐ๊ฒฐํ•  VM ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„๊ณผ ํฌํŠธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. LOCAL_PORT๋ฅผ ํ”„๋ก์‹œ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” localhost ํฌํŠธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ZONE์„ VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์˜์—ญ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

gcloud๋Š” VM ์ธ์Šคํ„ด์Šค๋กœ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ํ„ฐ๋„์„ ์—ด๊ณ  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Listening on port [LOCAL_PORT].

localhost:LOCAL_PORT๋กœ ์ „์†ก๋œ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ VM ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํฌํŠธ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IAP TCP ์—…๋กœ๋“œ ๋Œ€์—ญํญ ์ฆ๊ฐ€

IAP TCP ์—…๋กœ๋“œ ๋Œ€์—ญํญ์„ ๋Š˜๋ฆฌ๋ ค๋ฉด gcloud CLI๊ฐ€ ์„ค์น˜๋œ ๋™์ผํ•œ ๋จธ์‹ ์— NumPy๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Linux

Unix ํ”Œ๋žซํผ์—์„œ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NumPy๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ์ƒˆ ํ„ฐ๋ฏธ๋„ ์ธ์Šคํ„ด์Šค์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$(gcloud info --format="value(basic.python_location)") -m pip install numpy
์ž์„ธํ•œ ๋‚ด์šฉ์€ NumPy.org๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

NumPy๋ฅผ ์„ค์น˜ํ•œ ํ›„์—๋„ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ง€์†๋˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ gcloud๊ฐ€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Windows

Windows ํ”Œ๋žซํผ์—์„œ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NumPy๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ์ƒˆ PowerShell ์ธ์Šคํ„ด์Šค์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
์ž์„ธํ•œ ๋‚ด์šฉ์€ NumPy.org๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

NumPy๋ฅผ ์„ค์น˜ํ•œ ํ›„์—๋„ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์„œ gcloud๊ฐ€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"

์•Œ๋ ค์ง„ ์ œํ•œ์‚ฌํ•ญ

๋Œ€์—ญํญ: IAP์˜ TCP ์ „๋‹ฌ ๊ธฐ๋Šฅ์€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. IAP๋Š” ์‚ฌ์šฉ์ž์˜ ์ด ์„œ๋น„์Šค ๋‚จ์šฉ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์šฉ๋Ÿ‰์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๊ธธ์ด: 1์‹œ๊ฐ„ ๋™์•ˆ ํ™œ๋™์ด ์—†์œผ๋ฉด IAP๊ฐ€ ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์ž๋™์œผ๋กœ ๋Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ gcloud compute start-iap-tunnel์—์„œ๋Š” ํ„ฐ๋„ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜๋ฉด ํ„ฐ๋„์„ ๋‹ค์‹œ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

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