限定公開ウェブ アプリケーションへの安全なアクセス

このドキュメントでは、プライベート ウェブ アプリケーションへのアクセスを保護するために Chrome Enterprise Premium セキュア ゲートウェイを設定する方法について説明します。

Chrome Enterprise Premium セキュア ゲートウェイはフォワード プロキシとして機能し、ゼロトラスト アクセス フレームワークを適用して、社内向けウェブ アプリケーションにアクセスするユーザーに対するきめ細かいコンテキストアウェア制御を実現します。

限定公開ウェブ アプリケーションへのアクセスを保護する仕組み

安全なトンネルを確立し、コンテキストアウェア アクセス ポリシーを適用することで、セキュア ゲートウェイは社内向けアプリケーションを限定公開にし、公共のインターネットに公開されないように保護します。これらのアプリケーションのトラフィックは、クライアントサイドのブラウザ設定によって、セキュア ゲートウェイのプロキシ エンドポイントを経由するよう制御されます。次に、セキュア ゲートウェイが関連するアクセス ポリシーを適用し、許可されている場合は、リクエストを宛先アプリケーションにルーティングします。

セキュア ゲートウェイは、次の環境でホストされている社内向けウェブ アプリケーションの保護に役立ちます。

  • Google Cloud プロジェクト: セキュア ゲートウェイは、 Google Cloud VPC ネットワークで実行されているアプリケーションに直接アクセスできます。

  • 非Google Cloud (オンプレミス データセンターまたは他のクラウド): まず、Google Cloud のプライベート VPC ネットワークと非Google Cloud ネットワークの間に接続を確立する必要があります。これは通常、Cloud VPN または Cloud Interconnect を使用して行われます。セキュア ゲートウェイは、この接続を使用してトラフィックを社内向け VPC ネットワークに送信し、社内向け VPC ネットワークはトラフィックを非Google Cloud 環境に転送します。

必要なロール

管理者に次のロールの付与を依頼します。

Identity and Access Management(IAM)ロールの詳細を確認する。

始める前に

セキュア ゲートウェイを設定する前に、次のことを確認してください。

シェル環境の設定

作業シェルで次の環境変数を定義して、設定プロセスを合理化し、セキュア ゲートウェイ API と通信できるようにします。

  • 一般的なパラメータ
    PROJECT_ID=PROJECT_ID
          

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

    • PROJECT_ID: セキュア ゲートウェイが作成されるプロジェクトの ID。
  • セキュア ゲートウェイのパラメータ
    SECURITY_GATEWAY_ID=SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"
          

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

    • SECURITY_GATEWAY_ID: 作成するセキュア ゲートウェイの ID。ID は 63 文字以内で、小文字、数字、ハイフンを使用できます。最初の文字は英字にする必要があります。最後の文字は英字または数字にできます。
    • SECURITY_GATEWAY_DISPLAY_NAME: セキュア ゲートウェイの人が読める形式の名前。名前は最大 63 文字で、印刷可能な文字を含めることができます。

セキュア ゲートウェイを作成する

Chrome Enterprise Premium セキュア ゲートウェイは、アプリケーションへの安全な接続を確立するための基本的な構成要素です。

Console

セキュア ゲートウェイを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[セキュア ゲートウェイ] ページに移動します。
    セキュア ゲートウェイに移動
  2. セキュア ゲートウェイを作成するプロジェクトを選択します。
  3. セキュア ゲートウェイを作成するには、[新しいゲートウェイを作成] をクリックして、ゲートウェイの作成プロセスが完了するまで待ちます。進行状況は、 Google Cloud コンソールの [通知] セクションで確認できます。

gcloud

gcloud を使用してセキュア ゲートウェイを作成するには、次のコマンドを実行します。

gcloud beyondcorp security-gateways create SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --display-name="SECURITY_GATEWAY_DISPLAY_NAME" \
    --service-discovery={}
      

REST

