์ปค์Šคํ…€ ์กฐ์ง ์ •์ฑ… ์‚ฌ์šฉ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์กฐ์ง ์ •์ฑ… ์„œ๋น„์Šค ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ Google Cloud ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํŠน์ • ์ž‘์—…์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • iap.googleapis.com/TunnelDestGroup

์กฐ์ง ์ •์ฑ…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ ์กฐ์ง ์ •์ฑ…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์กฐ์ง ์ •์ฑ… ๋ฐ ์ œ์•ฝ์กฐ๊ฑด ์ •๋ณด

Google Cloud ์กฐ์ง ์ •์ฑ… ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ์ง ๋ฆฌ์†Œ์Šค๋ฅผ ์ค‘์•™์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋งคํ‹ฑ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง ์ •์ฑ… ๊ด€๋ฆฌ์ž๋Š” Google Cloud ๋ฆฌ์†Œ์Šค ๊ณ„์ธต ๊ตฌ์กฐ์—์„œGoogle Cloud ๋ฆฌ์†Œ์Šค ๋ฐ ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์˜ ํ•˜์œ„ ์š”์†Œ์— ์ ์šฉ๋˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์ด๋ผ๋Š” ์ œํ•œ์‚ฌํ•ญ ์ง‘ํ•ฉ์ธ ์กฐ์ง ์ •์ฑ…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง, ํด๋” ๋˜๋Š” ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์—์„œ ์กฐ์ง ์ •์ฑ…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ์ง ์ •์ฑ…์€ ๋‹ค์–‘ํ•œ Google Cloud ์„œ๋น„์Šค์— ๋‚ด์žฅ๋œ ๊ด€๋ฆฌํ˜• ์ œ์•ฝ์กฐ๊ฑด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์กฐ์ง ์ •์ฑ…์—์„œ ์ œํ•œ๋˜๋Š” ํŠน์ • ํ•„๋“œ๋ฅผ ๋ณด๋‹ค ์„ธ๋ถ€์ ์œผ๋กœ ๋งž์ถค์„ค์ • ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ดํ•˜๋ ค๋ฉด ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“ค๊ณ  ์กฐ์ง ์ •์ฑ…์— ์ด๋Ÿฌํ•œ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์ฑ… ์ƒ์†

