커스텀 액세스 수준 사양

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

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

객체

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

객체
origin 요청의 출처를 식별하는 속성을 포함합니다.
request.auth 요청의 인증 및 승인 측면을 식별하는 속성을 포함합니다.
request.time 시간대, 요일 또는 특정 기간을 기준으로 리소스에 대한 액세스를 제한하는 데 사용할 수 있는 시간 기반 속성이 포함되어 있습니다.
levels 다른 액세스 수준에 대한 종속 항목을 정의하는 속성을 포함합니다.
device 요청이 시작된 기기를 설명하는 속성을 포함합니다.
api 사용자, 기기 또는 네트워크와는 별개로 API 호출 자체와 관련된 속성이 포함됩니다.

origin 속성

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

속성
ip
유형 문자열
설명

요청이 시작된 IP 주소입니다. IP 주소를 확인할 수 없는 경우 origin.ip는 오류로 평가됩니다. 문자열 비교를 수행하는 대신 inIpRange를 사용하여 출처 IP 주소가 특정 IP 주소 범위에 있는지 확인하는 것이 좋습니다.

예시:

inIpRange(origin.ip, ["203.0.113.24"])

region_code
유형 문자열
설명

요청이 시작된 국가 또는 지역의 ISO 3166-1 alpha-2 코드입니다. 지역 코드를 확인할 수 없는 경우 origin.region_code는 오류로 평가됩니다.

예시:

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를 가져올 수 있습니다.

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

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

예시:

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

claims.crd_str.pwd
유형 부울
설명

사용자는 비밀번호로 인증되었습니다.

예시:

request.auth.claims.crd_str.pwd == true

claims.crd_str.push
유형 부울
설명

사용자는 모바일 기기로 보낸 푸시 알림을 통해 인증되었습니다.

예시:

request.auth.claims.crd_str.push == true

claims.crd_str.sms
유형 부울
설명

사용자는 SMS로 전송된 코드를 사용하거나 전화 통화를 통해 인증되었습니다.

예시:

request.auth.claims.crd_str.sms == true

claims.crd_str.swk
유형 부울
설명

2SV는 휴대전화와 같은 소프트웨어 키를 보안 키로 사용했습니다.

예시:

request.auth.claims.crd_str.swk == true

claims.crd_str.hwk
유형 부울
설명

2SV는 Google Titan 키와 같은 하드웨어 키를 사용했습니다.

예시:

request.auth.claims.crd_str.hwk == true

claims.crd_str.otp
유형 부울
설명

사용자는 일회용 비밀번호 메서드(Google OTP 및 백업 코드)로 통해 인증되었습니다.

예시:

request.auth.claims.crd_str.otp == true

claims.crd_str.mfa
유형 부울
설명

사용자는 이 표의 메서드 중 하나(pwd 제외)로 인증되었습니다.

예:

request.auth.claims.crd_str.mfa == true

request.auth.oauth.client_id
유형 OAuthClientID
설명

MCP 도구에 대한 액세스를 허용하거나 허용하지 않을 AI 에이전트의 클라이언트 ID입니다.

예:

request.auth.oauth.client_id == OAuthClientID

사용자 인증 정보 강도 정책에 대한 자세한 내용은 사용자 인증 정보 강도 정책 구성을 참조하세요.

request.time 속성

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

속성
getFullYear()
유형 문자열
설명

연도를 가져옵니다 (예: 2023).

예:

request.time.getFullYear("America/Los_Angeles") == 2024

getMonth()
유형 문자열
설명

월을 가져옵니다(0(1월)부터 11(12월)까지).

예:

request.time.getMonth("America/Los_Angeles") == 0 (1월)

getDate()
유형 문자열
설명

1~31 사이의 월중 일을 가져옵니다.

예:

request.time.getDate("America/Los_Angeles") == 1

getDayOfMonth()
유형 문자열
설명

월중 일을 가져옵니다 (0은 1일).

예:

request.time.getDayOfMonth("America/Los_Angeles") == 0 (매월 1일)

getDayOfWeek()
유형 문자열
설명

요일을 0 (일요일)부터 6 (토요일)까지 가져옵니다.

예:

request.time.getDayOfWeek("America/Los_Angeles") == 1 (월요일)

getDayOfYear()
유형 문자열
설명

연중 날짜를 0~365에서 가져옵니다.

예:

request.time.getDayOfYear("America/Los_Angeles") == 0 (1월 1일)

getHours()
유형 문자열
설명

시간(0(자정)에서 23(오후 11시)까지)을 가져옵니다.

예:

request.time.getHours("America/Los_Angeles") == 19 (오후 7시)

getMinutes()
유형 문자열
설명

해당 시간의 분을 0~59 사이의 값으로 가져옵니다.

예:

request.time.getMinutes("America/Los_Angeles") == 30

levels 속성

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

속성
LEVEL_NAME
유형 부울
설명

levels.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개의 공유 최상위 속성(is_compliant_device, is_managed_device, device_health_score)을 채울 수 있습니다.

또한 공급업체는 data 속성을 사용하여 참조하는 자체 키와 값을 제공할 수 있습니다. data 속성에 사용할 수 있는 키는 공급업체마다 다릅니다. 정책 표현식의 키 값을 비교할 때 일관적이어야 합니다. 예를 들어 키 값이 문자열 또는 부울일 것으로 예상된다면 그에 맞게 정책 표현식의 문자열 또는 부울과 비교해야 합니다. 값이 정수인 경우 정책 표현식의 Double 숫자와 비교해야 합니다.

기기 상태를 참조하려면 key-acme 형식을 사용합니다. 여기서 acme는 조직의 고객 ID입니다. GET https://www.googleapis.com/admin/directory/v1/customers/my_customer URL에서 고객 ID를 가져올 수 있습니다. 대답의 ID 필드에는 C 문자로 시작하는 고객 ID가 포함됩니다. C 문자를 제외한 C 문자 뒤의 문자열을 고객 ID로 사용합니다.

열거형 값:

// Health score of the device as provided by the vendor (possibly third party).
enum DeviceHealthScore {
  // The health score for the device is not specified or unknown.
  DEVICE_HEALTH_SCORE_UNSPECIFIED