ユーザー グループに対する証明書ベースのアクセスを適用する

このページでは、ユーザー グループに基づくコンテキストアウェア アクセス ポリシーを使用して証明書ベースのアクセス(CBA)を適用する方法について説明します。

CBA アクセスレベルをユーザー グループにバインドすることで、すべての Google Cloud サービスへのアクセスを制限できます。この制限は、 Google Cloud API を呼び出すすべてのクライアント アプリケーションに適用されます。

必要に応じて、制限を特定のクライアント アプリケーションに適用したり、特定のアプリケーションを除外したりできます。アプリケーションには、サードパーティ製アプリケーションと、Google が構築したファーストパーティ製アプリケーション( Google Cloud コンソールの Cloud Console、Google Cloud CLI の Google Cloud SDK など)の両方が含まれます。

始める前に

リソースへのアクセスを決定するときに証明書を必要とする CBA アクセスレベルを作成します。

ユーザー グループの作成

CBA アクセスレベルに基づいてアクセス権を付与するメンバーを含むユーザー グループを作成します。

Cloud アクセス バインディング管理者ロールを割り当てる

ユーザー グループに Cloud アクセス バインディング管理者ロールを割り当てます。

組織レベルで IAM 権限を追加するのに十分な権限が必要です。少なくとも、組織管理者ロールと Cloud アクセス バインディング管理者ロールが必要です。

コンソール

  1. コンソールで [IAM] に移動します。

    [IAM] に移動

  2. [権限] タブで [アクセスを許可] をクリックし、次のように構成します。

    1. [新しいプリンシパル]: ロールを付与するグループを指定します。
    2. [ロールを選択] オプションで、[Access Context Manager > Cloud アクセス バインディング管理者] を選択します。
    3. [保存] をクリックします。

gcloud

  1. ログイン:

    gcloud auth login
    
  2. 次のコマンドを実行して GcpAccessAdmin ロールを割り当てます。

    gcloud organizations add-iam-policy-binding ORG_ID \
      --member=user:EMAIL \
      --role=roles/accesscontextmanager.gcpAccessAdmin
    
    • ORG_ID は、組織 ID です。組織 ID を把握していない場合は、次のコマンドを使用して確認できます。

       gcloud organizations list
      
    • EMAIL は、ロールを付与するユーザーまたはグループのメールアドレスです。

CBA アクセスレベルをユーザー グループにバインドする

このバインド オプションでは、CBA アクセスレベルは、指定したユーザー グループのすべてのクライアント アプリケーションに適用されます。

  1. コンソールで、[コンソールと API のアクセス ポリシー] ページに移動します。

    [コンソールと API のアクセス ポリシー] に移動

  2. 組織を選択して、[選択] をクリックします。

  3. [アクセスの管理] をクリックして、アクセスを許可するユーザー グループを選択します。

  4. [追加] をクリックして、以下を構成します。

    1. [メンバー グループ]: アクセス権を付与するグループを指定します。選択できるのは、アクセスレベルにまだバインドされていないグループのみです。
    2. [アクセスレベルの選択]: グループに適用する CBA アクセスレベルを選択します。
    3. [保存] をクリックします。

CBA アクセスレベルをユーザー グループと特定のアプリケーションにバインドする

クライアント証明書をサポートするアプリケーションなど、一部のユースケースでは、CBA アクセスレベルをユーザー グループにバインドすると範囲が広くなりすぎる場合があります。このオプションを使用すると、クライアント証明書をサポートするアプリケーションに CBA アクセスレベルを適用できます。

次の例では、CBA アクセスレベルを Google Cloud コンソール、gcloud CLI、ユーザーの OAuth アプリケーションにバインドします。

  1. gcloud CLI にログインします。

    gcloud auth application-default login
    
  2. policy_file.yaml ファイルを作成します。

    アプリケーションは、OAuth クライアント ID を使用して指定できます。Google アプリケーションを指定するには、アプリケーション名(Google Cloud コンソールの場合は Cloud Console など)を使用します。 Google Cloud コンソールと Google Cloud SDK の Google アプリケーションのみがサポートされています。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: Cloud Console
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            name: Google Cloud SDK
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID_1
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    

    次のように置き換えます。

    • CLIENT_ID_1: OAuth クライアント ID。
    • CBA_ACCESS_LEVEL: CBA アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
  3. CBA アクセスレベル バインディングを作成します。

    gcloud access-context-manager cloud-bindings create \
       --group-key='GROUP_KEY' \
       --organization='ORG_ID' \
       --binding-file=policy_file.yaml
    

    次のように置き換えます。

    • GROUP_KEY: 一意のグループ ID
    • ORG_ID: 組織 ID

    gcloud

    一意のグループ ID を GROUP_KEY として使用できます。一意のグループ ID を取得するには、次のコマンドを使用します。

    gcloud identity groups describe EMAIL
    

    EMAIL はグループのメールアドレスに置き換えます。一意のグループ ID は、グループ名の / の後に返される値です。たとえば、groups/01gf8i8311xalqg の一意のグループ ID は 01gf8i8311xalqg です。

    REST

    一意のグループ ID を GROUP_KEY として使用できます。REST API を使用して一意のグループ ID を取得するには、グループ リソースの get メソッドを呼び出して取得します。一意のグループ ID は、グループ リソースの id フィールドに返されます。

  4. 省略可: 既存のアクセスレベル バインディングを更新します。

    gcloud access-context-manager cloud-bindings update \
       --binding='BINDING_NAME' \
       --binding-file=policy_file.yaml
    

    BINDING_NAME は、バインディングの作成時に自動生成されたバインディング名に置き換えます。

アプリケーションをバインディングから除外する

クライアント証明書をサポートしていないクライアント アプリケーションをブロックせずに CBA アクセスレベルを適用するもう 1 つの方法は、これらのアプリケーションをポリシーから除外することです。

次の手順では、リソースへのアクセスを決定するときに証明書を必要とする CBA アクセスレベルが作成済みであることを前提としています。

  1. 次のいずれかの方法で除外アクセスレベルを作成します。

  2. exemption_file.yaml ファイルを作成します。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID_2
      activeSettings:
        accessLevels:
        - EXEMPT_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            name: APPLICATION_NAME_2
      activeSettings:
        accessLevels:
        - EXEMPT_ACCESS_LEVEL
    

    次のように置き換えます。

    • CLIENT_ID_2: OAuth クライアント ID
    • APPLICATION_NAME_2: アプリケーション名
    • EXEMPT_ACCESS_LEVEL: accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME 形式の除外アクセスレベル名。
  3. 除外バインディング ポリシーを作成します。

    gcloud access-context-manager cloud-bindings create \
       --group-key='GROUP_KEY' \
       --organization='ORG_ID' \
       --binding-file=exemption_file.yaml
    

    次のように置き換えます。

    • GROUP_KEY: 一意のグループ ID
    • ORG_ID: 組織 ID