๊ธฐ๋ณธ์ ์œผ๋กœ ์กฐ์ง ์ •์ฑ…์€ ์ •์ฑ…์„ ์ ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ํ•˜์œ„ ์š”์†Œ์— ์ƒ์†๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋”์— ์ •์ฑ…์„ ์ ์šฉํ•˜๋ฉด 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. Install the Google Cloud CLI.

  5. ์™ธ๋ถ€ ID ๊ณต๊ธ‰์—…์ฒด(IdP)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ์ œํœด ID๋กœ gcloud CLI์— ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  6. gcloud CLI๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  9. Install the Google Cloud CLI.

  10. ์™ธ๋ถ€ ID ๊ณต๊ธ‰์—…์ฒด(IdP)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ์ œํœด ID๋กœ gcloud CLI์— ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  11. gcloud CLI๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud init
  12. ์กฐ์ง ID๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  13. ํ•„์š”ํ•œ ์—ญํ• 

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

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

    ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ

    ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์€ ์กฐ์ง ์ •์ฑ…์„ ์ ์šฉํ•˜๋Š” ์„œ๋น„์Šค์—์„œ ์ง€์›๋˜๋Š” ๋ฆฌ์†Œ์Šค, ๋ฉ”์„œ๋“œ, ์กฐ๊ฑด, ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ YAML ํŒŒ์ผ์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์˜ ์กฐ๊ฑด์€ Common Expression Language(CEL)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค. CEL์„ ์‚ฌ์šฉํ•ด์„œ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์—์„œ ์กฐ๊ฑด์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ ๋ฐ ๊ด€๋ฆฌ์˜ CEL ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ YAML ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - RESOURCE_NAME
    methodTypes:
    - CREATE
    - UPDATE
    condition: "CONDITION"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

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

    • ORGANIZATION_ID: ์กฐ์ง ID(์˜ˆ: 123456789)

    • CONSTRAINT_NAME: ์ƒˆ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ด๋ฆ„. ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์€ custom.์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด custom.denyUnownedDomains์ž…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 70์ž์ž…๋‹ˆ๋‹ค.

    • RESOURCE_NAME: ์ œํ•œํ•˜๋ ค๋Š” ๊ฐ์ฒด ๋ฐ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œGoogle Cloud ๋ฆฌ์†Œ์Šค์˜ ์ •๊ทœํ™”๋œ ์ด๋ฆ„. ์˜ˆ๋ฅผ ๋“ค๋ฉด iap.googleapis.com/TunnelDestGroup์ž…๋‹ˆ๋‹ค.

    • CONDITION: ์ง€์›๋˜๋Š” ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค์˜ ํ‘œํ˜„์— ๋Œ€ํ•ด ์ž‘์„ฑ๋œ CEL ์กฐ๊ฑด. ์ด ํ•„๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 1000์ž(์˜๋ฌธ ๊ธฐ์ค€)์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ง€์›๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด "!resource.fqdns.all(value, value.endsWith(\".example-pet-store.com\"))"์ž…๋‹ˆ๋‹ค.

    • ACTION: condition์ด ์ถฉ์กฑ๋  ๋•Œ ์ˆ˜ํ–‰ํ•  ์ž‘์—…. ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ALLOW ๋ฐ DENY์ž…๋‹ˆ๋‹ค.

    • DISPLAY_NAME: ์ œ์•ฝ์กฐ๊ฑด์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ด๋ฆ„. ์ด ํ•„๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 200์ž(์˜๋ฌธ ๊ธฐ์ค€)์ž…๋‹ˆ๋‹ค.

    • DESCRIPTION: ์ •์ฑ…์„ ์œ„๋ฐ˜ํ•  ๋•Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋กœ ํ‘œ์‹œํ•  ์ œ์•ฝ์กฐ๊ฑด์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์„ค๋ช…. ์ด ํ•„๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 2,000์ž(์˜๋ฌธ ๊ธฐ์ค€)์ž…๋‹ˆ๋‹ค.

    ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด ์ •์˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด ์„ค์ •

    ์ƒˆ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์˜ YAML ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„์—๋Š” ์กฐ์ง์—์„œ ์กฐ์ง ์ •์ฑ…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋ ค๋ฉด gcloud org-policies set-custom-constraint ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    CONSTRAINT_PATH๋ฅผ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด /home/user/customconstraint.yaml์ž…๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด Google Cloud ์กฐ์ง ์ •์ฑ… ๋ชฉ๋ก์—์„œ ์กฐ์ง ์ •์ฑ…์œผ๋กœ ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด gcloud org-policies list-custom-constraints ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    ORGANIZATION_ID๋ฅผ ์กฐ์ง ๋ฆฌ์†Œ์Šค ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์กฐ์ง ์ •์ฑ… ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ปค์Šคํ…€ ์กฐ์ง ์ •์ฑ… ์ ์šฉ

    ์ œ์•ฝ์กฐ๊ฑด์„ ์ฐธ์กฐํ•˜๋Š” ์กฐ์ง ์ •์ฑ…์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ์กฐ์ง ์ •์ฑ…์„ Google Cloud ๋ฆฌ์†Œ์Šค์— ์ ์šฉํ•˜์—ฌ ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ฝ˜์†”

    1. Google Cloud ์ฝ˜์†”์—์„œ ์กฐ์ง ์ •์ฑ… ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

      ์กฐ์ง ์ •์ฑ…์œผ๋กœ ์ด๋™

    2. ํ”„๋กœ์ ํŠธ ์„ ํƒ ๋„๊ตฌ์—์„œ ์กฐ์ง ์ •์ฑ…์„ ์„ค์ •ํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ์กฐ์ง ์ •์ฑ… ํŽ˜์ด์ง€์˜ ๋ชฉ๋ก์—์„œ ์ œ์•ฝ์กฐ๊ฑด์„ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ์ œ์•ฝ์กฐ๊ฑด์˜ ์ •์ฑ… ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ๋ด…๋‹ˆ๋‹ค.
    4. ์ด ๋ฆฌ์†Œ์Šค์˜ ์กฐ์ง ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์ •์ฑ… ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    5. ์ •์ฑ… ์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ ์ƒ์œ„ ์ •์ฑ… ์žฌ์ •์˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    6. ๊ทœ์น™ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    7. ์ ์šฉ ์„น์…˜์—์„œ ์ด ์กฐ์ง ์ •์ฑ… ์ ์šฉ์„ ์‚ฌ์šฉ ์„ค์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    8. (์„ ํƒ์‚ฌํ•ญ) ํƒœ๊ทธ๋กœ ์กฐ์ง ์ •์ฑ…์„ ์กฐ๊ฑด๋ถ€๋กœ ๋งŒ๋“ค๋ ค๋ฉด ์กฐ๊ฑด ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ถ€ ๊ทœ์น™์„ ์กฐ์ง ์ •์ฑ…์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋น„์กฐ๊ฑด๋ถ€ ๊ทœ์น™์„ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ •์ฑ…์„ ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ง ์ •์ฑ… ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
    9. ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ…Œ์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์กฐ์ง ์ •์ฑ…์˜ ํšจ๊ณผ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ด€๋ฆฌํ˜• ์ œ์•ฝ์กฐ๊ฑด์—๋Š” ์ •์ฑ… ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ •์ฑ… ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ์กฐ์ง ์ •์ฑ… ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
    10. ์กฐ์ง ์ •์ฑ…์„ ์™„๋ฃŒํ•˜๊ณ  ์ ์šฉํ•˜๋ ค๋ฉด ์ •์ฑ… ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์ด ์ ์šฉ๋˜๋Š” ๋ฐ ์ตœ๋Œ€ 15๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

    gcloud

    ๋ถˆ๋ฆฌ์–ธ ๊ทœ์น™์ด ์žˆ๋Š” ์กฐ์ง ์ •์ฑ…์„ ๋งŒ๋“ค๋ ค๋ฉด ์ œ์•ฝ์กฐ๊ฑด์„ ์ฐธ์กฐํ•˜๋Š” ์ •์ฑ… YAML ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

          name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
          spec:
            rules:
            - enforce: true
        

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

    • PROJECT_ID: ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•  ํ”„๋กœ์ ํŠธ
    • CONSTRAINT_NAME: ์ปค์Šคํ…€ ์ œ์•ฝ์กฐ๊ฑด์— ๋Œ€ํ•ด ์ •์˜๋œ ์ด๋ฆ„. ์˜ˆ๋ฅผ ๋“ค๋ฉด custom.denyUnownedDomains์ž…๋‹ˆ๋‹ค.

    ์ œ์•ฝ์กฐ๊ฑด์ด ํฌํ•จ๋œ ์กฐ์ง ์ •์ฑ…์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

        gcloud org-policies set-policy POLICY_PATH
        

    POLICY_PATH๋ฅผ ์กฐ์ง ์ •์ฑ… YAML ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ •์ฑ…์ด ์ ์šฉ๋˜๋Š” ๋ฐ ์ตœ๋Œ€ 15๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

    ์ปค์Šคํ…€ ์กฐ์ง ์ •์ฑ… ํ…Œ์ŠคํŠธ

    ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ํŠน์ • ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํ„ฐ๋„ ๋Œ€์ƒ ๊ทธ๋ฃน์— ํšŒ์‚ฌ ๋„๋ฉ”์ธ .example-pet-store.com๋งŒ ํฌํ•จ๋˜๋„๋ก ํ•˜๋Š” ์ปค์Šคํ…€ ์ œ์•ฝ ์กฐ๊ฑด ๋ฐ ์ •์ฑ…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ์‚ฌํ•ญ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์กฐ์ง ID
    • ํ”„๋กœ์ ํŠธ ID

    ์ œ์•ฝ์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ

    1. ๋‹ค์Œ ํŒŒ์ผ์„ constraint-deny-unowned-domains.yaml๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

        name: organizations/ORGANIZATION_ID/customConstraints/custom.denyUnownedDomains
        resourceTypes:
        - iap.googleapis.com/TunnelDestGroup
        methodTypes:
        - CREATE
        - UPDATE
        condition: "!resource.fqdns.all(value, value.endsWith(\".example-pet-store.com\"))"
        actionType: DENY
        displayName: Deny Unowned Domains
        description: All tunnel destination groups can only contain company owned domains.
      

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

    2. ์ œ์•ฝ์กฐ๊ฑด์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

        gcloud org-policies set-custom-constraint ~/constraint-deny-unowned-domains.yaml
      
    3. ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

        gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
      

      ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

        CUSTOM_CONSTRAINT                       ACTION_TYPE  METHOD_TYPES   RESOURCE_TYPES                     DISPLAY_NAME
        custom.denyUnownedDomains              DENY         CREATE,UPDATE         iap.googleapis.com/TunnelDestGroup   Deny Unowned Domains
        ...
      

    ์ •์ฑ… ๋งŒ๋“ค๊ธฐ

    1. ๋‹ค์Œ ํŒŒ์ผ์„ policy-deny-unowned-domains.yaml๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

        name: projects/PROJECT_ID/policies/custom.denyUnownedDomains
        spec:
          rules:
          - enforce: true
      

      PROJECT_ID๋ฅผ ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    2. ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

        gcloud org-policies set-policy ~/policy-deny-unowned-domains.yaml
      
    3. ์ •์ฑ…์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

        gcloud org-policies list --project=PROJECT_ID
      

      ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

        CONSTRAINT                  LIST_POLICY    BOOLEAN_POLICY    ETAG
        custom.denyUnownedDomains   -              SET               COCsm5QGENiXi2E=
      

      ์ •์ฑ…์„ ์ ์šฉํ•œ ํ›„ Google Cloud ๊ฐ€ ์ •์ฑ…์„ ์‹œํ–‰ํ•  ๋•Œ๊นŒ์ง€ 2๋ถ„ ์ •๋„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

    ์ •์ฑ… ํ…Œ์ŠคํŠธ

    ํ”„๋กœ์ ํŠธ์—์„œ ๋Œ€์ƒ ๊ทธ๋ฃน์„ ๋งŒ๋“ค์–ด ๋ด…๋‹ˆ๋‹ค.

      gcloud iap tcp dest-groups create org-policy-test \
          --region=us-central1 \
          --fqdn-list=*.example-pet-store.com,*.altostrat.com
    

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Operation denied by custom org policies: ["customConstraints/custom.denyUnownedDomains": "All tunnel destination groups can only contain company owned domains."]
    

    IAP(Identity-Aware Proxy) ์ง€์› ๋ฆฌ์†Œ์Šค

    ๋‹ค์Œ ํ‘œ์—๋Š” ์ปค์Šคํ…€ ์ œ์•ฝ ์กฐ๊ฑด์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” Identity-Aware Proxy ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ฆฌ์†Œ์Šค ํ•„๋“œ
    iap.googleapis.com/TunnelDestGroup resource.cidrs
    resource.fqdns
    resource.name

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