์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€ ๋งŒ๋“ค๊ธฐ

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

์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ Common Expression Language(CEL) ํ‘œํ˜„์‹์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฝ˜์†”

์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Google Cloud ์ฝ˜์†”์—์„œ Access Context Manager ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

    Access Context Manager ํŽ˜์ด์ง€ ์—ด๊ธฐ

  2. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์กฐ์ง์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. Access Context Manager ํŽ˜์ด์ง€์˜ ๋งจ ์œ„์— ์žˆ๋Š” ์ƒˆ ํ•ญ๋ชฉ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

  4. ์ƒˆ ์•ก์„ธ์Šค ์ˆ˜์ค€ ์ฐฝ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ์•ก์„ธ์Šค ์ˆ˜์ค€ ์ œ๋ชฉ ์ƒ์ž์— ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ์ œ๋ชฉ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์€ ์ตœ๋Œ€ 50์ž์—ฌ์•ผ ํ•˜๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์ˆซ์ž, ๋ฌธ์ž, ๋ฐ‘์ค„, ๊ณต๋ฐฑ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    2. ์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ์— ๋”ฐ๋ผ ๊ณ ๊ธ‰ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    3. ์กฐ๊ฑด ์„น์…˜์—์„œ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ํ‘œํ˜„์‹์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด์€ ๋‹จ์ผ ๋ถ€์šธ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      Common Expression Language(CEL) ์ง€์› ๋ฐ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋Œ€ํ•œ ์˜ˆ์‹œ์™€ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

gcloud

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

gcloud ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์„ ๋งŒ๋“ค๋ ค๋ฉด gcloud access-context-manager levels create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud access-context-manager levels create LEVEL_NAME \
  --title=TITLE \
  --custom-level-spec=FILE \
  --description=DESCRIPTION \
  --policy=POLICY_NAME

๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • LEVEL_NAME์€ ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋ฌธ์ž, ์ˆซ์ž, ๋ฐ‘์ค„๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ์ตœ๋Œ€ 50์ž์ž…๋‹ˆ๋‹ค.

  • TITLE์€ ์งง๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค.

  • FILE๋Š” ๋‹จ์ผ ํ‚ค-๊ฐ’ ์Œ expression: "CEL_EXPRESSION"์œผ๋กœ ํ˜•์‹์ด ์ง€์ •๋œ CEL ํ‘œํ˜„์‹์„ ํฌํ•จํ•˜๋Š” .yaml ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

    Common Expression Language(CEL) ์ง€์› ๋ฐ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋Œ€ํ•œ ์˜ˆ์‹œ์™€ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • DESCRIPTION(์„ ํƒ์‚ฌํ•ญ)์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

  • POLICY_NAME์€ ์กฐ์ง์˜ ์•ก์„ธ์Šค ์ •์ฑ…์˜ ์ˆซ์ž ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒฝ์šฐ gcloud ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

custom-level-spec YAML ํŒŒ์ผ

gcloud ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ custom-level-spec ์˜ต์…˜์— .yaml ํŒŒ์ผ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .yaml ํŒŒ์ผ์€ ๋‹จ์ผ ๋ถ€์šธ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” CEL ํ‘œํ˜„์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. .yaml ํŒŒ์ผ์€ expression: "CEL_EXPRESSION" ํ˜•์‹์˜ ๋‹จ์ผ ํ‚ค-๊ฐ’ ์Œ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. expression์˜ ๊ฐ’์€ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

YAML ํŒŒ์ผ ์˜ˆ์‹œ

expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"

๋ช…๋ น์–ด ์˜ˆ

gcloud access-context-manager levels create Custom_Trust \
    --custom-level-spec=customspec.yaml \
    --description="Custom access level for corp." \
    --title="Custom Trust Level" \
    --policy=1521580097614100

REST

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

์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์„ ๋งŒ๋“ค๋ ค๋ฉด accessPolicies.accessLevels.create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

ํ˜ธ์ถœ์˜ ์š”์ฒญ ๋ณธ๋ฌธ์— AccessLevel ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

{
  "name": string,
  "title": string,
  "description": string,
  "custom": {
    "expr": {
      "expression": string,
      "title": string,
      "description": string
    }
  }
}

custom ํ•„๋“œ์— ์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ CEL ํ‘œํ˜„์‹์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ „์ฒด ํ‘œํ˜„์‹์€ ๋ถ€์šธ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. title ๋ฐ description ํ•„๋“œ๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์˜ˆ

{
  "name": "example_custom_level",
  "title": "Example custom level",
  "description": "An example custom access level.",
  "custom":  {
    "expr": {
      "expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
      "title": "Check for known devices",
      "description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
    }
  }
}

RPC

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

์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์„ ๋งŒ๋“ค๋ ค๋ฉด CreateAccessLevel๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

access_level ํ•„๋“œ์— AccessLevel์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ
name
์œ ํ˜• ๋ฌธ์ž์—ด
์„ค๋ช…

ํ•„์ˆ˜.

์•ก์„ธ์Šค ์ˆ˜์ค€์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. POLICY_ID์€ ์กฐ์ง์˜ ์•ก์„ธ์Šค ์ •์ฑ…์˜ ์ˆซ์ž ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. SHORT_NAME๋Š” ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋ฌธ์ž, ์ˆซ์ž, ๋ฐ‘์ค„๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜•์‹:

                accessPolicies/policy_id/accessLevels/short_name
                

title
์œ ํ˜• ๋ฌธ์ž์—ด
์„ค๋ช…

์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•ก์„ธ์Šค ์ˆ˜์ค€ ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ์ˆ˜์ค€์—๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

description
์œ ํ˜• ๋ฌธ์ž์—ด
์„ค๋ช…

์•ก์„ธ์Šค ์ˆ˜์ค€์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

custom
์œ ํ˜• ๋ฌธ์ž์—ด
์„ค๋ช…

์ปค์Šคํ…€ ์•ก์„ธ์Šค ์ˆ˜์ค€์˜ CEL ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํ‘œํ˜„์‹์€ ๋ถ€์šธ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.