ベーシック アクセスレベルの作成

このページでは、ベーシック アクセスレベルの作成方法ついて説明します。カスタム アクセスレベルを作成して Google Cloud Console で詳細モードを使用するには、カスタム アクセスレベルの作成をご覧ください。

このページでは、アクセスレベルの具体的な実装方法について説明します。次の例をご覧ください。

始める前に

ベーシック アクセスレベルを作成する

コンソール

ベーシック アクセスレベルを作成するには:

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

    [Access Context Manager] ページを開く

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

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

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

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

    2. [条件] セクションで、追加する属性のタイプの追加ボタンをクリックし、その属性に適用する値を指定します。

      追加できる属性の完全なリストについては、アクセスレベルの属性をお読みください。

      たとえば、ネットワーク内のどこからリクエストが発信されているかをアクセスレベルで考慮する場合は、[IP サブネットワーク] 属性を選択します。

      同じ条件に複数の属性を追加するには、この手順を繰り返します。 条件に複数の属性を設定した場合は、それらすべての属性を満たしているアクセス リクエストのみが対象になります。

      アクセスレベル条件には、それぞれの属性タイプを 1 つずつ指定できます。[Device Policy] 属性などの一部の属性では、追加オプションも設定できます。

      アクセスレベルでは、ユーザー ID に基づく条件がサポートされています。ただし、条件に ID を追加するには、gcloud CLI または API を使用してアクセスレベルを作成または更新する必要があります。

    3. [条件が満たされている場合に返す] オプションを使用して、リクエストが指定された属性をすべて満たすことを条件とするかどうか(TRUE)、またはリクエストがこれらの属性以外を満たす必要があるかどうか(FALSE)を設定します。

      たとえば、ネットワークの特定の IP アドレス範囲からのリクエストを拒否する場合は、IP サブネットワーク属性を使用して IP アドレス範囲を指定し、条件を FALSE に設定します。

    4. 必要に応じて、[ADD ANOTHER CONDITION] をクリックしてアクセスレベルに条件を追加してから、前の 2 つの手順を繰り返します。

      たとえば、より広い IP アドレス範囲内の IP アドレスのサブセットへのアクセスを拒否する場合は、新しい条件を作成し、IP サブネットワーク属性にサブセット IP アドレス範囲を指定して、FALSE を返すように条件を設定します。

      同じアクセスレベルに複数の条件を追加するには、この手順を繰り返します。

    5. 複数の条件を作成した場合は、[Combine condition with] を使用して、アクセスレベルで 1 つの条件のみ(OR)、またはすべての条件(AND)を満たすリクエストが必要かどうかを指定します。

    6. [保存] をクリックします。

gcloud

始める前に

gcloud コマンドライン ツールを使用してアクセスレベルを作成するには、gcloud access-context-manager levels create コマンドを使用します。

gcloud access-context-manager levels create LEVEL_NAME OPTIONS \
    --policy=POLICY

ここで

  • LEVEL_NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。名前は、最大 50 文字です。

  • OPTIONS は必須オプションです。次の表に示す複数のオプションから構成されます。

    オプション
    basic-level-spec

    アクセスレベルの 1 つ以上の条件を指定する YAML ファイル

    title

    アクセスレベルの短いタイトル。アクセスレベルのタイトルは Google Cloud コンソールに表示されます。

    combine-function

    (省略可)条件を組み合わせる方法を指定します。

    有効な値: ANDOR

    description

    (省略可)アクセスレベルの詳細な説明。

  • POLICY は、組織のアクセス ポリシーの ID です。デフォルトのポリシーが設定されている場合、このパラメータは省略できます。

必要に応じて、gcloud の各フラグを含めることもできます。

basic-level-spec YAML ファイル

gcloud コマンドライン ツールを使用してアクセスレベルを作成するときは、basic-level-spec オプションに YAML ファイルを指定する必要があります。YAML ファイルは、アクセスレベルの 1 つ以上の条件を定義します。条件には少なくとも 1 つの属性を含める必要があります。条件に複数の属性が含まれる場合、AND 演算(すべてが true であること)または NAND 演算(true を含めないこと)として組み合わせてることができます。これは、条件に negate 属性が含まれているかどうかによって異なります。

YAML ファイルに含めることが可能な属性の完全なリストについては、アクセスレベルの属性をお読みください。

アクセスレベルと YAML の詳細については、アクセスレベルの YAML の例をご覧ください。

コマンドの例

gcloud access-context-manager levels create Device_Trust \
    --basic-level-spec=corpdevspec.yaml \
    --combine-function=AND \
    --description='Access level that conforms to corporate spec.' \
    --title='Device_Trust Extended' \
    --policy=1521580097614100

API

始める前に

アクセスレベルを作成するには、accessLevels.create を呼び出します。

POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY/accessLevels

ここで

  • POLICY は、組織のアクセス ポリシーの ID です。

リクエストの本文

リクエスト本文には、新しいアクセスレベルに必要な条件を指定する AccessLevel リソースを含める必要があります。 それぞれの Condition に、AND 演算(すべて true であること)または NAND 演算(true を含めないこと)として評価される属性が 1 つ以上含まれます。これは、negate フィールドが true に設定されているかどうかによって異なります。結果の評価により、条件が満たされているかどうかが判別されます。

レスポンスの本文

成功した場合は、呼び出しのレスポンス本文に Operation リソースが含まれ、これにより POST オペレーションの詳細がわかります。

実装の例

次の例では、組織がアクセスレベルを実装する際に採用できる、いくつかの実用的な手法について説明します。こうした例では、組織がすでにアクセス ポリシーを実施していることを想定しています。

企業ネットワークへのアクセスを制限する

この例では、指定された範囲の IP アドレス(企業ネットワーク内のアドレスなど)からのアクセスのみを許可するアクセスレベル条件の作成方法について説明します。

アクセスが許可される IP アドレスの範囲を制限することで、組織の内外にいる攻撃者がデータを入手することを困難にします。

この例では、sensitive-data という名前のプロジェクトの Cloud Logging サービスに、内部監査者のグループがアクセスできるようなアクセスレベルを作成すると仮定します。監査者用のすべてのデバイスには、203.0.113.0 から 203.0.113.127 の範囲にあるサブネット上の IP が割り当てられています。監査者が使用しているデバイス以外は、そのサブネットに割り当てられません。

プライベート IP アドレス範囲(192.168.0.0/16172.16.0.0/12 など)を使用する場合は、追加情報と VPC Service Controls を使用した実装例について、内部 IP アドレスから保護されたリソースへのアクセスを許可するをご覧ください。

コンソール

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

    [Access Context Manager] ページを開く

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

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

  4. [新しいアクセスレベル] パネルの [条件] セクションで、[属性を追加]、[IP サブネットワーク] の順にクリックします。

  5. [IP サブネットワーク] ボックスで、[パブリック IP] または [プライベート IP] を選択します。

    • [パブリック IP] を選択した場合は、CIDR ブロックとしてフォーマットされた 1 つ以上の IPv4 または IPv6 の範囲を入力します。

      この例では、アクセス権を監査者だけに制限するために、[IP サブネットワーク] ボックスに「203.0.113.0/25」と入力します。

    • [プライベート IP] を選択した場合は、[VPC ネットワークを選択] をクリックします。VPC ネットワークは、[インポート オプション] リストで使用可能な 3 つのオプションのいずれかを使用して指定できます。

      • オプション 1:

        1. [組織内の VPC ネットワークを参照] を選択し、VPC ネットワークを選択します。

        2. [選択した VPC ネットワークを追加] をクリックします。

        3. [IP サブネットを選択] をクリックし、サブネットを選択します。

        4. [IP サブネットを追加] をクリックします。

      • オプション 2:

        1. [VPC ネットワーク アドレスを手動で入力] を選択し、1 つ以上の VPC ネットワークを入力します。

        2. [VPC ネットワークを追加] をクリックします。

        3. [IP サブネットを選択] をクリックし、サブネットを選択します。

        4. [IP サブネットを追加] をクリックします。

      • オプション 3:

        1. CSV ファイルのアップロード(既存のネットワークの上書き)を選択します。

          CSV ファイルを使用して VPC ネットワークとサブネットをアクセスレベルに追加すると、Access Context Manager によって、以前に選択した VPC ネットワークとサブネットが上書きされます。

        2. [参照] をクリックして、CSV ファイルをアップロードします。CSV ファイルで、VPC ネットワークとサブネットを次の形式で指定する必要があります。

          VPC_NETWORK_NAME_1       | IP_RANGE_1       | IP_RANGE_2       | ...
          VPC_NETWORK_NAME_2       | .                | .                | ...
          .                        | .                | .                | ...
          .                        | .                | .                | ...
          
        3. [ネットワークをインポート] をクリックします。

          Access Context Manager は CSV ファイルを使用して、VPC ネットワーク名とサブネット情報をそれぞれ [VPC ネットワーク アドレス] ボックスと [IP サブネットワーク] ボックスに入力します。

      VPC ネットワーク名とプライベート IP アドレス形式については、アクセスレベルで内部 IP アドレスを使用するをご覧ください。

  6. [保存] をクリックします。