REST API を使用してセキュア ゲートウェイを作成するには、次のコマンドを実行します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{ "display_name": "SECURITY_GATEWAY_DISPLAY_NAME", "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways?security_gateway_id=SECURITY_GATEWAY_ID"
      

プライベート ウェブ アプリケーションを構成する

セキュア ゲートウェイで特定のアプリケーション リソースを定義する前に、接続と適切なルーティングを有効にするために必要な権限とネットワーク設定を構成する必要があります。

サービス アカウントに権限を付与する

VPC ネットワークにトラフィックを正常に送信するには、セキュア ゲートウェイの委任サービス アカウントに特定の IAM 権限が付与されている必要があります。これにより、 Google Cloud VPC 内でホストされているか、Cloud VPN または Cloud Interconnect を介して接続されたGoogle Cloud 環境でホストされているかに関係なく、セキュア ゲートウェイがプライベート アプリケーションにアクセスできるようになります。

サービス アカウントに権限を付与する手順は次のとおりです。

  1. セキュア ゲートウェイの詳細を取得して、委任するサービス アカウントのメールアドレスを特定します。メールアドレスはレスポンスの delegatingServiceAccount フィールドにあります。

    gcloud

    gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
        --project=PROJECT_ID \
        --location=global
                   

    REST

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
                   
  2. サービス アカウントとターゲット VPC プロジェクトの環境変数を設定します。サービス アカウントのメールアドレスを取得するには、次のコマンドを使用します。
    DELEGATING_SERVICE_ACCOUNT=`gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID --project=PROJECT_ID --location=global --format="value(delegatingServiceAccount)"`
          
  3. プライベート VPC プロジェクトの委任サービス アカウントに roles/beyondcorp.upstreamAccess IAM ロールを付与します。
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
        --role=roles/beyondcorp.upstreamAccess \
        --member=serviceAccount:DELEGATING_SERVICE_ACCOUNT
        
    PRIVATE_VPC_PROJECT_ID は、プライベート ウェブアプリがデプロイされている VPC ネットワーク、または Cloud VPN/Interconnect が構成されている VPC ネットワークのプロジェクト ID に置き換えます。

ロールを付与してから Identity and Access Management ポリシーが適用されるまで、約 2 分待ちます。

ネットワーク ルーティングとファイアウォール ルールを構成する

セキュア ゲートウェイからのトラフィックがプライベート ウェブ アプリケーションに到達できるように、ファイアウォール ルール、ネットワーク ルーティング、DNS 設定を構成します。

Google Cloudのアプリケーションのファイアウォール ルール

プライベート ウェブ アプリケーションが Google Cloud VPC ネットワーク内(Compute Engine VM、内部 IP を使用する Google Kubernetes Engine サービス、内部 TCP/UDP ロードバランサの背後など)でホストされている場合は、Google Cloud VPC ファイアウォール ルールを構成します。これにより、セキュア ゲートウェイの IP 範囲 136.124.16.0/20 からの上り(内向き)TCP トラフィックが許可されます。

gcloud

gcloud を使用してファイアウォール ルールを作成するには、次のコマンドを実行します。

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
   --project=PRIVATE_VPC_PROJECT_ID \
   --network=NETWORK_NAME \
   --allow=tcp \
   --source-ranges=136.124.16.0/20
      

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

  • FIREWALL_RULE_NAME: ファイアウォール ルールの名前。
  • PRIVATE_VPC_PROJECT_ID: VPC ネットワークがホストされているプロジェクトの ID。
  • NETWORK_NAME: アプリケーションがホストされている VPC ネットワークの名前。

非Google Cloud 環境のアプリケーションのファイアウォール ルール

プライベート ウェブ アプリケーションがオンプレミス データセンターまたは別のクラウド プロバイダのネットワークに存在し、Cloud VPN または Cloud Interconnect を使用して Google CloudVPC に接続されている場合は、オンプレミス ファイアウォールまたは同等のネットワーク セキュリティ制御(セキュリティ グループやネットワーク ACL など)でファイアウォール ルールを構成します。これにより、セキュア ゲートウェイの IP 範囲 136.124.16.0/20 からの上り(内向き)TCP トラフィックが許可されます。

非Google Cloud 環境からセキュア ゲートウェイへのルーティングを構成する

オンプレミスや他のクラウドなど、Google Cloud 以外の環境でホストされているプライベート アプリケーションの双方向通信を容易にするには、外部ネットワークで次のセキュア ゲートウェイ IP 範囲 136.124.16.0/20 への戻りパスを作成する必要があります。

プライベート ネットワークが Cloud VPN または Cloud Interconnect を介してセキュア ゲートウェイの IP 範囲に到達できることを確認します。

  • 動的ルーティング: Cloud Router で Border Gateway Protocol(BGP)などの動的ルーティングを使用している場合は、Cloud Router がオンプレミス BGP デバイスにセキュア ゲートウェイの IP 範囲を明示的にアドバタイズしていることを確認します。 Google Cloud BGP は多くのルートを動的に交換しますが、セキュア ゲートウェイの IP 範囲には明示的なアドバタイズが必要です。

    gcloud

    送信元範囲がアドバタイズされているかどうかを確認するには、次のコマンドを実行します。

    gcloud compute routers list-bgp-routes ROUTER_NAME \
    --peer=PEER_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --route-direction=OUTBOUND \
    --address-family=IPV4 \
    --destination-range=136.124.16.0/20
          

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

    • ROUTER_NAME: Cloud Router の名前。
    • PEER_NAME: BGP ピアの名前。
    • REGION: ルーターが配置されているリージョン。
    • PROJECT_ID: ルーターを含むプロジェクトの ID。
  • 静的ルーティング: 静的ルートを使用している場合は、ルーターやファイアウォールなどのオンプレミス ネットワーク機器で、セキュア ゲートウェイの各 IP 範囲のルートを手動で追加する必要があります。これらの静的ルートでは、セキュア ゲートウェイの IP 範囲宛てのトラフィックが Cloud VPN または Cloud Interconnect 接続を介して送信されるように指定する必要があります。

    静的ルーティングを使用する場合、Cloud VPN は次のサポートされているリージョンのいずれかに存在する必要があります。

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

セキュア ゲートウェイのプライベート ホスト名の解決のための DNS 構成

セキュア ゲートウェイでプライベート アプリケーションのホスト名を解決するには、Google Cloud VPC ネットワークで Cloud DNS を使用してホスト名を解決できる必要があります。Cloud DNS の具体的な構成は、プライベート DNS レコードが権威的にホストされている場所によって異なります。

  • Google Cloud 内のアプリケーションで Cloud DNS 限定公開ゾーンを使用している場合: 限定公開アプリケーションが Google Cloud でホストされ、その DNS レコードが VPC ネットワークに関連付けられている Cloud DNS 限定公開ゾーン内で管理されている場合は、ゾーンが正しく構成され、アクセス可能であることを確認します。セキュア ゲートウェイは、VPC の既存の Cloud DNS の解決機能を使用します。

  • Google Cloud 環境にないアプリケーションまたは外部 DNS サーバーを使用するアプリケーション: プライベート アプリケーションがGoogle Cloud以外の環境(オンプレミスまたは他のクラウド)にある場合、または DNS レコードが VPC の Cloud DNS プライベート ゾーンの外部にある DNS サーバーによって管理されている場合は、これらのプライベート ドメインのクエリを転送するように Cloud DNS を構成する必要があります。通常、これには VPC 内に Cloud DNS 転送ゾーンを作成する必要があります。これらのゾーンは、指定された限定公開ドメインの DNS クエリを、オンプレミスや他のクラウドなどの権威プライベート DNS サーバーに転送します。

DNS 構成の詳細な手順については、転送ゾーンを作成するをご覧ください。

アプリケーション リソースを作成する

プライベート ウェブ アプリケーションへのアクセスを提供するには、アプリケーション リソースを作成して、セキュリティ ゲートウェイ フレームワーク内にアプリケーションを確立する必要があります。このリソースは、セキュア ゲートウェイがアプリケーションのトラフィックを識別する方法(ホスト名に基づく)と、そのトラフィックのルーティング先を定義します。

  1. 次のコマンドを実行して、必要な環境変数を設定します。
       APPLICATION_ID=APPLICATION_ID
       APP_DISPLAY_NAME="APP_DISPLAY_NAME"
       HOST_NAME=HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAME
       
    次のように置き換えます。
    • APPLICATION_ID: アプリケーション リソースの一意の ID。
    • APP_DISPLAY_NAME: 表示する人が読める形式の名前。
    • HOST_NAME: ユーザーがアクセスするプライマリ ホスト名(例: private.local)。
    • PRIVATE_NETWORK_RESOURCE_NAME: VPC ネットワークの完全なリソース名(例: projects/my-project/global/networks/my-network)。
  2. アプリケーション リソースを作成します。

    Console

    Google Cloud コンソールを使用してアプリケーション リソースを作成するには、次の操作を行います。

    1. Google Cloud コンソールで、[セキュア ゲートウェイ] ページに移動します。
      セキュア ゲートウェイに移動
    2. アプリケーションを追加するには、[アプリケーションを追加] をクリックします。
    3. アプリケーションの種類として [限定公開アプリケーション] を選択します。
    4. アプリケーションの詳細を入力します。
      • アプリケーション名: 名前を入力します(例: GitHub)。
      • ドメイン マッチャー: セキュア ゲートウェイ経由でルーティングするドメイン パターンのカンマ区切りのリストを入力します。ポートは domain:port の形式で指定します。ワイルドカード(*)を使用できます。例: github.com:443
    5. VPC ネットワークを構成します。
      • 現在のプロジェクト内: VPC ネットワークが現在のプロジェクトにある場合は、プルダウンから VPC ネットワークを選択します。
      • 別のプロジェクト内: VPC ネットワークが別の Google Cloud プロジェクトにある場合は、VPC ネットワークの完全なリソース名(projects/my-project/global/networks/my-network など)を指定します。
    6. 省略可: 下り(外向き)ポリシーを定義する: プルダウン メニューから 1 つ以上の Google Cloud リージョンを選択します。
    7. 省略可: アクセス ポリシーを定義する: Access Context Manager のアクセス ポリシーを選択します。このガイドでは、この手順をスキップできます。
    8. アプリケーション リソースを作成するには、[作成] をクリックします。

    gcloud

    gcloud を使用してアプリケーション リソースを作成するには、次のコマンドを実行します。

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME"
            

    下り(外向き)リージョンを指定するには(たとえば、静的ルートを使用する場合)、--egress-regions フラグを追加します。

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME",egressPolicy=regions=us-central1
            

    us-central1 は、リージョン静的ルーティングの設定と一致する Google Cloud リージョン(europe-west1asia-northeast1 など)に置き換えます。特定のリージョン静的ルーティング要件がない場合は、構成から下り(外向き)ポリシーを省略できます。

    REST

    API を使用してアプリケーション リソースを作成する手順は次のとおりです。

    1. application.json という名前のファイルを作成します。

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      下り(外向き)リージョンを指定するには(静的ルートを使用する場合など)、アップストリーム構成に egress_policy を追加します。

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      us-central1 は、リージョン静的ルーティングの設定と一致する Google Cloud リージョン(europe-west1asia-northeast1 など)に置き換えます。特定のリージョン静的ルーティング要件がない場合は、構成から下り(外向き)ポリシーを省略できます。

    2. Create API メソッドを呼び出します。

      curl \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -X POST \
          -d @application.json \
          "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_ID"
                

アクセス ポリシーを構成する

アクセス ポリシーを適用して、アプリケーション レベルでアクセスを制御できます。アクセス ポリシーが構成されていない場合、デフォルトではアプリケーションへのアクセスは拒否されます。

Console

複数のアプリケーションのポリシーを作成する

アクセス ポリシーを構成する手順は次のとおりです。

  1. セキュア ゲートウェイにリンクされている複数のアプリケーションに適用されるポリシーを作成するには、[ポリシー] ページに移動します。
    [ポリシー] に移動
  2. アプリケーションにアクセス ポリシーを追加するには、[ポリシーを作成] をクリックします。
  3. プルダウン リストから、ポリシーを適用するアプリケーションを選択します。
  4. ポリシーにプリンシパルを追加します。

    プリンシパルは、ユーザー、グループ、ドメイン、またはサービス アカウントです。これらのプリンシパルには、割り当てたアクセスレベルに基づいてアクセス権が付与または拒否されます。

    1. プリンシパルを追加するには、[プリンシパルを追加] をクリックします。
    2. [プリンシパル] フィールドに、ユーザー、グループ、サービス アカウントのメールアドレスまたはドメイン名を入力します。
    3. [アクセスレベル] プルダウンで、事前に定義された コンテキストアウェア アクセスレベルを 1 つ以上選択します。プリンシパルが選択したアクセスレベルの条件を満たしている場合にのみ、アクセス権が付与されます。

    プリンシパルをさらに追加するには、[プリンシパルを追加] をもう一度クリックして、サブステップを繰り返します。

    アクセスレベルの作成と管理は、Access Context Manager で行います。

  5. ポリシーをアプリケーションに適用するには、[ポリシーを作成] をクリックします。

アプリケーション レベルのアクセス ポリシーを変更する

  1. 単一のアプリケーションのポリシーを変更するには、[アプリケーション] ページに移動します。
    [アプリケーション] に移動
  2. 編集するアプリケーションを見つけるには、次の操作を行います。
    1. [アプリケーション] リストで、変更するアプリケーションを検索します。
    2. アプリケーションの詳細を表示するには、[その他の操作] メニュー()をクリックし、[詳細を表示] を選択します。
  3. アプリケーションを編集するには、[編集] をクリックします。
  4. ポリシーにプリンシパルを追加します。

    プリンシパルは、ユーザー、グループ、ドメイン、またはサービス アカウントです。これらのプリンシパルには、割り当てたアクセスレベルに基づいてアクセス権が付与または拒否されます。

    1. プリンシパルを追加するには、[プリンシパルを追加] をクリックします。
    2. [プリンシパル] フィールドに、ユーザー、グループ、サービス アカウントのメールアドレスまたはドメイン名を入力します。
    3. [アクセスレベル] プルダウン リストで、事前に定義されたコンテキストアウェア アクセスレベルを 1 つ以上選択します。選択したアクセスレベルの条件をプリンシパルが満たしている場合にのみ、アクセス権が付与されます。

    プリンシパルをさらに追加するには、[プリンシパルを追加] をもう一度クリックして、サブステップを繰り返します。

    アクセスレベルの作成と管理は、Access Context Manager で行います。

  5. ポリシーをアプリケーションに適用するには、[保存] をクリックします。

gcloud

Service Discovery ゲートウェイレベルのバインディングを追加する

ユーザーにアプリケーションへのアクセス権を付与する前に、ユーザーに Secure Gateway レベルのサービス ディスカバリ権限があることを確認してください。

gcloud beyondcorp security-gateways add-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

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

  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • MEMBER: Service Discovery ロールを割り当てるユーザー、グループ、サービス アカウント。詳細については、IAM プリンシパルをご覧ください。

アプリケーション レベルのバインディングを追加する

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

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

  • APPLICATION_ID: アプリケーション リソースの ID
  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • MEMBER: Service Discovery ロールを割り当てるユーザー、グループ、サービス アカウント。詳細については、IAM プリンシパルをご覧ください。

条件付きバインディングを追加する

条件付きでバインディングを追加することもできます。条件では、特定の場所から発信されたユーザーの IP アドレスなどの要件を指定します。(アクセスレベルは、組織レベルのアクセス ポリシーまたはスコープ付きアクセス ポリシーのいずれかで定義できます)。

次のコマンド例では、送信元 IP アドレスが指定されたアクセスレベル内にある場合にのみアクセス権が付与されます。

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

Service Discovery ゲートウェイレベルのバインディングを削除する

Secure Gateway レベルでユーザーの Service Discovery 権限を取り消します。

gcloud beyondcorp security-gateways remove-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

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

  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • MEMBER: Service Discovery ロールを削除するユーザー、グループ、またはサービス アカウント。詳細については、IAM プリンシパルをご覧ください。

アプリケーション レベルのバインディングを削除する

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

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

  • APPLICATION_ID: アプリケーション リソースの ID
  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • MEMBER: Service Discovery ロールを削除するユーザー、グループ、またはサービス アカウント。詳細については、IAM プリンシパルをご覧ください。

条件付きバインディングを削除する

条件付きのバインディングを削除することもできます。条件では、特定の場所から発信されたユーザーの IP アドレスなどの要件を指定します。(アクセスレベルは、組織レベルのアクセス ポリシーまたはスコープ付きアクセス ポリシーのいずれかで定義できます)。

次のコマンド例では、指定されたアクセスレベルの条件付きバインディングを削除します。

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

REST

アクセス ポリシーを安全に更新する

setIamPolicy コマンドは、既存のポリシー全体を指定したポリシーに置き換えます。既存の権限を誤って削除しないように、次の「読み取り、変更、書き込み」パターンを使用することをおすすめします。このパターンは、既存の権限が誤って削除されるのを防ぐのに役立ちます。

  1. 読み取り: 現在のアクセス ポリシーをファイルに保存します。
  2. 変更: ポリシー ファイルをローカルで編集して、権限を追加または変更します。
  3. 書き込み: 更新したポリシー ファイルを適用します。

Service Discovery ゲートウェイ レベルのポリシーを設定する

サービス ディスカバリ権限を付与するには、個々のアプリケーションではなく、セキュア ゲートウェイにアクセス ポリシーを設定する必要があります。これは、「read-modify-write」パターンに従います。

現在のポリシーを取得し、gateway_policy.json という名前のファイルに保存します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:getIamPolicy" > gateway_policy.json
  

次に、テキスト エディタで gateway_policy.json ファイルを開き、アプリケーション レベルの変更と同様に、roles/beyondcorp.serviceDiscoveryUser ロールの members リストに必要なプリンシパルを追加します。

gateway_policy.json ファイルは次のようになります。

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.serviceDiscoveryUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

ポリシー バインディングでは、serviceAccountusergroupprincipalprincipalSet などの他のタイプのメンバーを追加することもできます。詳細については、IAM プリンシパルをご覧ください。

更新されたポリシーを適用します。

jq '{policy: .}' gateway_policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:setIamPolicy"
  

アプリケーション レベルのアクセス ポリシーを設定する

現在のポリシーを取得する

現在のポリシーを取得します。etag フィールドは、複数の管理者が同時に変更を加えた場合に更新の競合を防ぎます。

次のコマンドは、ポリシーを取得して policy.json という名前のファイルに保存します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:getIamPolicy" > policy.json
  

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

  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • APPLICATION_ID: アプリケーション リソースの ID

このコマンドは、現在のポリシーを含む policy.json ファイルを作成します。

ポリシー ファイルを変更する

セキュア ゲートウェイを使用するアクセス権をグループに付与する手順は次のとおりです。

  1. テキスト エディタで policy.json ファイルを開きます。
  2. roles/beyondcorp.securityGatewayUser ロールの members リストにグループを追加します。

policy.json ファイルは次のようになります。

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
      

グループを追加するには、members 配列に新しいエントリを追加します。前のエントリの後にカンマを挿入します。次の例では、new-group@example.com を追加します。

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com",
        "group:new-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
    

ポリシー バインディングでは、serviceAccountusergroupprincipalprincipalSet などの他のタイプのメンバーを追加することもできます。詳細については、IAM プリンシパルをご覧ください。

更新されたポリシーを適用する

policy.json ファイルを編集して保存したら、setIamPolicy コマンドを使用してリソースに適用します。このコマンドは、ファイルから etag を使用して、正しいバージョンを更新します。

jq '{policy: .}' policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:setIamPolicy"
  

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

  • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
  • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
  • APPLICATION_ID: アプリケーション リソースの ID

条件付きアクセス ポリシーを追加する

条件付きのアクセス ポリシーを設定することもできます。条件では、特定の場所から発信されたユーザーの IP アドレスなどの要件を指定します。(アクセスレベルは、組織レベルのアクセス ポリシーまたはスコープ付きアクセス ポリシーのいずれかで定義できます)。

次のポリシーの例では、送信元 IP アドレスが指定されたアクセスレベル内にある場合にのみアクセス権が付与されます。

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:group@example.com"
      ],
      "condition": {
        "expression": "request.auth.access_levels.contains('accessPolicies/1234567890/accessLevels/in_us')",
        "title": "Source IP must be in US"
      }
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

