カスタム アクセスレベルの仕様

このページでは、カスタム アクセスレベルの Common Expression Language(CEL)式のビルドに使用されるオブジェクトと属性について詳しく説明します。例を紹介します。

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
文字列、リスト(文字列)
説明

リクエストを発行したユーザーの一意の ID。

request.auth.principal の値は、1 つ以上の固有のユーザー ID である必要があります。UUID は Admin SDK Directory API を使用して取得できます。

値は次の形式にする必要があります。 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
説明

デバイスの暗号化ステータスを示します。

列挙値:


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
説明

デバイスが使用しているオペレーティング システムを特定します。

列挙値:


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 オブジェクトは、サードパーティのセキュリティ ベンダーやエンドポイント管理ベンダーが提供するデータへのアクセスに使用されます。各ベンダーは、is_compliant_deviceis_managed_devicedevice_health_score の 3 つの共有トップレベル属性を入力できます。

さらに、ベンダーは、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 アドレスが指定したサブネットの 1 つに属するかを確認します。

例:


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)

この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。

  • リクエストの送信元デバイスが暗号化されている。

  • 次のうち 1 つ以上に該当する。

    • リクエストの送信元は米国である。

    • リクエストの送信元のデバイスは、ドメイン管理者によって承認されています。

例 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"))

この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。

  • 次のうち 1 つに該当する。

    • リクエストの送信元のデバイスは、デスクトップ Windows オペレーティング システムを使用し、組織が所有している。

    • リクエストの送信元のデバイスは、デスクトップ Mac オペレーティング システムを使用し、ドメイン管理者によって承認され、MacOS 10.11 以降を使用している。

例 3

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

この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。

  • certificateBindingState 拡張関数は、要求時に提示された証明書が、デバイスがエンドポイント検証に登録されたときに登録されたデバイス証明書の1つと一致することを判別する。