アクセス バインディングを使用してユーザー グループにポリシーを適用する

アクセス バインディングを使用すると、ユーザー グループがアクセスできるアプリケーションとリソースを制御できます。アクセス バインディングは、アクセスレベルとセッション管理をユーザー グループに適用する方法を指定します。すべてのアプリケーションに同じアクセスレベルとセッション管理を適用することも、個々のアプリケーションに特定の動作を定義することもできます。

すべてが正しく構成されていることを確認するには、ポリシーを適用する前にテストします。

アクセス バインディングを使用する場合は、次の動作に注意してください。

  • ユーザー グループに設定できるアクセス バインディングは 1 つだけです。
  • ユーザーが複数のグループに属している場合、そのユーザーにアクセス権を付与するには、いずれかのポリシーでアクセスを許可します(AND ではなく OR)。
  • セッション制御の場合、最近作成されたアクセス バインディングのみが適用されます。

すべてのアプリケーションに単一の構成を使用する

この方法では、ユーザー グループがアクセスするすべてのアプリケーションに同じアクセスレベルとセッション管理が適用されます。

本番環境に実装する前に、ドライランでポリシーをテストするか、少数のテストグループに適用することをおすすめします。

gcloud

アクセス バインディングを作成します。

gcloud access-context-manager cloud-bindings create \
     --group-key GROUP_ID
     --organization ORG_ID
     --level DEFAULT_ACCESS_LEVEL
  [  --session-length=DEFAULT_SESSION_LENGTH                ]
  [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]

以下を置き換えます。

  • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
  • ORG_ID: 組織の ID。
  • DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。POLICY_ID はアクセス ポリシー ID に、ACCESS_LEVEL_NAME はアクセスレベル名に置き換えます。
  • DEFAULT_SESSION_LENGTH: ISO 8601 Duration 形式で指定するオプションのセッション継続時間(30 分の場合は 30m、2 時間の場合は 2h など)。
  • DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人の再確認を求めるオプションのメソッド。次のいずれかである必要があります。
    • LOGIN: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。
    • PASSWORD: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが公開されている場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合、ユーザーは IdP 経由でログインする必要があります。
    • SECURITY_KEY: ハードウェア セキュリティ キーが必要。

API

  1. JSON 本文を作成します。

    {
      "groupKey": "GROUP_ID",
      "accessLevels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
      // optional:
      "sessionSettings": {
        "sessionLength": "DEFAULT_SESSION_LENGTH",
        "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD"
      }
    }
    

    以下を置き換えます。

    • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
    • DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。POLICY_ID はアクセス ポリシー ID に、ACCESS_LEVEL_NAME はアクセスレベル名に置き換えます。
    • DEFAULT_SESSION_LENGTH: ISO 8601 Duration 形式で指定するオプションのセッション継続時間(30 分の場合は 30m、2 時間の場合は 2h など)。
    • DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人の再確認を求めるオプションのメソッド。次のいずれかである必要があります。
      • LOGIN: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。
      • PASSWORD: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが公開されている場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合、ユーザーは IdP 経由でログインする必要があります。
      • SECURITY_KEY: ハードウェア セキュリティ キーが必要。
  2. POST リクエストを送信します。

    POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID は、Cloud アクセス バインディング管理者ロールの作成に使用した組織の ID です。access-context-manager/organization プロパティが設定されていない場合は、オプションの --organization フラグの ORG_ID を、Cloud Access Binding 管理者ロールを作成した際に使用した組織用の ID と置き換えてください。

成功すると、JSON オブジェクトの表現が返されます。問題がある場合は、エラー メッセージが表示されます。

特定のアプリケーションの構成を定義する

この方法では、アプリケーションごとに異なるアクセスレベルとセッション管理を適用できます。特定の構成がないアプリケーションのデフォルト ルールを設定することもできます。このメソッドは、次の操作を行う場合に便利です。

  • 特定のアプリケーションにのみポリシーを適用する。
  • 一般的なポリシーを作成し、一部のアプリケーションを除外する。