このポリシーを適用するには、前述の手順に沿って操作します。

コンテキストアウェア アクセスでセキュリティを強化する

セキュリティをさらに強化し、管理対象の Google Chrome インスタンスのみがセキュリティ ゲートウェイを介してウェブ アプリケーションにアクセスできるようにするには、コンテキストアウェア アクセス(CAA)ルールを追加することをおすすめします。このルールは、ユーザーの Chrome プロファイルが管理下にあることを確認し、管理対象外または悪意のあるブラウザからの不正使用を防ぎます。

注: この機能を利用するには、Endpoint Verification 拡張機能のインストールと設定が必要です。

これを実装するには、Access Context Manager のカスタム アクセスレベルに条件を追加します。条件の例を次に示します。

  device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
  

この状態の設定、確認、管理方法については、Chrome ブラウザの属性をご覧ください。

Chrome Enterprise Premium 拡張機能をインストールする

Chrome Enterprise Premium 拡張機能は、セキュア ゲートウェイに不可欠な要素で、認証をスムーズに行えるようにします。この拡張機能は、セキュア ゲートウェイのすべてのユーザーにインストールする必要があります。拡張機能のデプロイについては、アプリや拡張機能を表示、設定するをご覧ください。Chrome Enterprise Premium 拡張機能をインストールするには、次の操作を行います。

  1. Google 管理コンソールに移動します。
  2. [Chrome ブラウザ] > [アプリと拡張機能] をクリックします。
  3. [ユーザーとブラウザ] タブをクリックします。
  4. Chrome 拡張機能を追加するには、[+] ボタンをクリックし、[Chrome アプリや拡張機能を ID で追加] を選択します。
  5. 次の ID を使用して Secure Enterprise Browser 拡張機能を検索し、組織部門またはグループ内のすべてのユーザーに対してインストール ポリシーを [強制インストール] に設定します。

    ekajlcmdfcigmdbphhifahdfjbkciflj
  6. インストールした拡張機能をクリックし、[拡張機能のポリシー] フィールドに次の JSON 値を入力します。

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" },
          "serviceDiscovery": { "routes": {} }
        }
      }
    }

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

    • PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの ID
    • SECURITY_GATEWAY_ID: セキュア ゲートウェイの ID

  7. 構成を保存するには、[保存] をクリックします。

