커스텀 액세스 수준 사양

이 페이지에서는 커스텀 액세스 수준에서 CEL(Common Expression Language) 표현식을 빌드하는 데 사용되는 객체 및 속성을 자세히 설명합니다. 예시가 포함되어 있습니다.

CEL에 대한 자세한 내용은 CEL 언어 정의를 참조하세요.

이 페이지에는 다음 섹션이 포함되어 있습니다.

객체

Access Context Manager는 액세스 수준 속성을 포함하는 4개의 객체를 제공합니다.

객체
origin 요청의 출처를 식별하는 속성을 포함합니다.
request.auth 요청의 인증 및 승인 측면을 식별하는 속성을 포함합니다.
levels 다른 액세스 수준에 대한 종속 항목을 정의하는 속성을 포함합니다.
device 요청이 시작된 기기를 설명하는 속성을 포함합니다.

origin 속성

이 섹션에는 origin 객체에서 지원하는 속성이 나와 있습니다.

속성
ip
유형 문자열
설명

요청이 시작된 IP 주소입니다.

예:


origin.ip == "203.0.113.24"

region_code
유형 문자열
설명

요청이 시작된 국가 또는 지역의 ISO 3166-1 alpha-2 코드입니다.

예:


origin.region_code == "GB"
origin.region_code in ["US", "FR", "JP"]

request.auth 속성

이 섹션에는 request.auth 객체에서 지원하는 속성이 나와 있습니다.

속성
principal
유형 string, list(string)
설명

요청을 발급한 사용자의 고유 ID입니다.

request.auth.principal의 값은 하나 이상의 순 사용자 ID여야 합니다. Admin SDK Directory API를 사용하여 UUID를 가져올 수 있습니다.

값은 다음 형식이어야 합니다. accounts.google.com/UUID

여기서 UUID는 사용자의 UUID입니다.

예:


request.auth.principal == "accounts.google.com/1134924314572461055"
request.auth.principal in ["accounts.google.com/1134924314572461055", "accounts.google.com/3134824314572461115"]

levels 속성

이 섹션에는 levels 객체에서 지원하는 속성이 나와 있습니다.

속성
level name
유형 부울
설명

level name는 기존 액세스 수준의 이름에 해당합니다.

사용할 경우 커스텀 액세스 수준의 다른 요구사항 외에 지정된 액세스 수준의 조건도 충족해야 합니다.

예:


levels.allow_corp_ips

여기서 allow_corp_ips는 액세스 수준의 이름입니다.

device 속성

이 섹션에는 device 객체에서 지원하는 속성이 나와 있습니다.

속성
encryption_status
유형 열거형
설명

기기의 암호화 상태를 설명합니다.

열거형 값:


enum DeviceEncryptionStatus {
  // The encryption status of the device is not specified or not known.
  ENCRYPTION_UNSPECIFIED == 0;
  // The device does not support encryption.
  ENCRYPTION_UNSUPPORTED == 1;
  // The device supports encryption, but is currently unencrypted.
  UNENCRYPTED == 2;
  // The device is encrypted.
  ENCRYPTED == 3;
}

예:


device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
유형 부울
설명

기기가 도메인 관리자의 승인을 받았는지 여부

예:


device.is_admin_approved_device == true

is_corp_owned_device
유형 부울
설명

기기를 조직에서 소유하는지 여부

예:


device.is_corp_owned_device == true

is_secured_with_screenlock
유형 부울
설명

기기의 화면 잠금 기능이 사용 설정되었는지 여부

예:


device.is_secured_with_screenlock == true

os_type
유형 열거형
설명

기기가 사용 중인 운영체제를 식별합니다.

열거형 값:


enum OsType {
  // The operating system of the device is not specified or not known.
  OS_UNSPECIFIED == 0;
  // A desktop Mac operating system.
  DESKTOP_MAC == 1;
  // A desktop Windows operating system.
  DESKTOP_WINDOWS == 2;
  // A desktop Linux operating system.
  DESKTOP_LINUX == 3;
  // An Android operating system.
  ANDROID == 4 ;
  // An iOS operating system.
  IOS == 5;
  // A desktop ChromeOS operating system.
  DESKTOP_CHROME_OS == 6;
}