gcloud

  1. scopedAccessSettings リスト内のスコープ エントリのリストを含む YAML 形式のバインディング ファイルを作成します。特定のアクセスレベルにマッピングするアプリケーションごとに、clientScope エントリを含めます。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
        sessionSettings:
        - sessionLength: SESSION_LENGTH
          sessionReauthMethod: SESSION_REAUTH_METHOD
          sessionLengthEnabled: true
    - scope:
        clientScope:
          restrictedClientApplication:
            #
            # because this app is specified by `name`,
            # it won't work with sessionSettings.
            #
            # if you add sessionSettings, make sure to
            # replace the `name` key with `clientId`,
            # and use the OAuth client ID as the value.
            #
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_B
    

    以下を置き換えます。

    • CLIENT_ID: OAuth クライアント ID。アプリケーションに sessionSettings が含まれている場合は、clientId を使用する必要があります。
    • ACCESS_LEVEL_A: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • SESSION_LENGTH: ISO 8601 Duration 形式で指定するオセッション継続時間(30 分の場合は 30m、2 時間の場合は 2h など)。
    • SESSION_REAUTH_METHOD: ユーザーに本人の再確認を求めるオプションのメソッド。次のいずれかである必要があります。

      • LOGIN: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。
      • PASSWORD: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが公開されている場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合、ユーザーは IdP 経由でログインする必要があります。
      • SECURITY_KEY: ハードウェア セキュリティ キーが必要。
    • CLIENT_NAME: クライアント名。アプリケーションに sessionSettings が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。

    • ACCESS_LEVEL_B: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。

    YAML ファイルで定義されていないアプリケーションのデフォルトのアクセスレベルを設定するには、--level 引数を使用します。YAML ファイルは、アプリケーション固有の設定(scopedAccessSettings)のみをサポートしています。

  2. アクセス バインディングを作成します。

    gcloud access-context-manager cloud-bindings create
        --organization ORG_ID
        --group-key GROUP_ID
        --binding-file BINDING_FILE_PATH
      [  --level DEFAULT_ACCESS_LEVEL ]
      [  --session-length=DEFAULT_SESSION_LENGTH                ]
      [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]
    

    以下を置き換えます。

    • ORG_ID: 組織の ID。
    • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
    • BINDING_FILE_PATH: アクセス バインディング スキームを含む YAML ファイルのパス。バインディング ファイルは scopedAccessSettings のみをサポートしています。
    • DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。POLICY_ID はアクセス ポリシー ID に、ACCESS_LEVEL_NAME はアクセスレベル名に置き換えます。
    • DEFAULT_SESSION_LENGTH: ISO 8601 Duration 形式で指定するオプションのセッション継続時間(30 分の場合は 30m、2 時間の場合は 2h など)。
    • DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人の再確認を求めるオプションのメソッド。次のいずれかである必要があります。
      • LOGIN: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。
      • PASSWORD: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが公開されている場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合、ユーザーは IdP 経由でログインする必要があります。
      • SECURITY_KEY: ハードウェア セキュリティ キーが必要。

--level 引数と --binding-file 引数の連携の仕組み

  • --binding-file のみを使用する場合、ファイル内のアプリケーションにのみポリシーが適用されます。
  • --level のみを使用する場合、アクセスレベルはすべてのアプリケーションに適用されます。
  • 両方を使用すると、ルールが結合されます。--level 値はすべてのアプリケーションに適用されますが、--binding-file で指定された YAML ファイル内のポリシーは、ファイルで定義されているアプリケーションにのみ適用されます。

セッション管理の操作

  • すべてのアプリケーションにデフォルトのセッション管理を設定するには、--session-length--session-reauth-method を使用します。
  • YAML ファイルでセッション管理も定義すると、それらのセッション管理によって、特定のアプリケーションのデフォルト設定がオーバーライドされます。
  • --session-length--session-reauth-method の両方を使用する必要があります。