以前の PAC ファイルの設定

サービス ディスカバリを有効にすると、Chrome ブラウザ クライアントが構成済みのアプリケーションを自動的に検出し、セキュア ゲートウェイ経由でトラフィックをルーティングできるようになります。これにより、PAC ファイルを使用した手動のルーティング構成が不要になります。

セキュア ゲートウェイでサービス ディスカバリが有効になっていない場合は、以前のセットアップを使用しています。Chrome ブラウザ クライアントのルーティングを制御するには、PAC ファイルを構成する必要があります。

以前のセットアップがあるかどうかを確認するには、次のコマンドを使用してサービス ディスカバリが有効になっているかどうかを確認します。

gcloud

gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global | grep -i "serviceDiscovery"
      

REST

curl --silent \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" | grep -i "serviceDiscovery"
      

コマンドが何も出力しない場合、ゲートウェイは以前の設定を使用しています。以前の設定を使用するゲートウェイの場合、ルーティングはホストされている PAC ファイルを使用して処理されます。

ステップ 1: PAC ファイルを作成してホストする

  1. 次の JavaScript を含む pac_config.js という名前のファイルを作成します。HOST_NAME は、アプリケーションのドメイン(myapp.example.com など)に置き換えます。

    function FindProxyForURL(url, host) {
      const PROXY = "HTTPS via.prod.securegateway.goog:443";
      const sites = ["HOST_NAME"];
    
      for (const site of sites) {
        if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
          return PROXY;
        }
      }
      return 'DIRECT';
    }
  2. PAC ファイルを Cloud Storage バケットなどのホスティング サービスにアップロードします。

    • ファイルが一般公開でダウンロード可能であることを確認します。
    • HTTP ヘッダー Cache-Controlno-cache に設定して、ブラウザが常に最新のルーティング ルールを取得するようにします。
  3. アップロードした PAC ファイルの公開 URL をコピーします。

