このドキュメントでは、プライベート ウェブ アプリケーションへのアクセスを保護するために、Chrome Enterprise Premium セキュア ゲートウェイを設定する方法について説明します。
Chrome Enterprise Premium セキュア ゲートウェイは、フォワード プロキシとして機能し、ゼロトラスト アクセス フレームワークを適用して、プライベート ウェブ アプリケーションにアクセスするユーザーをきめ細かくコンテキストアウェアに制御します。
限定公開ウェブ アプリケーションへのアクセスの保護の仕組み
セキュア ゲートウェイは、安全なトンネルを確立し、コンテキストアウェア アクセス ポリシーを適用することで、社内向けアプリケーションを非公開に保ち、公共のインターネットにさらされないように保護します。クライアントサイドのブラウザ設定によって、これらのアプリケーションのトラフィックはセキュア ゲートウェイのプロキシ エンドポイントを経由するよう制御されます。セキュア ゲートウェイは、関連するアクセス ポリシーを適用し、許可されている場合は、リクエストを宛先アプリケーションにルーティングします。
セキュア ゲートウェイは、次の環境でホストされている社内向けウェブ アプリケーションを保護するのに役立ちます。
Google Cloud プロジェクト: セキュア ゲートウェイは、 Google Cloud VPC ネットワークで実行されているアプリケーションに直接アクセスできます。
Google Cloud 以外(オンプレミス データセンターまたは他のクラウド): まず、Google Cloud のプライベート VPC ネットワークとGoogle Cloud 以外のネットワークの間に接続を確立する必要があります。これは通常、Cloud VPN または Cloud Interconnect を使用して行われます。セキュア ゲートウェイは、この接続を使用して社内向け VPC ネットワークにトラフィックを送信し、そのトラフィックをGoogle Cloud 以外の環境にルーティングします。
必要なロール
次のロールを付与するよう管理者に依頼します。
Cloud BeyondCorp 管理者(
roles/beyondcorp.admin)。プロジェクトに Chrome Enterprise Premium を設定します。Access Context Manager 管理者(
roles/accesscontextmanager.policyAdmin): 新しいアクセスレベルの読み取りと追加Service Usage 閲覧者(
roles/serviceusage.serviceUsageViewer): Google Cloud コンソールを使用します。
Identity and Access Management(IAM)ロールについて確認する。
必要な Chrome Enterprise ポリシー
セキュア ゲートウェイ プロキシ認証には、Basic HTTP 認証スキームが必要です。組織に Chrome Enterprise 認証ポリシーを構成する場合は、次のポリシー設定を確認します。
AuthSchemesにはbasic認証を含める必要があります(ポリシーが設定されていない場合はデフォルトで有効になります)。このポリシーの他の値は、セキュア ゲートウェイ プロキシ認証に影響しません。BasicAuthOverHttpEnabledを0(false、または無効)に設定して、安全でない HTTP 接続でBasic認証スキームを使用できないようにする必要があります。
始める前に
セキュア ゲートウェイを設定する前に、以下があることを確認してください。
- Chrome Enterprise Premium ライセンス。
- 管理者アカウントで Google 管理コンソールにアクセスします。
- 個別のコントロールがないその他の Google サービスが有効になっている。
- ユーザーに対して Google Cloud サービスが有効になっている。
請求先アカウントが割り当てられ、次の API が有効になっている Google Cloud プロジェクト。 BeyondCorp API
Google Cloud 以外の環境のプライベート アプリケーションの場合、Google Cloud 環境とアプリケーションが存在するGoogle Cloud 以外の環境との間の Cloud VPN または Cloud Interconnect 接続。ネットワーク接続の設定の詳細については、次のリソースをご覧ください。
シェル環境の設定
作業シェルで次の環境変数を定義して、設定プロセスを合理化し、セキュア ゲートウェイ API と通信できるようにします。
- 一般的なパラメータ
PROJECT_ID=PROJECT_ID
次のように置き換えます。
PROJECT_ID: セキュア ゲートウェイが作成されるプロジェクトの ID。
- セキュア ゲートウェイのパラメータ
SECURITY_GATEWAY_ID=
SECURITY_GATEWAY_IDSECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"次のように置き換えます。
SECURITY_GATEWAY_ID: 作成するセキュア ゲートウェイの ID。ID は 63 文字以内で、小文字、数字、ハイフンを使用できます。最初の文字は英字にする必要があります。最後の文字は英字または数字にできます。-
SECURITY_GATEWAY_DISPLAY_NAME: セキュア ゲートウェイの人が読める形式の名前。名前は最大 63 文字で、印刷可能な文字を含めることができます。
セキュア ゲートウェイを作成する
Chrome Enterprise Premium セキュア ゲートウェイは、アプリケーションへの安全な接続を確立するための基本的な構成要素となります。
Console
セキュア ゲートウェイを作成する手順は次のとおりです。
- Google Cloud コンソールで、[セキュア ゲートウェイ] ページに移動します。
セキュア ゲートウェイに移動 - セキュア ゲートウェイを作成するプロジェクトを選択します。
- セキュア ゲートウェイを作成するには、[新しいゲートウェイを作成] をクリックし、ゲートウェイの作成プロセスが完了するまで待ちます。進行状況は、 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 以外の環境でホストされているかにかかわらず、プライベート アプリケーションにアクセスできます。
サービス アカウントに権限を付与するには、次の操作を行います。
-
セキュア ゲートウェイの詳細を取得して、委任サービス アカウントのメールアドレスを特定します。メールはレスポンスの
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"
-
サービス アカウントとターゲット VPC プロジェクトの環境変数を設定します。サービス アカウントのメールアドレスを取得するには、次のコマンドを使用します。
DELEGATING_SERVICE_ACCOUNT=`gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID --project=PROJECT_ID --location=global --format="value(delegatingServiceAccount)"`
-
プライベート VPC プロジェクトの委任サービス アカウントに
roles/beyondcorp.upstreamAccessIAM ロールを付与します。gcloud projects add-iam-policy-binding
PRIVATE_VPC_PROJECT_ID\ --role=roles/beyondcorp.upstreamAccess \ --member=serviceAccount:DELEGATING_SERVICE_ACCOUNTPRIVATE_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)などの動的ルーティングを使用している場合は、VPC ネットワークの動的ルーティング モードをグローバルに設定して、BGP を介して学習したルートが VPC ネットワーク内のすべてのリージョンにアドバタイズされるようにします。セキュア ゲートウェイはグローバル サービスであるため、グローバル動的ルーティングにより、任意のリージョンから到着したトラフィックがプライベート アプリケーションに到達できます。
また、 Google Cloud の Cloud Router がセキュア ゲートウェイの IP 範囲をオンプレミス BGP デバイスに明示的にアドバタイズしていることを確認します。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 接続経由で送信するように指定する必要があります。
動的ルーティング(BGP)ではなく静的ルートを使用して Cloud VPN を構成すると、これらのルートは VPN トンネルが確立されている特定のリージョンでのみ使用できます。セキュア ゲートウェイはグローバル サービスであるため、異なるリージョンから到着する内向きトラフィックは、静的ルートがリージョン間でグローバルにアドバタイズされないため、プライベート アプリケーションに到達できません。静的ルートを使用する際にリージョン間のルーティング エラーを回避するには、次のいずれかを行います。
動的ルーティング(BGP)に切り替える: VPC ネットワークの動的ルーティング モードをグローバルに設定して、BGP を介して学習したルートが VPC ネットワーク内のすべてのリージョンで使用できるようにします。
下り(外向き)ポリシーを構成する: アプリケーション リソースを作成するときに、アップストリーム ネットワークに下り(外向き)ポリシーを構成して、Cloud VPN または Cloud Interconnect 接続が確立されている特定のリージョンで、セキュア ゲートウェイからのトラフィックが下り(外向き)になるようにします。
静的ルーティングを使用する場合、Cloud VPN は次のサポート対象の地域のいずれかに存在する必要があります。
africa-south1asia-east1asia-east2asia-northeast1asia-northeast2asia-northeast3asia-south1asia-south2asia-southeast1asia-southeast2asia-southeast3australia-southeast2europe-central2europe-north1europe-north2europe-southwest1europe-west1europe-west10europe-west12europe-west2europe-west3europe-west4europe-west6europe-west8europe-west9me-central1me-central2me-west1northamerica-northeast1northamerica-northeast2northamerica-south1southamerica-east1southamerica-west1us-central1us-central2us-east1us-east4us-east5us-east7us-south1us-west1us-west2us-west3us-west4us-west8
セキュア ゲートウェイのプライベート ホスト名解決の DNS 構成
セキュア ゲートウェイがプライベート アプリケーションのホスト名を解決するには、Google Cloud VPC ネットワークが Cloud DNS を使用してホスト名を解決できる必要があります。具体的な Cloud DNS 構成は、プライベート DNS レコードが権威的にホストされている場所によって異なります。
Cloud DNS 限定公開ゾーンを使用する Google Cloud 内のアプリケーション: 限定公開アプリケーションが 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 構成の詳細な手順については、転送ゾーンを作成するをご覧ください。
アプリケーション リソースを作成する
プライベート ウェブ アプリケーションへのアクセスを許可するには、アプリケーション リソースを作成して、セキュア ゲートウェイ フレームワーク内にアプリケーションを確立する必要があります。このリソースは、セキュア ゲートウェイがアプリケーションのトラフィックを識別する方法(ホスト名に基づく)と、そのトラフィックのルーティング先を定義します。
-
次のコマンドを実行して、必要な環境変数を設定します。
次のように置き換えます。APPLICATION_ID=
APPLICATION_IDAPP_DISPLAY_NAME="APP_DISPLAY_NAME" HOST_NAME=HOST_NAMEPRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAMEAPPLICATION_ID: アプリケーション リソースの一意の ID。APP_DISPLAY_NAME: 表示する人が読める形式の名前。HOST_NAME: ユーザーがアクセスするプライマリ ホスト名(例:private.local)。PRIVATE_NETWORK_RESOURCE_NAME: VPC ネットワークの完全なリソース名(例:projects/my-project/global/networks/my-network)。
-
アプリケーション リソースを作成します。
Console
Google Cloud コンソールを使用してアプリケーション リソースを作成するには、次の操作を行います。
- Google Cloud コンソールで、[セキュア ゲートウェイ] ページに移動します。
セキュア ゲートウェイに移動 - アプリケーションを追加するには、[アプリケーションを追加] をクリックします。
- アプリケーションの種類として [限定公開アプリケーション] を選択します。
- アプリケーションの詳細を入力します。
- アプリケーション名: 名前を入力します(例:
GitHub)。 - ドメイン マッチャー: セキュア ゲートウェイを経由してルーティングするドメインパターンのカンマ区切りのリストを入力します。ポートを
domain:portの形式で指定します。ワイルドカード(*)を使用できます。例:github.com:443
- アプリケーション名: 名前を入力します(例:
- VPC ネットワークを構成します。
- 現在のプロジェクト内: VPC ネットワークが現在のプロジェクト内にある場合は、プルダウンから VPC ネットワークを選択します。
- 別のプロジェクト: VPC ネットワークが別の Google Cloud プロジェクトにある場合は、VPC ネットワークの完全なリソース名を指定します(例:
projects/my-project/global/networks/my-network)。
- 省略可: 下り(外向き)ポリシーを定義する: プルダウン メニューから 1 つ以上の Google Cloud リージョンを選択します。リージョン静的ルートを使用する場合は、Cloud VPN または Cloud Interconnect 接続が確立されているリージョンを選択します。
- 省略可: アクセス ポリシーを定義する: Access Context Manager のアクセス ポリシーを選択します。このガイドでは、この手順をスキップできます。
- アプリケーション リソースを作成するには、[作成] をクリックします。
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"
下り(外向き)リージョンを指定するには(静的ルートを使用する場合など)、
--upstreamsフラグにegressPolicyを含めます。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-west1やasia-northeast1など)に置き換えます。特定のリージョン静的ルーティング要件がない場合は、構成から下り(外向き)ポリシーを省略できます。REST
API を使用してアプリケーション リソースを作成するには、次の手順を完了します。
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-west1やasia-northeast1など)に置き換えます。特定のリージョン静的ルーティング要件がない場合は、構成から下り(外向き)ポリシーを省略できます。API メソッド
Createを呼び出します。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"
- Google Cloud コンソールで、[セキュア ゲートウェイ] ページに移動します。
アクセス ポリシーを構成する
アクセス ポリシーを適用して、アプリケーション レベルでアクセスを制御できます。アクセス ポリシーが構成されていない場合、アプリケーションへのアクセスはデフォルトで拒否されます。
Console
複数のアプリケーションに適用するポリシーを作成する
アクセス ポリシーを構成する手順は次のとおりです。
- セキュア ゲートウェイにリンクされている複数のアプリケーションに適用されるポリシーを作成するには、[ポリシー] ページに移動します。
[ポリシー] に移動 - アプリケーションにアクセス ポリシーを追加するには、[ポリシーを作成] をクリックします。
- プルダウン リストから、ポリシーを適用するアプリケーションを選択します。
- ポリシーにプリンシパルを追加します。
プリンシパルは、ユーザー、グループ、ドメイン、またはサービス アカウントです。これらのプリンシパルには、割り当てたアクセスレベルに基づいてアクセス権が付与または拒否されます。
- プリンシパルを追加するには、[プリンシパルを追加] をクリックします。
- [プリンシパル] フィールドに、ユーザー、グループ、サービス アカウントのメールアドレス、またはドメイン名を入力します。
- [アクセスレベル] プルダウンで、事前に定義されたコンテキストアウェア アクセスレベルを 1 つ以上選択します。プリンシパルが選択したアクセスレベルの条件を満たす場合にのみ、アクセス権が付与されます。
プリンシパルをさらに追加するには、[プリンシパルを追加] をもう一度クリックして、サブステップを繰り返します。
アクセスレベルは Access Context Manager で作成、管理できます。
- ポリシーをアプリケーションに適用するには、[Create Policy] をクリックします。
アプリケーション レベルのアクセス ポリシーを変更する
- 単一のアプリケーションのポリシーを変更するには、[アプリケーション] ページに移動します。
[アプリケーション] に移動 - 編集するアプリケーションを見つけるには、次の操作を行います。
- [アプリケーション] リストで、変更するアプリケーションを検索します。
- アプリケーションの詳細を表示するには、[その他の操作] メニュー()をクリックし、[詳細を表示] を選択します。
- アプリケーションを編集するには、[編集] をクリックします。
- ポリシーにプリンシパルを追加します。
プリンシパルは、ユーザー、グループ、ドメイン、またはサービス アカウントです。これらのプリンシパルには、割り当てたアクセスレベルに基づいてアクセス権が付与または拒否されます。
- プリンシパルを追加するには、[プリンシパルを追加] をクリックします。
- [プリンシパル] フィールドに、ユーザー、グループ、サービス アカウントのメールアドレス、またはドメイン名を入力します。
- [アクセスレベル] プルダウン リストで、事前に定義されたコンテキストアウェア アクセスレベルを 1 つ以上選択します。プリンシパルが選択したアクセスレベルの条件を満たす場合にのみ、アクセス権が付与されます。
プリンシパルをさらに追加するには、[プリンシパルを追加] をもう一度クリックして、サブステップを繰り返します。
アクセスレベルは Access Context Manager で作成、管理できます。
- ポリシーをアプリケーションに適用するには、[保存] をクリックします。
gcloud
サービス ディスカバリ ゲートウェイ レベルのバインディングを追加する
ユーザーにアプリケーションへのアクセス権を付与する前に、ユーザーがセキュア ゲートウェイ レベルでサービス ディスカバリの権限を持っていることを確認してください。
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: セキュア ゲートウェイの IDPROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの IDMEMBER: サービス ディスカバリ ロールを割り当てるユーザー、グループ、またはサービス アカウント。詳細については、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: アプリケーション リソースの IDSECURITY_GATEWAY_ID: セキュア ゲートウェイの IDPROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの IDMEMBER: サービス ディスカバリ ロールを割り当てるユーザー、グループ、またはサービス アカウント。詳細については、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"
サービス ディスカバリ ゲートウェイ レベルのバインディングを削除する
セキュア ゲートウェイ レベルでユーザーのサービス ディスカバリ権限を取り消します。
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: セキュア ゲートウェイの IDPROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの IDMEMBER: サービス ディスカバリ ロールを削除するユーザー、グループ、またはサービス アカウント。詳細については、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: アプリケーション リソースの IDSECURITY_GATEWAY_ID: セキュア ゲートウェイの IDPROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの IDMEMBER: サービス ディスカバリ ロールを削除するユーザー、グループ、またはサービス アカウント。詳細については、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 コマンドは、既存のポリシー全体を指定したポリシーに置き換えます。既存の権限を誤って削除しないように、次の「読み取り、変更、書き込み」パターンを使用することをおすすめします。このパターンは、既存の権限が誤って削除されるのを防ぐのに役立ちます。
- 読み取り: 現在のアクセス ポリシーをファイルに保存します。
- 変更: ポリシー ファイルをローカルで編集して、権限を追加または変更します。
- 書き込み: 更新されたポリシー ファイルを適用します。
サービス ディスカバリ ゲートウェイ レベルのポリシーを設定する
サービス ディスカバリの権限を付与するには、個々のアプリケーションではなく、セキュア ゲートウェイにアクセス ポリシーを設定する必要があります。これは、同じ「読み取り / 変更 / 書き込み」パターンに従います。
現在のポリシーを取得して、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=" }
ポリシー バインディングには、serviceAccount、user、group、principal、principalSet などの他のタイプのメンバーを追加することもできます。詳細については、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: セキュア ゲートウェイが構成されているプロジェクトの IDSECURITY_GATEWAY_ID: セキュア ゲートウェイの IDAPPLICATION_ID: アプリケーション リソースの ID
このコマンドにより、現在のポリシーを含む policy.json ファイルが作成されます。
ポリシー ファイルを変更する
セキュア ゲートウェイを使用するアクセス権をグループに付与する手順は次のとおりです。
- テキスト エディタで
policy.jsonファイルを開きます。 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=" }
ポリシー バインディングには、serviceAccount、user、group、principal、principalSet などの他のタイプのメンバーを追加することもできます。詳細については、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: セキュア ゲートウェイが構成されているプロジェクトの IDSECURITY_GATEWAY_ID: セキュア ゲートウェイの IDAPPLICATION_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 拡張機能をインストールする手順は次のとおりです。
- Google 管理コンソールに移動します。
- [Chrome ブラウザ] > [アプリと拡張機能] をクリックします。
- [ユーザーとブラウザ] タブをクリックします。
- Chrome 拡張機能を追加するには、[+] ボタンをクリックし、[Chrome アプリや拡張機能を ID で追加] を選択します。
次の ID を使用して Secure Enterprise Browser 拡張機能を検索し、組織部門またはグループ内のすべてのユーザーに対してインストール ポリシーを [自動インストール] に設定します。
ekajlcmdfcigmdbphhifahdfjbkciflj
インストールした拡張機能をクリックし、[拡張機能のポリシー] フィールドに次の JSON 値を入力します。
{ "securityGateway": { "Value": { "authentication": {}, "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" }, "serviceDiscovery": { "routes": {} } } } }
次のように置き換えます。
PROJECT_ID: セキュア ゲートウェイが構成されているプロジェクトの IDSECURITY_GATEWAY_ID: セキュア ゲートウェイの ID
構成を保存するには、[保存] をクリックします。
以前の 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 ファイルを作成してホストする
次の 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'; }
PAC ファイルをホスティング サービス(Cloud Storage バケットなど)にアップロードします。
- ファイルが一般公開でダウンロード可能であることを確認します。
- HTTP ヘッダー
Cache-Controlをno-cacheに設定して、ブラウザが常に最新のルーティング ルールを取得するようにします。
アップロードした PAC ファイルの公開 URL をコピーします。
ステップ 2: Google 管理コンソールで PAC ファイルを適用する
- Google 管理コンソールに移動します。
- [デバイス > Chrome > 設定]に移動します。
- 組織部門またはグループを選択し、[プロキシモード] をクリックします。
- [プロキシモード] で [常に下記に指定したプロキシの自動設定を使用する] を選択します。
- ホストされている PAC ファイルの公開 URL を、表示されたフィールドに入力します。
- [保存] をクリックします。
ステップ 3: Chrome Enterprise Premium 拡張機能を設定する
拡張機能は認証を処理する必要があります。この拡張機能ポリシーは、serviceDiscovery ブロックを除外しているため、標準構成とは異なります。
- Google 管理コンソールで、[Chrome ブラウザ] > [アプリと拡張機能] に移動します。
- [ユーザーとブラウザ] タブに移動し、Secure Enterprise Browser 拡張機能(
ekajlcmdfcigmdbphhifahdfjbkciflj)が追加され、適用されていることを確認します。 拡張機能をクリックし、[拡張機能のポリシー] フィールドに次の JSON 値を入力します。
{ "securityGateway": { "Value": { "authentication": {}, "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" } } } }
[保存] をクリックします。
サービス ディスカバリの設定に移行する
以前のセキュア ゲートウェイを PAC ファイルの設定から新しいサービス ディスカバリの設定に移行するには、この機能を手動で有効にして設定を更新する必要があります。
セキュア ゲートウェイでサービス ディスカバリを有効にする: 既存のゲートウェイを更新して、サービス ディスカバリを有効にします。
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"
ゲートウェイ レベルのアクセス ポリシーを設定する: ユーザーがサービス ディスカバリを使用できるように、ゲートウェイ レベルで
roles/beyondcorp.serviceDiscoveryUserロールを付与します。サービス ディスカバリ ゲートウェイ レベルのバインディングを追加するの手順に沿って操作します。Chrome Enterprise Premium 拡張機能の構成を更新する: Chrome Enterprise Premium 拡張機能をインストールするの手順に沿って、拡張機能ポリシーを更新します。新しい JSON 構成には
"serviceDiscovery": { "routes": {} }ブロックを含める必要があります。以前の PAC ファイルを削除する: サービス ディスカバリが有効になると、以前の PAC ファイルは不要になります。
- Google 管理コンソールで、[デバイス] > [Chrome] > [設定] > [ユーザーとブラウザの設定] > [ネットワーク] に移動します。
- [プロキシモード] の設定を見つけます。
- プロキシ自動設定(PAC)の URL を削除するか、設定を [常に下記に指定したプロキシの自動設定を使用する] から、ネットワークに適したモード([ユーザーによる設定を許可する] など)に切り替えます。
- [保存] をクリックします。
エンドユーザー エクスペリエンス
設定が完了すると、保護された SaaS アプリケーションにアクセスしたエンドユーザーは、アプリケーションに適用されたアクセス ポリシーに基づいてアクセスが許可または拒否されます。
Chrome でアプリケーションにアクセスする
トラフィックがセキュア ゲートウェイを経由するよう制御するには、Chrome Enterprise Premium 拡張機能が必要です。この拡張機能は、ユーザーとセキュア ゲートウェイ間の認証を処理します。この拡張機能は、ドメイン ポリシーによって自動的にインストールされます。
ユーザーが構成した SaaS アプリケーションにアクセスすると、トラフィックがセキュア ゲートウェイを経由し、アクセス ポリシーを満たしているかどうかがここでチェックされます。ユーザーがアクセス ポリシーのチェックに合格すると、アプリケーションへのアクセス権が付与されます。
アプリケーションへのブラウザ アクセスが認証ポリシーによって拒否された場合は、ユーザーに Access denied メッセージが表示されます。