API

JSON 本文を作成します。

{
  "groupKey": "GROUP_ID",
   //
   // Optional; if specified, all applications that aren't defined in
   // scopedAccessSettings have these access levels applied.
   //
   // If more than one access level is specified, the user is
   // granted access if any one resolves to TRUE (OR logic, not AND).
   //
   // If you omit this key entirely, then no policy enforcement is
   // applied by default.
   //
  "accessLevels": [
    "DEFAULT_ACCESS_LEVEL"
  ],
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "clientId": "CLIENT_ID"
          }
        }
      },
      "activeSettings": {
        "accessLevels": [
          "ACCESS_LEVEL_A"
        ],
        "sessionSettings": [
          {
            "sessionLength": "SESSION_LENGTH",
            "sessionReauthMethod": "SESSION_REAUTH_METHOD",
            "sessionLengthEnabled": true
          }
        ]
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "CLIENT_NAME"
          }
        },
        "activeSettings": {
          "accessLevels": [
            "ACCESS_LEVEL_B"
          ]
        }
      }
    }
  ]
}

以下を置き換えます。

  • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
  • DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。POLICY_ID はアクセス ポリシー ID に、ACCESS_LEVEL_NAME はアクセスレベル名に置き換えます。
  • CLIENT_ID: OAuth クライアント ID。アプリケーションに sessionSettings が含まれている場合は、clientId を使用する必要があります。
  • ACCESS_LEVEL_A: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
  • SESSION_LENGTH: ISO 8601 Duration 形式で指定するオセッション継続時間(30 分の場合は 30m、2 時間の場合は 2h など)。
  • SESSION_REAUTH_METHOD: ユーザーに本人の再確認を求めるオプションのメソッド。次のいずれかである必要があります。

    • LOGIN: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。
    • PASSWORD: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが公開されている場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合、ユーザーは IdP 経由でログインする必要があります。
    • SECURITY_KEY: ハードウェア セキュリティ キーが必要。
  • CLIENT_NAME: クライアント名。アプリケーションに sessionSettings が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。

  • ACCESS_LEVEL_B: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。

POST リクエストを送信します。

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

ORG_ID は、Cloud アクセス バインディング管理者ロールの作成に使用した組織の ID です。access-context-manager/organization プロパティが設定されていない場合は、オプションの --organization フラグの ORG_ID を、Cloud Access Binding 管理者ロールを作成した際に使用した組織用の ID と置き換えてください。

成功すると、JSON オブジェクトの表現が返されます。問題が発生した場合は、エラー メッセージが返されます。

ドライランのアクセスレベルを使用して適用をシミュレートする

ドライラン アクセスレベルを使用すると、アクセス ポリシーを実際に適用せずにテストできます。これにより、ポリシーを公開する前にその影響を把握できます。ドライラン ログを表示して、ポリシーが有効になった場合の動作を確認できます。

ドライラン モードで使用できるのはアクセスレベルのみです。ドライラン モードではセッション管理を使用できません。

ドライラン バインディングを作成する

ドライランのアクセスレベルは、同じバインディングで通常のアクセスレベルとともに定義できます。また、ドライランに別のバインディングを使用することもできます。

