SaaS アプリケーションへのセキュアなアクセス

このページでは、Chrome Enterprise Premium セキュア ゲートウェイを使用して SaaS アプリケーションを保護するプロセスについて説明します。

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

SaaS アプリケーションへのアクセスを保護する仕組み

セキュア ゲートウェイが SaaS アプリケーションを保護する仕組みの概要は次のとおりです。

  1. クライアントサイドのブラウザ設定により、アプリケーション トラフィックが安全なゲートウェイ プロキシ経由でルーティングされます。
  2. セキュア ゲートウェイは、コンテキストアウェア アクセス ポリシーをチェックして、クライアント(ユーザーとデバイス)のアクセスを承認します。
  3. 許可されている場合、ゲートウェイは、そのゲートウェイと Google Cloud リージョンに割り当てられた一意の送信元 IP アドレスを使用して、トラフィックをアプリケーションに転送します。これらの専用の送信元 IP アドレスを使用して、IP 許可リスト ルールを実装できます。

始める前に

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

制限事項

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 セキュア ゲートウェイは、アプリケーションへの安全な接続を確立するための基本的な構成要素です。専用のプロジェクトとネットワークを割り当て、分離とセキュリティを確保します。

セキュア ゲートウェイを作成するには、次の手順を行います。

  1. 次の例を使用して、securityGateway.json という名前のファイルを作成します。

    {
       "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME",
       "hubs": { "us-central1": {} }
    }
    

    この例では、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
  2. Create API を呼び出して、安全なゲートウェイ リソースを作成します。

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @securityGateway.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
    

SaaS アプリケーションを構成する

セキュア ゲートウェイを作成したら、セキュア アクセスにセキュア ゲートウェイを使用するように SaaS アプリケーションを構成できます。

  1. 各ハブのセキュア ゲートウェイによって割り振られた IP アドレスを取得します。リージョンに 2 つの IP アドレスが割り当てられます。

    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}"
    

    ハブを含むセキュア ゲートウェイの GET レスポンスの例を次に示します。この例では、ハブは us-central1 リージョンと us-east1 リージョンに作成されます。また、レスポンスで返されたすべての IP アドレスを SaaS アプリケーションで許可する必要があります。

    {
     "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",
                 "IP_ADDRESS_3",
                 "IP_ADDRESS_4",
                 "IP_ADDRESS_5"
               ]
             }
           },
           "us-east1": {
             "internetGateway": {
               "assignedIps": [
                 "IP_ADDRESS_1",
                 "IP_ADDRESS_2",
                 "IP_ADDRESS_3",
                 "IP_ADDRESS_4",
                 "IP_ADDRESS_5"
               ]
             }
           }
         }
       }
     ]
    }
    
  2. IP アドレスを SaaS アプリケーションの IP 許可リストに追加します。たとえば、GitHub アプリケーションの場合は、こちらのガイド(組織に許可された IP アドレスを管理する)をご確認ください。

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

以降では、安全なゲートウェイ アプリケーション リソースを設定して構成するプロセスについて説明します。

Google Cloudでセキュア ゲートウェイ アプリケーション リソースを作成する

Google Cloud アプリケーション リソースは、セキュア ゲートウェイ リソースのサブリソースです。Create API を呼び出して、アプリケーション リソースを作成します。

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 を構成します。

  1. 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 ファイルを統合します。

  2. ファイルをアップロードして、公開でダウンロードできるようにします。たとえば、ファイルを Cloud Storage にアップロードし、バケットで allUsers に Storage オブジェクトのユーザーロールを付与して、ファイルを公開でダウンロードできるようにします。

  3. アップロードしたファイルが常に最新のバージョンであることを確認するには、Cache-Control ヘッダーを no-cache に設定して、キャッシュ動作を調整します。この設定により、ブラウザと中間サーバーでファイルのコピーが保存されなくなり、Chrome で常に最新のバージョンがダウンロードされるようになります。

    Cache-Control とブラウザ キャッシュへの影響について詳しくは、Cache-Control ヘッダーをご覧ください。

  4. アップロードしたファイルの公開 URL をコピーします。

プロキシモードの設定を更新する

  1. Google 管理コンソールに移動します。
  2. [デバイス] -> [Chrome] -> [設定] をクリックします。
  3. 組織部門またはグループを選択し、[プロキシモード] をクリックします。
  4. [プロキシモード] ページで、[常に下記に指定したプロキシの自動設定を使用する] を選択し、Cloud Storage の PAC ファイルの URL を入力します。

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

アクセス ポリシーは、セキュア ゲートウェイ レベルまたはアプリケーション レベルで適用できます。

  • セキュア ゲートウェイ リソース:セキュア ゲートウェイレベルでポリシーを適用して、関連付けられているすべてのアプリケーションへのアクセスを制御します。
  • 個々のアプリケーション: よりきめ細かく制御するには、個々のアプリケーションにアクセス ポリシーを適用します。
  1. setIamPolicy.json という名前の JSON 形式のファイルを作成し、以下を追加します。

    {
     "policy": {
       object (POLICY)
     }
    }
    

    POLICYIAM 許可ポリシーに置き換えます。ポリシーの etag は、有効なポリシーの etag と同じである必要があります。有効なポリシーの etag は、getIamPolicy メソッドを呼び出すことで取得できます。

  2. 特定のグループにセキュア ゲートウェイの使用を許可するには、そのグループに roles/beyondcorp.securityGatewayUser ロールを付与します。

    {
     "policy": {
       "version": 3,
       "bindings": [
         {
           "role": "roles/beyondcorp.securityGatewayUser",
           "members": [
                   "group:"
           ]
         }
       ],
       "etag": "AA1jlb"
     }
    }
    

    ポリシー バインディングのその他の ID(serviceAccountusergroupprincipalprincipalSet など)については、IAM プリンシパルをご覧ください。

  3. setIamPolicy API を呼び出して、JSON ファイルで指定されたセキュア ゲートウェイにアクセス ポリシーを適用します。

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:setIamPolicy"
    

    アプリケーションにアクセス ポリシーを適用するには、次のコマンドを使用します。

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:setIamPolicy"
    

次の例に示すように、アクセスレベルを条件として使用したアクセス ポリシーを設定することもできます。

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
                "group:"
        ],
        "condition": {
                "expression": "'accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels",
                "title": "Source IP must be in US"
        }
      }
    ],
    "etag": "A1jlb"
  }
}'

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

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

  1. Google 管理コンソールに移動します。
  2. [Chrome ブラウザ] -> [アプリと拡張機能] をクリックします。
  3. [ユーザーとブラウザ] タブをクリックします。
  4. Chrome 拡張機能を追加するには、[+] ボタンをクリックします。
  5. ekajlcmdfcigmdbphhifahdfjbkciflj を検索し、組織部門またはグループ内のすべてのユーザーに強制インストールします。
  6. インストールした拡張機能をクリックし、「拡張機能のポリシー」フィールドで次の 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 メッセージが表示されます。

次のステップ