ステップ 2: Google 管理コンソールで PAC ファイルを適用する

  1. Google 管理コンソールに移動します。
  2. [デバイス] > [Chrome ] > [設定] に移動します。
  3. 組織部門またはグループを選択し、[プロキシモード] をクリックします。
  4. [プロキシモード] で、[常に下記に指定したプロキシの自動設定を使用する] を選択します。
  5. ホストされている PAC ファイルの公開 URL を指定のフィールドに入力します。
  6. [保存] をクリックします。

ステップ 3: Chrome Enterprise Premium 拡張機能を構成する

拡張機能は認証を処理する必要があります。この拡張機能ポリシーは、serviceDiscovery ブロックを除外しているため、標準構成とは異なります。

  1. Google 管理コンソールで、[Chrome ブラウザ> アプリと拡張機能] に移動します。
  2. [ユーザーとブラウザ] タブに移動し、Secure Enterprise Browser 拡張機能(ekajlcmdfcigmdbphhifahdfjbkciflj)が追加され、適用されていることを確認します。
  3. 拡張機能をクリックし、[拡張機能のポリシー] フィールドに次の JSON 値を入力します。

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": {
            "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
          }
        }
      }
    }
  4. [保存] をクリックします。

サービス ディスカバリの設定に移行する

以前のセキュア ゲートウェイを PAC ファイル設定から新しいサービス ディスカバリ設定に移行するには、手動で機能を有効にして構成を更新する必要があります。

  1. セキュア ゲートウェイでサービス ディスカバリを有効にする: 既存のゲートウェイを更新して、サービス ディスカバリを有効にします。

    gcloud

    gcloud beyondcorp security-gateways update SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --service-discovery={}
          

    REST

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{ "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID?updateMask=service_discovery"
          
  2. ゲートウェイ レベルのアクセス ポリシーを設定する: サービス ディスカバリを使用できるように、ゲートウェイ レベルでユーザーに roles/beyondcorp.serviceDiscoveryUser ロールを付与します。Service Discovery ゲートウェイレベルのバインディングを追加するの手順に沿って操作します。

  3. Chrome Enterprise Premium 拡張機能の設定を更新する: Chrome Enterprise Premium 拡張機能をインストールするの手順に沿って、拡張機能ポリシーを更新します。新しい JSON 構成には "serviceDiscovery": { "routes": {} } ブロックを含める必要があります。

  4. 以前の PAC ファイルを削除する: サービス ディスカバリが有効になると、以前の PAC ファイルは不要になります。

    1. Google 管理コンソールで、[デバイス> Chrome > 設定 > ユーザーとブラウザの設定 > ネットワーク] に移動します。
    2. [プロキシモード] 設定を見つけます。
    3. プロキシ自動設定(PAC)URL を削除するか、設定を [常に下記に指定したプロキシの自動設定を使用する] から、[ユーザーによる設定を許可する] など、ネットワークに適したモードに切り替えます。
    4. [保存] をクリックします。

エンドユーザー エクスペリエンス

設定が完了すると、保護された SaaS アプリケーションにアクセスしたエンドユーザーは、アプリケーションに適用されたアクセス ポリシーに基づいてアクセスが許可または拒否されます。

Chrome でアプリケーションにアクセスする

トラフィックがセキュア ゲートウェイを経由するよう制御するには、Chrome Enterprise Premium 拡張機能が必要です。拡張機能は、ユーザーとセキュア ゲートウェイ間の認証を処理します。この拡張機能はドメイン ポリシーによって自動的にインストールされます。

ユーザーが構成した SaaS アプリケーションにアクセスすると、トラフィックがセキュア ゲートウェイを経由し、アクセス ポリシーを満たしているかどうかがここでチェックされます。ユーザーがアクセス ポリシーのチェックに合格すると、アプリケーションへのアクセス権が付与されます。

アプリケーションへのブラウザ アクセスが認証ポリシーによって拒否された場合、ユーザーに Access denied メッセージが表示されます。

次のステップ