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

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

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

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

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

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

始める前に

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

制限事項

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 アプリケーションを構成できます。

  1. 各ハブのセキュア ゲートウェイによって割り振られた 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 レスポンスの例を次に示します。この例では、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 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 を構成します。

  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 を入力します。

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

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

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

setIamPolicy コマンドは、既存のポリシー全体を指定したポリシーに置き換えます。既存の権限を誤って削除しないようにするには、「読み取り、変更、書き込み」パターンに従うことをおすすめします。これにより、既存のポリシーを上書きするのではなく、追加のみを行うことができます。

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

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

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

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

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

ポリシーの 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="
  }
}

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

  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 メッセージが表示されます。

次のステップ