gcloud

  1. アクセス設定を構成します。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
      dryRunSettings:
        accessLevels:
        - DRY_RUN_ACCESS_LEVEL_1
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
        dryRunSettings:
          accessLevels:
          - DRY_RUN_ACCESS_LEVEL_2
    

    以下を置き換えます。

    • CLIENT_NAME: クライアント名。アプリケーションに sessionSettings が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。
    • ACCESS_LEVEL_A: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • DRY_RUN_ACCESS_LEVEL_1: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • CLIENT_ID: OAuth クライアント ID。アプリケーションに sessionSettings が含まれている場合は、clientId を使用する必要があります。
    • DRY_RUN_ACCESS_LEVEL_2: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
  2. アクセス バインディングを作成します。

    gcloud access-context-manager cloud-bindings create
      --organization ORG_ID
      --group-key GROUP_ID
      --binding-file BINDING_FILE_PATH
      --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
    

    以下を置き換えます。

    • ORG_ID: 組織の ID。
    • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
    • BINDING_FILE_PATH: アクセス バインディング スキームを含む YAML ファイルのパス。バインディング ファイルは scopedAccessSettings のみをサポートしています。
    • DEFAULT_DRY_RUN_ACCESS_LEVEL_2: オプションのアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。

    このフラグを指定すると、YAML で指定されていない場合、デフォルトで指定されたドライラン アクセスレベルがすべてのアプリケーションに適用されます。

API

  1. JSON 本文を作成します。

    {
      "group_key": "GROUP_ID",
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings have these access levels applied.
       //
       // If more than one access level is specified, the user is
       // granted access if any one resolves to TRUE (OR logic, not AND).
       //
       // If you omit this key entirely, then no policy enforcement is
       // be applied by default.
       //
      "access_levels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings will have these dry run access levels applied.
       //
      "dry_run_access_levels": [
        "DEFAULT_DRY_RUN_ACCESS_LEVEL"
      ],
      "scoped_access_settings": [
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "name": "CLIENT_NAME"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "ACCESS_LEVEL_A"
            ]
          },
          "dry_run_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_1"
            ]
          }
        },
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "client_id": "CLIENT_ID"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_2"
            ]
          }
        }
      ]
    }
    

    以下を置き換えます。

    • GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの get メソッドを呼び出して取得できます。
    • DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。POLICY_ID はアクセス ポリシー ID に、ACCESS_LEVEL_NAME はアクセスレベル名に置き換えます。
    • DEFAULT_DRY_RUN_ACCESS_LEVEL: オプションのアクセスレベル名(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • CLIENT_NAME: クライアント名。アプリケーションに sessionSettings が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。
    • ACCESS_LEVEL_A: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • DRY_RUN_ACCESS_LEVEL_1: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
    • CLIENT_ID: OAuth クライアント ID。アプリケーションに sessionSettings が含まれている場合は、client_id を使用する必要があります。
    • DRY_RUN_ACCESS_LEVEL_2: アクセスレベルの名前(accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME の形式)。
  2. POST リクエストを送信します。

    https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID は、Cloud アクセス バインディング管理者ロールの作成に使用した組織の ID です。access-context-manager/organization プロパティが設定されていない場合は、オプションの --organization フラグの ORG_ID を、Cloud Access Binding 管理者ロールを作成した際に使用した組織用の ID と置き換えてください。

    成功すると、JSON オブジェクトの表現が返されます。問題がある場合は、エラー メッセージが表示されます。

ドライランのログを表示する

ドライランを設定したら、ログを確認して、拒否されたアクセス試行を確認できます。

次の表に、クエリを作成して実行し、ログを取得するために使用できるログフィールドを示します。

フィールド名 説明
protoPayload.authenticationInfo.principalEmail アクセスが拒否されたプリンシパルのメール ID。
protoPayload.metadata.deniedApplications アクセスが拒否されたアプリケーションの名前。
protoPayload.metadata.evaluationResult アクティブなアクセス ポリシーの評価結果。有効な値は GRANTED または DENIED です。
protoPayload.metadata.appliedAccessLevels アクティブなアクセス ポリシーで必要な適用済みのアクセスレベル。
protoPayload.metadata.appliedDryRunAccessLevels ドライランのアクセス ポリシーで必要な適用済みのアクセスレベル。
protoPayload.metadata.dryRunEvaluationResult ドライラン アクセス ポリシーの評価結果。アクセス ポリシーが適用されたときの意図されたアクションを示します。有効な値は GRANTED または DENIED です。

ログのクエリを作成する方法については、Logging のクエリ言語をご覧ください。