예:


device.os_type == OsType.DESKTOP_MAC
device.os_type != OsType.OS_UNSPECIFIED

vendors
유형 map<string, Vendor> vendors;
설명

vendors 객체는 제3자 보안 및 엔드포인트 관리 공급업체에서 제공하는 데이터에 액세스하는 데 사용됩니다. 각 공급업체는 3개의 공유 최상위 속성(is_compliant_device, is_managed_device, device_health_score)을 채울 수 있습니다.

또한 공급업체는 data 속성을 사용하여 참조하는 자체 키와 값을 제공할 수 있습니다. data 속성에 사용할 수 있는 키는 공급업체마다 다릅니다.

예:


device.vendors["some_vendor"].is_compliant_device == true


device.vendors["some_vendor"].is_managed_device == true


device.vendors["some_vendor"].device_health_score == DeviceHealthScore.VERY_GOOD


device.vendors["some_vendor"].data["is_device_compromised"] == true

verified_chrome_os
유형 부울
설명

인증된 Chrome OS가 설치된 기기에서 요청이 전송되었는지 여부

예:


device.verified_chrome_os == true

함수

Access Context Manager는 커스텀 액세스 수준의 CEL 표현식에 사용할 수 있도록 다음 기능을 제공합니다.

함수
inIpRange(address, [subnets])
유형 (string, list(string)) -< boolean
설명

IP 주소가 지정된 서브넷 중 하나에 속하는지 확인합니다.

예:


inIpRange(origin.ip, ["192.0.2.0/24", "198.51.100.0/24", "203.0.113.0/24"]) == true

device.versionAtLeast(minVersion)
유형 DeviceType.(string) -> boolean
설명

기기 운영체제가 특정 버전 이상인지 확인합니다. 이 함수를 device.os_type 속성과 함께 사용하는 것이 좋습니다.

예:


device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
유형 (Peer, DeviceType) -> integer
설명

원본과 연결된 클라이언트 인증서가 기기와 일치하는지 확인하고 상태를 보고합니다.

함수가 반환하는 상태는 다음 중 하나일 수 있습니다.

  • CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
  • CertificateBindingState.CERT_NOT_MATCHES_EXISTING_DEVICE
  • CertificateBindingState.CERT_STATE_UNKNOWN

예:


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

CEL 표현식 예시

이 섹션에는 커스텀 액세스 수준을 만드는 데 사용되는 CEL 표현식의 예시가 포함되어 있습니다.

예시 1

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

이 예시는 요청을 허용하기 위해 다음 조건을 충족해야 하는 액세스 수준을 나타냅니다.

  • 요청이 시작된 기기가 암호화됩니다.

  • 다음 중 하나 이상에 해당합니다.

    • 요청이 미국에서 시작되었습니다.

    • 요청이 시작된 기기는 도메인 관리자가 승인합니다.

예시 2

(device.os_type == OsType.DESKTOP_WINDOWS && device.is_corp_owned_device) || (device.os_type == OsType.DESKTOP_MAC && device.is_admin_approved_device && device.versionAtLeast("10.11.0"))

이 예시는 요청을 허용하기 위해 다음 조건을 충족해야 하는 액세스 수준을 나타냅니다.

  • 다음 중 하나에 해당합니다.

    • 요청이 시작된 기기는 데스크톱 Windows 운영체제를 사용하며 조직에서 소유합니다.

    • 요청이 시작된 기기는 데스크톱 Mac 운영체제를 사용하며 도메인 관리자가 승인했으며 MacOS 10.11 이상을 사용합니다.

예시 3

(certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE)

이 예시는 요청을 허용하기 위해 다음 조건을 충족해야 하는 액세스 수준을 나타냅니다.

  • certificateBindingState 확장 프로그램 함수는 요청 시 제공되는 인증서가 기기가 엔드포인트 확인에 등록될 때 등록된 기기 인증서 중 하나와 일치하는지 확인합니다.