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

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

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

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

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

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

始める前に

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

制限事項

Chrome Enterprise Premium セキュア ゲートウェイには、次の制限事項があります。

  • IPv6 接続: Chrome Enterprise Premium セキュア ゲートウェイは、IPv6 接続を使用する SaaS アプリケーションをサポートしていません。
  • SaaS アプリケーションとしての ID プロバイダ: エンドユーザーの Secure Gateway による認証が同じ IdP に依存している場合、セキュア ゲートウェイで保護されるように ID プロバイダを SaaS アプリケーションとして構成することはできません。

シェル環境の設定

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

  • 一般的なパラメータ

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=PROJECT_ID
    APPLICATION_ID=APPLICATION_ID
    APPLICATION_DISPLAY_NAME="APPLICATION_DISPLAY_NAME"
    HOST_NAME=HOST_NAME

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

    • PROJECT_ID: セキュア ゲートウェイが作成されるプロジェクトの ID。
    • APPLICATION_ID: アプリケーションの ID(github など)。名前は最大 63 文字で、小文字、数字、ハイフンを使用できます。先頭文字は英字にする必要があり、末尾の文字は英字または数字にすることができます。
    • APPLICATION_DISPLAY_NAME: 表示する人が読める形式の名前。
    • HOST_NAME: アプリケーションのホスト名。例: github.comホスト名は最大 253 文字で、次のいずれかの形式に準拠する必要があります。

      • 有効な IPv4 アドレス
      • 有効な IPv6 アドレス
      • 有効な DNS
      • アスタリスク(*)
      • アスタリスク(*)の後に有効な DNS 名
  • セキュア ゲートウェイのパラメータ

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

セキュア ゲートウェイ リソースを作成するには、次のいずれかの方法を使用します。

gcloud

以下のコマンドを実行します。--hubs フラグには、次のリストから 1 つ以上のリージョンを指定します。

gcloud beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
  --project=${PROJECT_ID} \
  --location=global \
  --display-name="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": "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 アプリケーションを構成できます。

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

    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://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
        

    hubs を含むセキュア ゲートウェイの GET レスポンスの例を次に示します。この例では、hubsus-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",
                ]
              }
            }
          }
        }
      ]
    }
        
  2. IP アドレスを SaaS アプリケーションの IP 許可リストに追加します。たとえば、GitHub アプリケーションの場合は、こちらのガイド(組織に許可された IP アドレスを管理する)をご確認ください。

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

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

Google Cloudで安全なゲートウェイ アプリケーション リソースを作成する

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

gcloud

gcloud 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},ports=[443]"
      

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}\", ports: [443]}] }" \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
      

Google Chrome のプロキシモードを設定する

Google 管理コンソールの Chrome 設定で PAC ファイルを適用することで、アプリケーションのトラフィックを安全なゲートウェイ経由でルーティングできます。PAC ファイルを適用する手順は次のとおりです。

  1. PAC ファイルを作成または更新します。

    • 次の PAC ファイルの例を使用して pac_config.js ファイルを作成し、最初のアプリケーションを作成します。

    • 既存の pac_config.js ファイルを更新し、次の PAC ファイルの例に示すように、新しいアプリケーションのドメインをサイト配列に追加します。

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }

    HOST_NAME は、アプリケーションのホスト名(myapp.example.com など)に置き換えます。

    セキュア ゲートウェイに固有ではない既存の PAC ファイルを使用している場合は、アプリケーションのドメインをサイト配列に追加して、PAC ファイルを統合します。

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

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

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

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

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

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

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

アクセス ポリシーを適用して、関連付けられているすべてのアプリケーションに影響するセキュア ゲートウェイ レベルでアクセスを制御することも、よりきめ細かい制御を行うために個々のアプリケーション レベルでアクセスを制御することもできます。

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

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

  1. 読み取り: まず、現在のアクセス ポリシーを取得します。

  2. 変更: ポリシー ファイルをローカルで編集して、権限を追加または変更します。

  3. 書き込み: 更新したポリシー ファイルを適用します。

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

変更を行う前に、現在のポリシーを取得します。

ポリシーの etag フィールドは、バージョン識別子として機能します。これにより、複数の管理者が同時に変更を行った場合に発生する更新の競合を防ぐことができます。

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

gcloud

gcloud beta beyondcorp security-gateways applications get-iam-policy APPLICATION_ID \
  --security-gateway=SECURITY_GATEWAY_ID \
  --project=PROJECT_ID \
  --location=global > policy.json

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

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

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/applications/APPLICATION_ID:getIamPolicy" > policy.json

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

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

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

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

テキスト エディタで policy.json ファイルを開きます。 グループにセキュア ゲートウェイの使用権限を付与するには、roles/beyondcorp.securityGatewayUser ロールの members リストにグループを追加します。

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

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

グループを追加するには、members 配列に新しいエントリを追加します。前のエントリの後にカンマを含めます。

次の例では、new-group@example.com を追加します。

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

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

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

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

gcloud

gcloud beta beyondcorp security-gateways applications set-iam-policy APPLICATION_ID policy.json \
  --security-gateway=SECURITY_GATEWAY_ID \
  --project=PROJECT_ID \
  --location=global

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

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

REST

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"

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

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

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

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

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

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

  1. Google 管理コンソールに移動します。
  2. [Chrome ブラウザ] > [アプリと拡張機能] をクリックします。
  3. [ユーザーとブラウザ] タブをクリックします。
  4. Chrome 拡張機能を追加するには、[+] ボタンをクリックします。
  5. 次の拡張機能を検索し、組織部門またはグループ内のすべてのユーザーにインストールを必須にします。

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

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

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

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

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

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

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

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

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

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

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

次のステップ