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

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

CEL の詳細については、CEL 言語の定義をご覧ください。

オブジェクト

Access Context Manager には、アクセスレベル属性を含む 4 つのオブジェクトを提供します。

オブジェクト
origin リクエストの送信元を識別する属性が含まれます。
request.auth リクエストの認証と認証の側面を識別する属性が含まれます。
levels 他のアクセスレベルの依存関係を定義する属性が含まれます。
device リクエストの送信元のデバイスを記述する属性が含まれます。

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

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

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

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

2 段階認証プロセスには、スマートフォンなどのソフトウェアキーをセキュリティ キーとして使用します。

例:


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 認証システムとバックアップ コード)で認証されます。

例:


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

claims.crd_str.mfa
ブール値
説明

ユーザーは、このテーブル(pwdを除く)のメソッドのいずれかで認証されます。

例:


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

認証情報の安全度のポリシーの詳細については、認証情報の安全度のポリシーを構成するをご覧ください。

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 属性で使用可能なキーはベンダーごとに異なります。ポリシー エクスプレッションの Key-Value を比較する際は、一貫性があることを確認してください。たとえば、Key-Value が文字列またはブール値になると予想される場合は、対応するポリシー エクスプレッションの文字列またはブール値と比較してください。値が整数の場合は、ポリシー エクスプレッションで 2 倍の数値と比較する必要があります。

列挙値:


// 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 = 0;
  // The health of the device is very poor.
  VERY_POOR = 1;
  // The health of the device is poor.
  POOR = 2;
  // The health of the device is ok.
  NEUTRAL = 3;
  // The health of the device is good.
  GOOD = 4;
  // The health of the device is very good.
  VERY_GOOD = 5;
}

例:


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


device.vendors["some_vendor"].data["some_num"] == 1.0

android_device_security.verified_boot
ブール値
説明

Android 確認付きブートステータスが green かどうか。

例:


device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
ブール値
説明

デバイスが CTS プロファイルのコンプライアンスを満たしているかどうか。

例:


device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
ブール値
説明

デバイスで Google Play プロテクト の [アプリの確認] が有効になっているかどうか。

例:


device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
ブール値
説明

有害な可能性があるアプリがデバイスで検出されたかどうか。

例:


device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
ブール値
説明

iOS デバイスが制限解除された事が判明しているかどうか。

例:


device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
ブール値
説明

検証済みの Chrome OS のデバイスからリクエストが送られたものかどうかを示します。

例:


device.verified_chrome_os == true

chrome.management_state
文字列
説明

ブラウザはブラウザレベルまたはプロファイル レベルで管理されているか、企業の正しいドメインの元で管理されていますか。

ブラウザが一元的に管理、プッシュされており、管理対象ブラウザまたはプロファイルのドメインがサーバー側の想定ドメインと一致すると、ブラウザは管理対象とみなされます。

例:


device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_MANAGED_BY_OTHER_DOMAIN | 
ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED |
ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED |
ChromeManagementState.CHROME_MANAGEMENT_STATE_UNMANAGED

chrome.versionAtLeast
文字列
説明

ブラウザが特定の最小バージョン以上ですか。

例:


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
ブール値
説明

リアルタイム URL チェック コネクタが有効になっていますか。

例:


device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
ブール値
説明

ファイル アップロード分析コネクタが有効になっていますか。

例:


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
ブール値
説明

ファイル ダウンロード分析コネクタが有効になっていますか。

例:


device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
ブール値
説明

一括テキスト(貼り付け)分析コネクタが有効になっていますか。

例:


device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
ブール値
説明

セキュリティ イベント レポート コネクタが有効になっていますか。

例:


device.chrome.is_security_event_analysis_enabled == true | false

関数

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

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_MATCHING_EXISTING_DEVICE
  • CertificateBindingState.CERT_STATE_UNKNOWN

例:


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
タイプ string.(string) -> bool
説明

文字列オペランドが接頭辞引数で始まるかどうかをテストします。

例:


"Sample string".startsWith("Sample")

endsWith()
タイプ string.(string) -> bool
説明

文字列オペランドが接尾辞引数で終わるかどうかをテストします。

例:


"Sample string".endsWith("string")

origin.clientCertFingerprint()
タイプ Origin.() -> string
説明

発信元に関連付けられた証明書のフィンガープリントを返します。これをマクロで使用してデバイス証明書をテストできます。

例:


// Checks if the enterprise certificate associated with the origin matches the device.
device.certificates.exists(cert, cert.is_valid && cert.cert_fingerprint == origin.clientCertFingerprint())

CEL 式のマクロ

カスタム アクセスレベルの CEL 式では、次のマクロを使用できます。

マクロ 説明
has(e.f) フィールドが使用可能かどうかをテストします。詳細は、フィールドの選択をご覧ください。例:

has({"key": "value"}.key) has(device.vendors.some_vendor)

e.all(x, p) 述語が、リスト e のすべての要素を保持しているか、マップ e のキーを保持しているかをテストします。ここで、x は、要素またはキーにバインドする p で使用される識別子です。all() マクロは、要素ごとの述語結果を and(&&)演算子で結合します。そのため、述語のいずれかが false と評価されると、このマクロは他の述語のエラーを無視して false と評価されます。例:

すべての要素が 1 より大きいとは限らないため、false を返します。
[1,2,3].all(x, x > 1)

e.exists(x, p) all() マクロと似ていますが、述語結果を or(||)演算子で結合します。例:

リストに 1 を超える要素が少なくとも 1 つ存在するため、true が返されます。
[1,2,3].exists(x, x > 1)

デバイスに関連付けられているエンタープライズ証明書が発行者と一致するかどうかを確認します。
device.certificates.exists(cert, cert.is_valid && cert.issuer == "EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN")

e.exists_one(x, p) exists() マクロと似ていますが、1 つの要素またはキーの述語が true と評価され、それ以外が false と評価された場合にのみ true と評価されます。ブール値の結果の他の結合が false と評価され、述語エラーがあるとマクロでエラーが発生します。例:

複数の要素が 1 より大きいため、false を返します。
[1,2,3].exists_one(x, x > 1)

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つと一致することを判別する。