このページでは、Chrome Enterprise Premium の安全なゲートウェイを使用して SaaS アプリケーションを保護するプロセスについて説明します。
Chrome Enterprise Premium の安全なゲートウェイは、フォワード プロキシとして機能し、ゼロトラスト アクセス フレームワークを適用して、SaaS アプリケーションにアクセスするユーザーをきめ細かくコンテキストアウェアに制御します。
SaaS アプリケーションへのアクセスを保護する仕組み
セキュア ゲートウェイが SaaS アプリケーションを保護する仕組みの概要は次のとおりです。
- クライアントサイドのブラウザ設定により、アプリケーション トラフィックが安全なゲートウェイ プロキシ経由でルーティングされます。
- セキュア ゲートウェイは、コンテキストアウェア アクセス ポリシーをチェックして、クライアント(ユーザーとデバイス)のアクセスを承認します。
- 許可されている場合、ゲートウェイは、そのゲートウェイと Google Cloud リージョンに割り当てられた一意の送信元 IP アドレスを使用して、トラフィックをアプリケーションに転送します。アクセスを制御するには、これらの専用の送信元 IP アドレスを SaaS アプリケーションの許可リストに追加します。
始める前に
セキュア ゲートウェイを設定する前に、次のことを確認してください。
- Chrome Enterprise Premium ライセンス
- 管理者アカウントで Google 管理コンソールにアクセスできること
- 請求先アカウントが割り当てられ、次の API が有効になっている Google Cloud プロジェクト: BeyondCorp API
設定を行う管理者に付与される次の Identity and Access Management(IAM)ロール: プロジェクト レベル: Cloud BeyondCorp 管理者(
beyondcorp.admin
)。保護する SaaS アプリケーション。Secure Gateway のセキュリティ チェックを適用するため、アプリケーションで
IP allowlisting
がサポートされている必要があります。
制限事項
Chrome Enterprise Premium のセキュア ゲートウェイには、次の制限事項があります。セキュア ゲートウェイは、IPv6 接続のみを許可する SaaS アプリケーションをサポートしていません。
シェル環境の設定
作業シェルで次の環境変数を定義して、設定プロセスを合理化し、セキュア ゲートウェイ API と通信できるようにします。
一般的なパラメータ
API="beyondcorp.googleapis.com" API_VERSION=v1 PROJECT_ID=
MY_PROJECT_ID
APPLICATION_ID=MY_APPLICATION_ID
APPLICATION_DISPLAY_NAME="MY_APPLICATION_DISPLAY_NAME
" HOST_NAME=MY_HOST_NAME
次のように置き換えます。
MY_PROJECT_ID
: セキュア ゲートウェイが作成されるプロジェクトの ID。MY_APPLICATION_ID
: アプリケーションの ID(github
など)。名前は最大 63 文字で、小文字、数字、ハイフンを使用できます。先頭文字は英字にする必要があり、末尾の文字は英字または数字にすることができます。MY_APPLICATION_DISPLAY_NAME
: 表示する人が読める形式の名前。MY_HOST_NAME
: アプリケーションのホスト名。例:github.com
ホスト名は最大 253 文字で、次のいずれかの形式に準拠する必要があります。- 有効な IPv4 アドレス
- 有効な IPv6 アドレス
- 有効な DNS 名
- アスタリスク(*)
- アスタリスク(*)の後に有効な DNS 名
セキュア ゲートウェイのパラメータ
SECURITY_GATEWAY_ID=
MY_SECURITY_GATEWAY_ID
SECURITY_GATEWAY_DISPLAY_NAME="MY_SECURITY_GATEWAY_DISPLAY_NAME
"次のように置き換えます。
MY_SECURITY_GATEWAY_ID
: セキュア ゲートウェイの ID。ID は 63 文字以下で、小文字、数字、ハイフンを使用できます。最初の文字は英字にし、最後の文字は英字または数字にしてください。MY_SECURITY_GATEWAY_DISPLAY_NAME
: 人が読める形式のセキュア ゲートウェイの名前。名前は最大 63 文字で、印刷可能な文字のみを含めることができます。
セキュア ゲートウェイを作成する
Chrome Enterprise Premium セキュア ゲートウェイは、アプリケーションへの安全な接続を確立するための基本的な構成要素となります。専用のプロジェクトとネットワークを割り当て、分離とセキュリティを確保します。
セキュア ゲートウェイ リソースを作成するには、次のいずれかの方法を使用します。
gcloud
以下のコマンドを実行します。--hubs
フラグには、次のリストから 1 つ以上のリージョンを指定します。
gcloud beta beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
--project=${PROJECT_ID} \
--location=global \
--display-name="MY_SECURITY_GATEWAY_DISPLAY_NAME
" \
--hubs=us-central1
REST
リクエスト本文にゲートウェイの詳細を指定して、Create API メソッドを呼び出します。hubs
オブジェクトには、次のリストから 1 つ以上のリージョンを指定します。
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d '{ "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME
", "hubs": { "us-central1": {} } }' \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
hubs
は、ターゲット アプリケーションへの下り(外向き)接続を有効にするために必要なリージョン リソースを表します。リージョンごとに 1 つのハブを設定でき、各ハブは 2 つの IP アドレスを提供します。次のリージョンを指定できます。
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
SaaS アプリケーションを構成する
セキュア ゲートウェイを作成したら、セキュア アクセスにセキュア ゲートウェイを使用するように SaaS アプリケーションを構成できます。
各ハブのセキュア ゲートウェイによって割り振られた IP アドレスを取得します。リージョンに 2 つの IP アドレスが割り当てられます。
gcloud
gcloud beta 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://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
hubs
を含むセキュア ゲートウェイのGET
レスポンスの例を次に示します。この例では、hubs
はus-central1
リージョンとus-east1
リージョンに作成されます。また、レスポンスで返されたすべての IP アドレスを SaaS アプリケーションで許可する必要があります。gcloud
createTime: 'CREATE_TIME' displayName: My security gateway hubs: us-central1: internetGateway: assignedIps: - IP_ADDRESS_1 - IP_ADDRESS_2 us-east1: internetGateway: assignedIps: - IP_ADDRESS_1 - IP_ADDRESS_2 name: projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID} state: RUNNING updateTime: 'UPDATE_TIME'
REST
{ "securityGateways": [ { "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}", "createTime": "CREATE_TIME", "updateTime": "UPDATE_TIME", "displayName": "My security gateway", "state": "RUNNING", "hubs": { "us-central1": { "internetGateway": { "assignedIps": [ "IP_ADDRESS_1", "IP_ADDRESS_2", ] } }, "us-east1": { "internetGateway": { "assignedIps": [ "IP_ADDRESS_1", "IP_ADDRESS_2", ] } } } } ] }
IP アドレスを SaaS アプリケーションの IP 許可リストに追加します。たとえば、GitHub アプリケーションの場合は、こちらのガイド(組織に許可された IP アドレスを管理する)をご確認ください。
アプリケーション リソースを作成する
以降では、安全なゲートウェイ アプリケーション リソースを設定して構成する手順について説明します。
Google Cloudでセキュア ゲートウェイ アプリケーション リソースを作成する
Google Cloud アプリケーション リソースは、セキュア ゲートウェイ リソースのサブリソースです。Create
API を呼び出して、アプリケーション リソースを作成します。
gcloud
gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \ --project=${PROJECT_ID} \ --security-gateway=${SECURITY_GATEWAY_ID} \ --location=global \ --display-name="${APPLICATION_DISPLAY_NAME}" \ --endpoint-matchers="hostname=${HOST_NAME}"
REST
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -X POST \ -d "{ \"display_name\": \"${APPLICATION_DISPLAY_NAME}\", \"endpoint_matchers\": [{hostname: \"${HOST_NAME}\"}] }" \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
Google Chrome のプロキシモードを設定する
アプリケーション リソースのトラフィックを安全なゲートウェイ経由でルーティングするには、Google 管理コンソールの Chrome 設定で PAC ファイルを適用して Chrome を構成します。
PAC ファイルを作成または更新します。
最初のアプリケーションを作成する場合は、次の PAC ファイルの例を使用して
pac_config.js
ファイルを作成します。2 つ目以降のアプリケーションを作成する場合は、次の PAC ファイルの例に示すように、既存の
pac_config.js
ファイルを更新して、新しいアプリケーションのドメインをサイト配列に追加します。
function FindProxyForURL(url, host) { const PROXY = "HTTPS ingress.cloudproxy.app:443"; const sites = ["MY_HOST_NAME"]; for (const site of sites) { if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) { return PROXY; } } return 'DIRECT'; }
セキュア ゲートウェイに固有ではない既存の PAC ファイルを使用している場合は、アプリケーションのドメインをサイト配列に追加して、PAC ファイルを統合します。
ファイルをアップロードして、公開でダウンロードできるようにします。たとえば、ファイルを Cloud Storage にアップロードし、バケットで allUsers に Storage オブジェクトのユーザーロールを付与して、ファイルを公開でダウンロードできるようにします。
アップロードしたファイルが常に最新のバージョンであることを確認するには、
Cache-Control
ヘッダーをno-cache
に設定して、キャッシュ動作を調整します。この設定により、ブラウザと中間サーバーでファイルのコピーが保存されなくなり、Chrome で常に最新のバージョンがダウンロードされるようになります。Cache-Control
とブラウザ キャッシュへの影響について詳しくは、Cache-Control ヘッダーをご覧ください。アップロードしたファイルの公開 URL をコピーします。
プロキシモードの設定を更新する
- Google 管理コンソールに移動します。
- [デバイス] -> [Chrome] -> [設定] をクリックします。
- 組織部門またはグループを選択し、[プロキシモード] をクリックします。
- [プロキシモード] ページで、[常に下記に指定したプロキシの自動設定を使用する] を選択し、Cloud Storage の PAC ファイルの URL を入力します。
アクセス ポリシーを構成する
アクセス ポリシーを適用して、セキュア ゲートウェイ レベルでアクセスを制御できます。この場合、関連付けられているすべてのアプリケーションに影響します。また、個々のアプリケーション レベルでアクセスを制御して、よりきめ細かい制御を行うこともできます。
アクセス ポリシーを安全に更新する
setIamPolicy
コマンドは、既存のポリシー全体を指定したポリシーに置き換えます。既存の権限を誤って削除しないようにするには、「読み取り、変更、書き込み」パターンに従うことをおすすめします。これにより、既存のポリシーを上書きするのではなく、追加のみを行うことができます。
読み取り: まず、現在のアクセス ポリシーを取得します。
変更: ポリシー ファイルをローカルで編集して、権限を追加または変更します。
書き込み: 更新したポリシー ファイルを適用します。
現在のポリシーを取得する
変更を行う前に、現在のポリシーを取得します。
ポリシーの etag
フィールドは、バージョン識別子として機能します。これにより、複数の管理者が同時に変更を行った場合に更新が競合するのを防ぐことができます。
次のコマンドは、ポリシーを取得して policy.json
という名前のファイルに保存します。
セキュア ゲートウェイのポリシーを取得します。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:getIamPolicy" > policy.json
個々のアプリケーションのポリシーを取得します。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:getIamPolicy" > policy.json
コマンドを実行すると、現在のポリシーを含む policy.json
ファイルが作成されます。
ポリシー ファイルを変更する
テキスト エディタで policy.json
ファイルを開きます。 セキュア ゲートウェイを使用する権限をグループに付与するには、roles/beyondcorp.securityGatewayUser
ロールの members
リストにグループを追加します。
policy.json
は次の例のようになります。
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"members": [
"group:existing-group@example.com"
]
}
],
"etag": "BwXN8_d-bOM="
}
}
新しいグループを追加するには、members
配列に新しいエントリを追加します。前のエントリの後にカンマを含めます。
次の例では、new-group@example.com
を追加します。
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"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://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:setIamPolicy"
個々のアプリケーションにポリシーを適用します。
jq '{policy: .}' policy.json | curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d @- \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:setIamPolicy"
条件付きアクセス ポリシーを追加する
条件付きのアクセス ポリシーを設定することもできます。条件では、特定の場所から発信されたユーザーの IP アドレスなどの要件を指定します。
次の例は、送信元 IP アドレスが指定されたアクセスレベル内にある場合にのみアクセスを許可するポリシーを示しています。
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"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="
}
}
このポリシーを適用するには、前述の手順に沿って操作します。
Chrome Enterprise Premium 拡張機能をインストールする
Chrome Enterprise Premium 拡張機能はセキュア ゲートウェイに不可欠な要素で、認証をスムーズに行えるようにします。この拡張機能は、セキュア ゲートウェイのすべてのユーザーにインストールします。拡張機能のデプロイについては、アプリや拡張機能を表示、設定するをご覧ください。
- Google 管理コンソールに移動します。
- [Chrome ブラウザ] -> [アプリと拡張機能] をクリックします。
- [ユーザーとブラウザ] タブをクリックします。
- Chrome 拡張機能を追加するには、[+] ボタンをクリックします。
ekajlcmdfcigmdbphhifahdfjbkciflj
を検索し、組織部門またはグループ内のすべてのユーザーに強制インストールします。インストールした拡張機能をクリックし、「拡張機能のポリシー」フィールドで次の JSON 値を指定します。
{ "securityGateway": { "Value": { "authentication": {}, "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" } } } }
エンドユーザー エクスペリエンス
設定が完了すると、保護された SaaS アプリケーションにアクセスしたエンドユーザーは、アプリケーションに適用されたアクセス ポリシーに基づいてアクセスが許可または拒否されます。
Chrome でアプリケーションにアクセスする
トラフィックが安全なゲートウェイを経由するよう制御するには、Chrome Enterprise Premium 拡張機能が必要です。この拡張機能は、ユーザーとセキュア ゲートウェイ間の認証を処理します。この拡張機能はドメイン ポリシーによって自動的にインストールされます。
ユーザーが構成した SaaS アプリケーションにアクセスすると、トラフィックがセキュア ゲートウェイを経由し、アクセス ポリシーを満たしているかどうかがここでチェックされます。アクセス ポリシーのチェックに合格すると、ユーザーにアプリケーションへのアクセス権が付与されます。
アプリケーションへのブラウザ アクセスが認証ポリシーによって拒否された場合、ユーザーに Access denied
メッセージが表示されます。