gcloud

  1. CIDRブロックとしてフォーマットされた 1 つ以上の IPv4 または IPv6 の範囲が含まれるアクセスレベルの YAML ファイルを作成します。

    この例では、アクセス権を監査者だけに制限するために、YAML ファイルに次のように入力します。

    - ipSubnetworks:
      - 203.0.113.0/25
    

    プライベート IP アドレスを使用する場合は、YAML ファイルに次の情報を入力する必要があります。

    - vpcNetworkSources:
      - vpcSubnetwork:
          network: VPC_NETWORK_NAME
          vpcIpSubnetworks:
          - IP_RANGE
    

    VPC_NETWORK_NAMEIP_RANGE は、アクセスレベルで内部 IP アドレスを使用するセクションで説明されている値に置き換えます。

  2. ファイルを保存します。この例では、ファイルの名前は CONDITIONS.yamlCONDITIONS.yaml です。

  3. アクセスレベルを作成します。

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

    • POLICY は、組織のアクセス ポリシーの ID です。デフォルトのポリシーが設定されている場合、このパラメータは省略できます。

    次のような出力が表示されます。

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. CIDR ブロックとしてフォーマットされた 1 つ以上の IPv4 または IPv6 の範囲が含まれる AccessLevel リソース用のリクエスト本文を作成します。

    この例では、アクセス権を監査者だけに制限するために、リクエスト本文に次のように入力します。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         }
       ]
     }
    }
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

    プライベート IP アドレスを使用する場合は、リクエスト本文に次の情報を入力する必要があります。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "vpcNetworkSources": [
            {
              "vpcSubnetwork": {
                "network": VPC_NETWORK_NAME,
                "vpcIpSubnetworks": [
                  IP_RANGE
                ]
              }
            }
           ]
         }
       ]
     }
    }
    

    VPC_NETWORK_NAMEIP_RANGE は、アクセスレベルで内部 IP アドレスを使用するセクションで説明されている値に置き換えます。

  2. accessLevels.create を呼び出してアクセスレベルを作成します。

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY/accessLevels
    

    ここで

    • POLICY は、組織のアクセス ポリシーの ID です。

デバイスの属性によってアクセスを制限する

この例では、特定のオペレーティング システム(OS)バージョンなど、指定された一連の要件を満たすデバイスにのみアクセスを許可するアクセスレベルの作成方法について説明します。

デバイスに関する情報は、Endpoint Verification 経由で Access Context Manager に提供されます。 アクセスを許可するかどうかを決定するときに、次の条件を確認できます。

  • 画面ロックが有効であること
  • ストレージ暗号化が有効であること
  • デバイスで、指定された種類とバージョンのオペレーティング システムが稼働していること

この例では、組織で Chrome OS または Windows のいずれかがインストールされているコンピュータのみを使用しているとします。セキュリティのレイヤを追加するには、他のオペレーティング システムを使用している人物によるアクセスを防止するアクセスレベルを作成します。さらに、リスクを管理するために、特定のバージョンの OS だけがアクセスできるようにする必要があります。

コンソール

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

    [Access Context Manager] ページを開く

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

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

  4. [新しいアクセスレベル] パネルの [条件] セクションで、[属性を追加]、[Device Policy] の順にクリックします。

  5. デバイス ポリシー属性を追加します。

    1. [OS ポリシーを追加]、[Chrome OS ポリシー] の順にクリックします。

    2. [Minimum version] ボックスに、許可する Chrome OS の最小バージョンを入力します。

    3. [Windows OS ポリシー] に対して手順 1 と 2 を繰り返します。

  6. [保存] をクリックします。

gcloud

  1. OS の制約があるデバイス ポリシーが含まれるアクセスレベルの YAML ファイルを作成します。

    この例では、Chrome OS と Windows の最小許容バージョンのデバイスのみを許可するために、YAML ファイルに次のように入力します。

    - devicePolicy:
        osConstraints:
          - osType: DESKTOP_CHROME_OS
            minimumVersion: 11316.165.0
          - osType: DESKTOP_WINDOWS
            minimumVersion: 10.0.1809
    
  2. ファイルを保存します。この例では、ファイルの名前は CONDITIONS.yamlCONDITIONS.yaml です。

  3. アクセスレベルを作成します。

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

    • POLICY は、組織のアクセス ポリシーの ID です。デフォルトのポリシーが設定されている場合、このパラメータは省略できます。

    次のような出力が表示されます。

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. OS の制約があるデバイス ポリシーが含まれる AccessLevel リソース用のリクエスト本文を作成します。

    この例では、Chrome OS と Windows の最小許容バージョンのデバイスのみを許可するために、リクエスト本文に次のように入力します。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "devicePolicy": {
             "osConstraints": [
               {
                 "osType": "DESKTOP_CHROME_OS",
                 "minimumVersion": "11316.165.0"
               },
               {
                 "osType": "DESKTOP_WINDOWS",
                 "minimumVersion": "10.0.1809"
               }
             ]
           {
         }
       ]
     }
    }
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

  2. accessLevels.create を呼び出してアクセスレベルを作成します。

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY/accessLevels
    

    ここで

    • POLICY は、組織のアクセス ポリシーの ID です。

