カスタム アクセスレベルの作成

Access Context Manager でカスタム アクセスレベルを使用すると、Common Expression Language(CEL)のサブセットで作成されたブール式を使用して、Google Cloud リソースへのアクセスを制御できます。発信元のネットワーク プロジェクト、IP アドレス、ID、サードパーティのセキュリティ サービスからのデバイスデータなどのリクエスト属性を評価して、きめ細かいコンテキストアウェア アクセス要件を適用できます。

カスタム アクセスレベル式でデバイス属性を使用するには、有料サブスクリプションが必要です。CEL 式の作成の詳細については、カスタム アクセスレベルの仕様をご覧ください。カスタム アクセスレベルを作成したら、基本アクセスレベルと同じ方法で管理できます。

始める前に

カスタム アクセスレベルを作成する

カスタム アクセスレベルは、 Google Cloud コンソール、gcloud コマンドライン ツール、REST API、RPC を使用して作成できます。

コンソール

Google Cloud コンソールを使用してカスタム アクセスレベルを作成する手順は次のとおりです。

  1. Google Cloud コンソールで [Access Context Manager] ページを開きます。

    [Access Context Manager] ページを開く

  2. プロンプトが表示されたら、組織を選択します。

  3. [Access Context Manager] ページの上部にある [新規] をクリックします。

  4. [新しいアクセスレベル] パネルで、次の操作を行います。

    1. [アクセスレベルのタイトル] ボックスに、アクセスレベルのタイトルを入力します。タイトルは最大 50 文字です。先頭は英字にしてください。その後には、数字、英字、アンダースコア、スペースのみ使用できます。

    2. [条件の作成] で、[詳細モード] を選択します。

    3. [条件] セクションで、カスタム アクセスレベルの式を入力します。条件は、1 つのブール値に解決される必要があります。

      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: 単一の Key-Value ペア(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" という形式の Key-Value ペアを 1 つ配置する必要があります。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

REST API を使用してカスタム アクセスレベルを作成するには、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

RPC を使用してカスタム アクセスレベルを作成するには、CreateAccessLevel を呼び出します。

access_level フィールドには AccessLevel のインスタンスを配置します。

フィールド
name
タイプ 文字列
説明

必須。

アクセスレベルのリソース名。POLICY_ID は組織のアクセス ポリシーの数値名です。SHORT_NAME は文字で始まり、文字、数字、アンダースコア以外を含まないようにする必要があります。

形式:

            accessPolicies/policy_id/accessLevels/short_name
            
title
タイプ 文字列
説明

人が読める形式のアクセスレベルのラベル。アクセスレベルには一意の名前を付ける必要があります。

description
タイプ 文字列
説明

アクセスレベルの説明。

custom
タイプ 文字列
説明

カスタム アクセスレベルの CEL 式。式全体は、ブール値に決まる必要があります。

カスタム アクセスレベルの例

このセクションでは、カスタム アクセスレベルの例を示します。

ソース プロジェクトに基づいてアクセスを制限する

リソースへのアクセスを制限して、特定の Google Cloud プロジェクトと関連するテナント プロジェクトからのリクエストのみを許可できます。プロジェクト ベースのアクセス制限は、 Google Cloud プロジェクトに属する非人間の ID であるWorkload Identity によるインタラクションを保護するのに役立ちます。ワークロード ID には、サービス アカウント、Workload Identity 連携 ID、マネージド ワークロード ID、エージェント ID が含まれます。

次の式では、リクエストが projects/123456789 から送信された場合にアクセスを許可します。

originatesFromProjects(origin, ["projects/123456789"])

Workload Identity のアクセスを独自のネットワーク プロジェクトに制限する

ワークロード ID を制限して、ワークロード ID を所有する Google Cloud プロジェクトに関連付けられているネットワークからのリクエストのみを行うようにできます。プロジェクトは、最上位プロジェクトまたは最上位プロジェクトのテナント プロジェクトにできます。プロジェクトベースのアクセス制限は、Workload Identity のやり取りを保護するのに役立ちます。originatesFromProjects とは異なり、式でプロジェクト番号を指定する必要がないため、複数のプロジェクトで同じアクセスレベルを再利用できます。

次の式では、発信元のネットワーク プロジェクト(または関連付けられたテナント プロジェクト)が、呼び出し元の Workload Identity を所有するプロジェクトと一致する場合にアクセス権を付与します。

request.auth.matchesNetworkProject(origin)