ユーザーまたはサービス アカウントによるアクセスを許可する

ID に基づくアクセス許可は、サービス アカウントと組み合わせて使用すると便利です。たとえば、Cloud Functions でデータにアクセスできるようになります。

この例では、既存のアクセスレベルを含め、ネストしたアクセスレベルの例を示しながら、特定のユーザーとサービス アカウントにアクセス権を付与する方法について説明します。この場合、指定したユーザーは、既存のアクセスレベルで指定された条件を満たしているかどうかにかかわらず、このアクセスレベルに含まれます。この新しいアクセスレベルは、既存のアクセスレベルよりも制限が緩い階層と見なすことができます。

コンソール

現在、Google Cloud コンソールでは、アクセスレベルへのプリンシパルの追加はサポートされていません。アクセスレベルにプリンシパルを追加するには、gcloudgcloud コマンドライン ツールまたは API を使用する必要があります。

gcloud

  1. アクセスを許可するプリンシパルを一覧表示する条件が含まれる YAML ファイルを作成します。

    この例では、システム管理者(sysadmin@example.com)とサービス アカウント(service@project.iam.gserviceaccount.com)を追加します。

    - members:
        - user:sysadmin@example.com
        - serviceAccount:service@project.iam.gserviceaccount.com
    
  2. このアクセスレベルに含める既存のアクセスレベルを一覧表示する条件を追加します。

    この例では、アクセスレベルの名前が Device_TrustIP_Trust であり、247332951433 がアクセス ポリシーの名前であると仮定しています。

    - members:
        - user:sysadmin@example.com
        - serviceAccount:service@project.iam.gserviceaccount.com
    
    - requiredAccessLevels:
        - accessPolicies/247332951433/accessLevels/Device_Trust
        - accessPolicies/247332951433/accessLevels/IP_Trust
    
  3. ファイルを保存します。この例では、ファイルの名前は CONDITIONS.yamlCONDITIONS.yaml です。

  4. create コマンドを使用してアクセスレベルを作成します。

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --combine-function=OR \
       --policy=POLICY
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

    • POLICY は、組織のアクセス ポリシーの ID です。デフォルトのポリシーが設定されている場合、このパラメータは省略できます。

    • combine-functionOR に設定されています。デフォルト値 AND では、アクセスレベルが付与される前にすべての条件が満たされる必要があります。他の条件が満たされていない場合でも、OR 値によってプリンシパルにアクセス権が付与されます。

    次のような出力が表示されます。

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. アクセスを許可するプリンシパルを一覧表示する条件が含まれる、AccessLevel リソース作成用のリクエスト本文を作成します。

    この例では、システム管理者(sysadmin@example.com)とサービス アカウント(service@project.iam.gserviceaccount.com)を追加します。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "members": [
             "user:sysadmin@example.com",
             "serviceAccount:service@project.iam.gserviceaccount.com"
           ]
         }
       ]
     }
    }
    

    ここで

    • NAME はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。

    • TITLE は人が読める形式のタイトルです。タイトルはポリシーに固有のものでなければなりません。

  2. このアクセスレベルに含める既存のアクセスレベルを一覧表示する条件を追加します。

    この例では、アクセスレベルの名前が Device_TrustIP_Trust であり、247332951433 がアクセス ポリシーの名前であると仮定しています。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "members": [
             "user:sysadmin@example.com",
             "serviceAccount:service@project.iam.gserviceaccount.com"
           ]
         },
         {
           "requiredAccessLevels": [
             "accessPolicies/247332951433/accessLevels/Device_Trust",
             "accessPolicies/247332951433/accessLevels/IP_Trust"
           ]
         }
       ]
     }
    }
    
  3. combiningFunctionOR に設定する。

    combiningFunction のデフォルト値である AND では、アクセスレベルが付与される前に、すべての条件が満たされる必要があります。IP アドレスや、その他の必須アクセスレベルから継承された条件など、他の条件が満たされていない場合でも、OR 値によってプリンシパルにアクセス権が付与されます。

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "members": [
             "user:sysadmin@example.com",
             "serviceAccount:service@project.iam.gserviceaccount.com"
           ]
         },
         {
           "requiredAccessLevels": [
             "accessPolicies/247332951433/accessLevels/Device_Trust",
             "accessPolicies/247332951433/accessLevels/IP_Trust"
           ]
         }
       ],
       "combiningFunction": "OR"
     }
    }
    
  4. accessLevels.create を呼び出してアクセスレベルを作成します。

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY/accessLevels
    

    ここで

    • POLICY は、組織のアクセス ポリシーの ID です。