使用應用程式連接器保護非 Google Cloud 應用程式

本頁面說明如何設定及使用 Chrome Enterprise Premium 應用程式連接器,以保護非Google Cloud 應用程式。

總覽

您可以使用 Chrome Enterprise Premium 應用程式連接器,為在非Google Cloud環境中執行的 HTTPS 應用程式提供識別和情境感知存取權。Chrome Enterprise Premium 應用程式連接器是 Chrome Enterprise Premium 執行單元與在其他雲端和內部環境中執行的應用程式之間,安全且經過驗證的介面。

使用 Chrome Enterprise Premium 應用程式連接器的好處是,您不必開啟防火牆或設定站對站 Cloud VPN 連線。

架構

以下是 Chrome Enterprise Premium 應用程式連接器的主要元件大致架構圖。

Chrome Enterprise Premium 應用程式連接器元件

Chrome Enterprise Premium 應用程式連接器元件會透過三個主要 API 資源進行管理:應用程式連接器、應用程式連線和應用程式閘道。

應用程式連接器
連接器資源會定義專屬的應用程式連接器遠端代理程式。應用程式連接器遠端代理程式會部署在遠端企業環境中,例如其他雲端和內部部署系統環境。遠端代理程式會啟動並維護通道工作階段,以便連線至 Google Cloud、接收來自Google Cloud的流量,並將流量轉送至相同環境中的遠端應用程式端點。
應用程式連結
連線資源會定義從Google Cloud 到特定應用程式端點的邏輯連線,該端點會使用 IP 位址:通訊埠或 FQDN:通訊埠 進行識別。連線資源會協調一組受管理的應用程式連接器閘道,這些閘道會為特定應用程式端點分配資源。閘道會在Google Cloud 中管理,並在不再需要時終止遠端代理程式的通道工作階段。
應用程式閘道

應用程式閘道是 Google 代管服務產品。應用程式連接器遠端代理程式會連線至一或多個閘道,讓應用程式連線和應用程式連接器將來自使用者的流量轉送至遠端代理程式。位於同一個應用程式閘道上的應用程式連線流量會透過通用虛擬基礎架構進行路由。

使用應用程式連接器連線應用程式時,系統會為您隱含建立及管理應用程式閘道。如要將應用程式連線資源分組,也可以建立其他應用程式閘道。應用程式閘道可靈活地將應用程式連線分組或區隔,以便進行應用程式隔離。

每個應用程式閘道最多可支援 1 Gbps 的總處理量,並支援最多 200,000 個並行連線。建議您為需要高效能的關鍵應用程式建立專用閘道。每個網關最多可分配 10 個應用程式。

如要支援最多 200,000 個並行連線,並達到總傳輸量上限 1 Gbps,建議您使用 8 個核心和 8 GB 記憶體的專屬 VM 來執行應用程式連接器遠端代理程式。舉例來說,您可以在 HA 叢集中專用 2 個應用程式連接器遠端代理程式,每個代理程式有 8 個核心和 8 GB 的記憶體,以便支援具備專屬應用程式閘道 (app_gateway1) 的高效能網頁應用程式 (app1.examplecompany.com)。建立另一個叢集,其中包含 2 個 VM,每個 VM 有 8 個核心和 8 GB 記憶體,以便支援 10 個低用量應用程式與另一個專用應用程式閘道 (app_gateway2) 的組合。

應用程式連接器、應用程式連線和應用程式閘道資源屬於區域性資源。您只能在區域脈絡中使用這些字詞。舉例來說,您無法將區域 A 中的應用程式連接器指派給區域 B 中建立的應用程式連線或應用程式閘道。

事前準備

Chrome Enterprise Premium 應用程式連接器只能用於 HTTPS 應用程式。此外,HTTPS 負載平衡器不會使用伺服器名稱指示 (SNI) 擴充功能連線至後端。詳情請參閱「從負載平衡器到後端的加密」。

如要使用 Chrome Enterprise Premium 應用程式連接器,您必須具備下列條件:

每個 Chrome Enterprise Premium 應用程式連接器代理程式都需要執行 Docker 的 Linux VM。我們建議您使用下列 Linux 發行版本:

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 以上版本

針對 Linux VM 硬體,我們建議至少使用 2 個 CPU 和 2 GB RAM。

您可以使用 gcloud 和 API,或使用 Google Cloud 控制台來設定及啟用應用程式連接器。如要使用 gcloud 和 API,請完成下列步驟。如要使用 Google Cloud 控制台,請參閱「使用 Google Cloud 控制台設定應用程式連接器」一文。

設定 Google Cloud 專案

如要設定 Google Cloud 專案,以便與 Chrome Enterprise Premium 應用程式連接器搭配使用,您必須啟用 Chrome Enterprise Premium API。請完成下列步驟,啟用 API:

gcloud CLI

完成下列步驟前,請確認您已安裝 gcloud CLI SDK。

  1. 執行下列指令,設定必要的環境變數:

    PROJECT_ID=my-project
    

    my-project 替換為 Google Cloud 專案 ID。

  2. 執行下列指令,啟用 API:

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

API

  1. 請執行下列指令,取得存取權權杖並設定必要的環境變數和別名:

    PROJECT_NUMBER=my-project-number
    ACCESS_TOKEN=my-access-token
    

    my-project 替換為 Google Cloud 專案 ID。

  2. 設定方便使用的別名,以便使用存取權杖:

    alias gcurl="curl -H 'Authorization: Bearer ${ACCESS_TOKEN}' -H 'Content-Type: application/json'"
    

  3. 執行下列指令,啟用 API:

    gcurl https://serviceusage.googleapis.com/v1/projects/${PROJECT_NUMBER}/services/beyondcorp.googleapis.com:enable -d "{}"
    

安裝應用程式連接器遠端代理程式

您必須為每個網路環境部署應用程式連接器遠端代理程式 VM,才能保護您要透過 Chrome Enterprise Premium 保護的應用程式。您必須為每個建立的遠端代理程式,提供專屬的 VM 或已安裝 Docker 的任何 Bare Metal 伺服器。

如要建立遠端代理程式,請完成下列步驟:

  1. 在應用程式環境中建立 VM 執行個體。
    1. 確保遠端代理程式 VM 網路防火牆,允許所有 IAP-TCP IP 範圍 35.235.240.0/20 中,透過通訊埠 443 啟動的輸出流量。請參閱「驗證防火牆設定」,瞭解遠端代理程式 VM 防火牆應允許輸出流量至哪些網域。
  2. 安裝遠端代理程式:

    1. 請確認 DNS 設定正確無誤,並使用 curl 存取應用程式。
    2. 安裝 Docker Engine
      1. 選用:如果您使用 Proxy,請確認 Docker 守護程式已正確設定
    3. 選用:如果您使用 Proxy,請確認已設定 HTTP 和 HTTPS Proxy 環境變數,並使用 http:// 結構定義。
    4. 在遠端代理程式 VM 上執行下列指令,安裝遠端代理程式:
      curl https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    5. 如要在殼層中新增 bce-connctl 別名,請執行下列指令:
       source ~/.bce_alias
       
    6. 執行下列指令,設定必要的環境變數:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      
      取代下列內容:

      • my-project: Google Cloud 專案 ID。
      • us-central1:部署連線和閘道所在的地區。
      • my-connector:連接器名稱。
    7. 使用下列任一憑證類型註冊連接器:

    服務帳戶

    1. bce-connctl CLI 中執行下列指令,即可註冊連接器:

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

    2. 請按照畫面上的指示,使用 Cloud Shell 或 gcloud CLI 將註冊指令碼複製並貼到 Google Cloud 專案中,然後完成註冊連接器的程序。如要執行註冊指令碼,您必須具備專案的 Owner 權限。

      註冊指令碼完成後,執行階段會自動同步連接器設定。

    聯合身分識別

    1. 請按照工作負載身分聯合指南的說明,使用服務帳戶模擬功能,將存取權授予外部身分 Google Cloud。
    2. 下載用戶端程式庫設定,並將檔案放在 /var/beyondcorp/credentials/credentials.json 的遠端代理程式 VM 上。
      1. 如果您使用 AWS EC2 執行個體做為遠端代理程式 VM,請執行下列任一操作:
        1. 讓 EC2 執行個體可選擇使用 IMDSv2。
        2. 在用戶端程式庫設定檔中的 credential_source 物件中加入下列行:
          "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token"
          
    3. 在遠端代理程式 VM 上,在 bce-connctl CLI 中執行下列指令:
      bce-connctl config set project $PROJECT_ID
      bce-connctl config set region $REGION
      bce-connctl config set connector $CONNECTOR_NAME
      
    4. 執行下列指令重新啟動代理程式,讓它取得憑證:
      sudo systemctl restart beyondcorp
      
    5. 在 Cloud Shell 或 gcloud CLI 端點上,執行下列指令,設定必要的環境變數:
      SERVICE_ACCOUNT=my-service-account
      
      替換下列內容:
      • my-service-account:與外部身分相關聯的 Google Cloud 服務帳戶。
    6. 執行下列指令,將 BeyondCorp Connection Agent 角色授予 Google Cloud 服務帳戶:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role="roles/beyondcorp.connectionAgent"
      
    7. 執行下列指令,建立 Google Cloud 應用程式連接器資源。

      gcloud alpha beyondcorp app connectors create $CONNECTOR_NAME \
          --project=$PROJECT_ID \
          --location=$REGION \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --display-name=$CONNECTOR_NAME
      

      建立應用程式連接器資源後,遠端代理程式執行階段會自動同步處理連接器設定。

  3. 驗證遠端代理程式安裝作業:

    1. 執行下列指令,確認服務是否正在執行:
      sudo systemctl status beyondcorp
      
    2. 遠端代理程式包含三個 Docker 容器:bce-control-runtimebce-logagentbce-connector。執行下列指令,確認所有三個容器皆在執行中:
      docker ps --filter name=bce
      
    3. 選用:您可以執行下列指令,檢查 Docker 容器記錄檔:
      docker logs -f CONTAINER_NAME
      
      CONTAINER_NAME 替換為 Docker 容器名稱。

將遠端應用程式連線至虛擬私有雲

gcloud CLI

完成下列步驟前,請確認您已安裝 gcloud CLI SDK,並以具有 beyondcorp.admin 角色的帳戶登入。

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    更改下列內容:

    • my-connector:在先前步驟中定義的連接器名稱。
    • my-connection:連線的專屬名稱。
    • my-project: Google Cloud 專案 ID。
    • us-central1:部署連線和閘道所在的地區。
    • APP_HOST:代管應用程式的內部部署 IP 位址或 FQDN。
    • APP_PORT:連線至應用程式的通訊埠號碼。
  2. 如要為應用程式和 VPC 建立連線,請執行下列指令:

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --application-endpoint=$APP_ENDPOINT \
        --type=tcp \
        --connectors=$CONNECTOR_NAME \
        --display-name=$CONNECTION_NAME
    

    請注意,這個步驟可能需要幾分鐘的時間才能完成。

  3. 建立連線後,請執行下列指令,擷取閘道 URI:

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/bce-ps7}"
    

    GATEWAY_URI_L7 用於建立轉送規則。Chrome Enterprise Premium 應用程式連接器會使用 Private Service Connect,將消費者專案連結至 Google 代管專案中的代管資源。

API

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_HOST=my-app-host
    APP_PORT=my-app-port
    

    更改下列內容:

    • my-connector:在先前步驟中定義的連接器名稱。
    • my-connection:連線的專屬名稱。
    • my-project: Google Cloud 專案 ID。
    • us-central1:部署連線和閘道所在的地區。
    • my-app-host:主機代管應用程式的內部部署 IP 位址或 FQDN。
    • my-app-port:連線至應用程式的通訊埠號碼。
  2. 如要為應用程式和 VPC 建立連線,請執行下列指令:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
        'application_endpoint': \
        { \
            'host': '${APP_HOST}', \
            'port': '${APP_PORT}' \
        }, \
        'type': 'TCP_PROXY', \
        'display_name': '${CONNECTION_NAME}' \
    }"
    

    請注意,這個步驟可能需要幾分鐘的時間才能完成。

  3. 建立連線後,請執行下列指令,擷取閘道 URI:

    GATEWAY_URI=$(gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections/${CONNECTION_NAME} | jq -r '.gateway.uri')
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/'bce-ps7'}"
    

    GATEWAY_URI_L7 用於建立轉送規則。Chrome Enterprise Premium 應用程式連接器會使用 Private Service Connect,將消費者專案連結至 Google 代管專案中的代管資源。

設定外部應用程式負載平衡器

您只能將 HTTPS 應用程式連線至外部應用程式負載平衡器。不支援 HTTP 應用程式。

gcloud CLI

完成下列步驟前,請確認您已安裝 gcloud CLI SDK,並以具有 beyondcorp.admin 角色的帳戶登入。

  1. 執行下列指令,設定必要的環境變數:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    取代下列內容:

    • web-app:所有負載平衡器資源名稱的附加前置字串。
    • my-project: Google Cloud 專案 ID。
    • us-central1:連線和閘道要部署的地區。
    • app.example.com:應用程式的網域名稱。
  2. 使用下列指令建立網路端點群組 (NEG)

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    

    選用標記:

    • 設定 --network 標記,指定 NEG 中網路端點的網路名稱。如未指定,系統會使用預設專案網路。
    • 設定 --subnet 標記,指定 NEG 中網路端點的子網路名稱。如果未指定,網路端點可屬於網路端點群組建立所在地區的任何子網路。
  3. 請執行下列指令,建立以 NEG 為基礎的後端服務,並將其連結至 Private Service Connect 服務連結:

    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  4. 執行下列指令,為網域建立 Google 管理的憑證:

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  5. 執行下列指令,根據上一個步驟的後端建立外部應用程式負載平衡器:

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    建立外部應用程式負載平衡器後,您就能透過該 IP 位址從網際網路存取應用程式。

  6. 建立外部應用程式負載平衡器後,您必須將其 IP 位址與網域名稱建立關聯, Google Cloud 才能佈建 SSL 憑證。請參閱 DNS 供應商的操作說明,瞭解如何將 IP 位址與 DNS 名稱建立關聯。執行下列指令,檢查佈建狀態:

    1. 顯示要在 DNS 供應商中設定的 IP 位址:
      echo "Load Balancer ip address - $LB_IP"
      
    2. 設定 DNS 後,請執行下列指令,檢查網域名稱是否會解析為 IP 位址:
      dig $DOMAIN_NAME
      
    3. 執行下列指令,即可取得佈建狀態:
    gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
    

    佈建 SSL 憑證後,您應該就能使用 DNS 名稱存取應用程式。

API

  1. 執行下列指令,設定必要的環境變數:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    取代下列內容:

    • web-app:所有負載平衡器資源名稱的附加前置字串。
    • my-project: Google Cloud 專案 ID。
    • us-central1:連線和閘道部署所在的地區。
    • app.example.com:應用程式的網域名稱。
  2. 使用下列指令建立網路端點群組 (NEG)

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups \
    -d "{ \
        'name': '${LB_PREFIX}-neg', \
        'network_endpoint_type': 'private-service-connect', \
        'psc_target_service': '${GATEWAY_URI_L7}' \
    }"
    

    選填欄位:

    • 設定 network 欄位,指定 NEG 中網路端點的網路網址。如未指定,系統會使用預設專案網路。
    • 設定 subnetwork 欄位,以便在 NEG 中指定網路端點的子網路網址。如果未指定,網路端點可屬於建立網路端點群組的地區中的任何子網路。
  3. 請執行下列指令,建立以 NEG 為基礎的後端服務,並將其連結至 Private Service Connect 服務連結:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices \
    -d "{ \
        'name': '${LB_PREFIX}-backend-service', \
        'service_protocol': 'HTTPS', \
        'port_name': 'https', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    
    gcurl -X PATCH https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service \
    -d "{ \
        'backends': \
        [{ \
            'group': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups/${LB_PREFIX}-neg' \
        }] \
    }"
    
  4. 執行下列指令,為網域建立 Google 管理的憑證:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses \
    -d "{ \
        'name': '${LB_PREFIX}-static-ip', \
        'ip_version': 'IPV4' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates \
    -d "{ \
        'name': '${LB_PREFIX}-ssl-cert', \
        'managed': \
        { \
            'domains': '${DOMAIN_NAME}' \
        }, \
        'type': 'MANAGED' \
    }"
    
    LB_IP=$(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses/${LB_PREFIX}-static-ip | jq -r '.address')
    
  5. 執行下列指令,根據上一個步驟的後端建立外部應用程式負載平衡器:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps \
    -d "{ \
        'name': '${LB_PREFIX}-map-https', \
        'default_service': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-proxy', \
        'url_map': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps/${LB_PREFIX}-map-https', \
        'ssl_certificate': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/forwardingRules \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-forwarding-rule', \
        target: 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies/${LB_PREFIX}-https-lb-proxy', \
        'ip_address': '${LB_IP}', \
        'port_range': '443-443', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    

    建立外部應用程式負載平衡器後,您就能透過該 IP 位址從網際網路存取應用程式。

  6. 建立外部應用程式負載平衡器後,您必須將其 IP 位址與網域名稱建立關聯, Google Cloud 才能佈建 SSL 憑證。請參閱 DNS 供應商的操作說明,瞭解如何將 IP 位址與 DNS 名稱建立關聯。執行下列指令,檢查佈建狀態:

    1. 顯示要在 DNS 供應商中設定的 IP 位址:
      echo "Load Balancer ip address - $LB_IP"
      
    2. 設定 DNS 後,請執行下列指令,檢查網域名稱是否會解析為 IP 位址:
      dig $DOMAIN_NAME
      
    3. 執行下列指令,即可取得佈建狀態:
    echo $(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert \
    | jq -r '.name + " " + .managed.status + " " + (.managed.domainStatus | keys[]) + "=" + .managed.domainStatus[]')
    

    佈建 SSL 憑證後,您應該就能使用 DNS 名稱存取應用程式。

啟用 Identity-Aware Proxy

請按照 Identity-Aware Proxy (IAP) 說明文件設定 Identity-Aware Proxy。設定 IAP 後,請完成下列步驟,為後端服務啟用 IAP:

  1. 前往 IAP 頁面:
    IAP

  2. 在「HTTPS 資源」下方,找到 $LB_PREFIX-backend-service。如要為此資源啟用 IAP,請按一下「IAP」欄中的切換按鈕。在隨即顯示的「Turn On IAP」視窗中,選取核取方塊確認此資源的設定規定,然後按一下「TURN ON」,確認您要使用 IAP 保護資源。

  3. 如要讓使用者存取應用程式,您必須完成下列步驟,為使用者授予專案的 IAP 受保護網路應用程式使用者角色:

    1. 勾選 $LB_PREFIX-backend-service 核取方塊。
    2. 在「Info」面板中,選取「ADD PRINCIPAL」,然後輸入應有應用程式存取權的群組或使用者電子郵件地址。
    3. 在「Select a role」(請選擇角色) 下拉式清單中,依序選取「Cloud IAP」>「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者),然後按一下「Save」(儲存)

您的內部應用程式現在應該已發布至網路,並受到 Chrome Enterprise 進階版的保護。

使用 Google Cloud 控制台設定應用程式連接器

請完成本節中的程序,使用 Google Cloud 控制台部署 Chrome Enterprise 進階版應用程式連接器。

輸入申請詳細資料

完成下列步驟,即可新增應用程式詳細資料:

  1. 前往 Google Cloud 控制台的「應用程式內付費項目」頁面。
    前往 IAP

  2. 按一下「CONNECT NEW APPLICATION」按鈕,然後選取「Connect via App Connector」

  3. 在「應用程式名稱」中,輸入要保護的應用程式名稱。

  4. 在「對外應用程式網址」中,輸入使用者可用來存取應用程式的公開網址。

  5. 點按「Next」

設定與 Google Cloud的連線

完成下列步驟,即可在 Google Cloud 與非Google Cloud 環境之間建立連線。

  1. 按一下「CREATE APP CONNECTOR」按鈕,然後輸入下列資訊:

    • 應用程式連接器名稱:連接器的名稱。
    • Region:部署連線閘道和連接器的區域。
  2. 按一下「CREATE」按鈕。

  3. 按照「Provision a virtual machine」窗格中的操作說明,在 VM 上部署遠端代理程式。

  4. 按一下「測試連線狀態」按鈕,測試連線。

  5. 在「Where can Google Cloud find your application?」中輸入下列資訊,即可設定先前步驟中建立的連接器:

    • 內部主機名稱:內部 IP 位址或代管應用程式的 FQDN。
    • Port:連線至應用程式的通訊埠號碼。

授予應用程式存取權 (選用步驟)

  1. 在「新增主體」部分輸入下列一或多個值:

    • Google 帳戶電子郵件:user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
    • 任何人:輸入 allUsers 即可將存取權授予所有使用者
    • 所有 Google 帳戶allAuthenticatedUsers 將存取權授予任何登入 Google 帳戶的使用者
  2. 選取一或多個存取層級,然後按一下「NEXT」

發布應用程式

  1. 如要發布應用程式,請按一下「安全發布應用程式」按鈕。

  2. 發布應用程式並收到「已安全發布的應用程式」確認訊息後,您必須建立 DNS 記錄,將對外發布的應用程式網址指向 Proxy 的 IP 位址。請完成下列步驟:

    • 在「步驟 2:更新 DNS」部分,複製「IP 位址」欄位的 IP 位址。按照 DNS 供應商的操作說明,瞭解如何將 IP 位址與 DNS 名稱建立關聯,然後使用該位址建立 DNS 記錄。
  3. 建立 DNS 記錄後,請按一下「TEST」按鈕進行測試。您應該會收到「已通過 DNS 測試」的確認訊息。

  4. 按一下「完成」

啟用 IAP

  1. 前往 IAP 頁面。
    前往 IAP

  2. 在資源清單中找出應用程式,然後選取 IAP 欄中的按鈕。

  3. 在隨即顯示的「Turn on IAP」對話方塊中,選取「I have read the configuration requirements, and configured my Backend Service according to documentation」核取方塊,然後按一下「TURN ON」

您的內部應用程式現在應該已發布至網路,並受到 Chrome Enterprise 進階版的保護。

建立應用程式閘道 (選用)

使用應用程式連接器連線應用程式時,系統會隱含建立及管理應用程式閘道。您也可以自行建立應用程式閘道,將應用程式連線資源分組。在不同應用程式閘道中代管的應用程式連線流量會透過獨立的虛擬基礎架構轉送。

如要建立及指定應用程式閘道,請完成下列步驟。

gcloud CLI

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    更改下列內容:

    • CONNECTOR_NAME:在先前步驟中定義的連接器名稱。
    • CONNECTION_NAME:連線的專屬名稱。
    • GATEWAY_NAME:應用程式閘道的名稱。
    • PROJECT_ID: Google Cloud 專案 ID。
    • REGION:部署應用程式閘道的區域,例如 us-central1
    • APP_HOST:代管應用程式的內部部署 IP 位址或 FQDN。
    • APP_PORT:連線至應用程式的通訊埠號碼。
  2. 請執行下列指令,建立應用程式閘道:

    gcloud beta beyondcorp app gateways create $GATEWAY_NAME \
    --project=$PROJECT_ID --location=$REGION --display-name=$GATEWAY_NAME
    
  3. 執行下列指令,在建立連線呼叫中指定應用程式閘道:

    gcloud beta beyondcorp app connections create $CONNECTION_NAME \
    --project=$PROJECT_ID \
    --location=$REGION \
    --application-endpoint=$APP_ENDPOINT \
    --type=tcp \
    --connectors=$CONNECTOR_NAME \
    --display-name=$CONNECTION_NAME \
    --app-gateway=$GATEWAY_NAME
    

API

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    更改下列內容:

    • CONNECTOR_NAME:在先前步驟中定義的連接器名稱。
    • CONNECTION_NAME:連線的專屬名稱。
    • GATEWAY_NAME:應用程式閘道的名稱。
    • PROJECT_ID: Google Cloud 專案 ID。
    • REGION:部署應用程式閘道的區域,例如 us-central1
    • APP_HOST:代管應用程式的內部部署 IP 位址或 FQDN。
    • APP_PORT:連線至應用程式的通訊埠號碼。
  2. 請執行下列指令,建立應用程式閘道:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appGateways?app_gateway_id=${GATEWAY_NAME} \
    -d "{ \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    }"
    
  3. 執行下列指令,在建立連線呼叫中指定應用程式閘道:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
    'application_endpoint': \
    { \
    'host': '${APP_HOST}', \
    'port': '${APP_PORT}' \
    }, \
    'gateway': { 'app_gateway' : 'projects/${PROJECT_ID}/locations/${REGION}/appGateways/${GATEWAY_NAME}'}, \
    'connectors':['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    

後續步驟

疑難排解

找不到先前建立的資源

使用 gcloud CLI 392.0.0 以上版本時,請使用新的應用程式連接器預設資源 AppConnectorAppConnection。例如,gcloud alpha beyondcorp app connectorsgcloud alpha beyondcorp app connections 都會參照新的資源。

如要存取使用 392.0.0 以下版本 gcloud CLI 建立的舊版資源,請使用關鍵字 legacy。例如,gcloud alpha beyondcorp app legacy connectorsgcloud alpha beyondcorp app legacy connections 都會參照舊版資源。

使用舊版資源的設定目前仍可正常運作,但日後將淘汰。

  • 請按照本指南中的程序設定新資源。
  • 如果設定使用舊版資源,請使用關鍵字 legacy 找出這些資源並移除。按照本文所述程序重新建立資源。
  • 如果您有使用舊版資源的不完整設定,請使用關鍵字 legacy 找出這些資源並移除。按照本文所述程序重新建立資源。

TLS/SSL 錯誤

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

瀏覽器顯示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 錯誤或類似的 TLS/SSL 錯誤,且不會重新導向至登入頁面。

  • 在 Google Cloud 負載平衡器詳細資料頁面上驗證憑證狀態。

    注意:佈建 Google 代管的憑證最多可能需要 60 分鐘。

TLS error

瀏覽器在重新導向至登入頁面後,會顯示錯誤 upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error 或類似的 TLS/SSL 錯誤。

  • 確認連線中使用的應用程式端點為 HTTPS。
  • 請使用 curl 確認應用程式端點是否可從遠端代理程式 VM 存取:

    curl https://$APP_ENDPOINT
    

    如果應用程式憑證是自行簽署的,您可能需要使用 -k 標記。

確認防火牆設定

請確認遠端代理程式與網際網路之間的防火牆允許輸出連線至下列網域:

連線類型 網域 Port (通訊埠)
TCP raw.githubusercontent.com 443
TCP gcr.io 443
TCP *.googleapis.com 443
TCP tunnel.cloudproxy.app 443
TCP *.tunnel.cloudproxy.app 443
TCP accounts.google.com 443
TCP oauth2.googleapis.com 443

變更與連線相關聯的連接器

gcloud

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    更改下列內容:

    • my-connector:連接器名稱。這也可以是 connector1,connector2 這類以半形逗號分隔的清單。
    • my-connection:要更新的連線名稱。
    • us-central1:連線部署所在的地區。
    • my-project: Google Cloud 專案 ID。
  2. 如要變更與連線相關聯的連接器,請執行下列指令:

    gcloud alpha beyondcorp app connections update $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --connectors=$CONNECTOR_NAME
    

API

  1. 執行下列指令,設定必要的環境變數:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    更改下列內容:

    • my-connector:連接器名稱。
    • my-connection:要更新的連線名稱。
    • us-central1:連線部署所在的地區。
    • my-project: Google Cloud 專案 ID。
  2. 如要變更與連線相關聯的連接器,請執行下列指令:

    gcurl -X PATCH \
    https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}?update_mask=connectors \
    -d "{ \
        'connectors': ['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    }"
    

    如要確認更新是否成功,請執行下列指令,並檢查輸出的 connectors 欄位:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}
    

Proxy

我們在 2024 年初推出了 Proxy 支援功能,但需要變更 BeyondCorp systemd 檔案。如果您在這個時間之前安裝遠端代理程式,且想使用 Proxy,請重新安裝遠端代理程式

  • 確認 Docker 守護程式已正確設定,可與 Proxy 搭配運作。

  • 請確認已設定 HTTP 和 HTTPS Proxy 環境變數,且兩者都使用 http:// 結構定義。不支援 https:// 結構定義和其他結構定義。

  • 執行 env 指令,確認 Proxy 環境變數是否已匯出至子程序。

  • 系統只支援 HTTP_PROXYHTTPS_PROXYNO_PROXY 和其小寫字母。

  • 如果您需要在安裝後更新 Proxy 設定,請使用預設的 beyondcorp 使用者,在 /var/beyondcorp/env/PROXY 中更新環境變數。如果使用自訂使用者,請按照設定 Docker 用戶端的操作說明更新 /home/$USER/.docker/config.json。如要套用 Proxy 變更,請使用下列指令重新啟動遠端代理程式:

    sudo systemctl restart beyondcorp
    

診斷工具

run-post-install-checks

run-post-install-checks 是在 /var/beyondcorp/scripts/ 中安裝的指令碼,可驗證遠端代理程式是否已正確安裝、註冊及運作正常。成功建立 app connection 並指派給遠端代理程式 (連接器) 後,請前往遠端代理程式 VM,然後使用下列指令執行 run-post-install-checks

sudo /var/beyondcorp/scripts/run-post-install-checks

如果一切正常,指令碼會列印成功訊息。

run-diagnostics

run-diagnostics 是在 /var/beyondcorp/scripts/ 中安裝的指令碼,可診斷遠端代理 VM 上的常見問題,並列印可與 Chrome Enterprise 進階版支援團隊分享的報告。如要執行這個診斷指令碼,請執行下列指令:

sudo /var/beyondcorp/scripts/run-diagnostics

診斷報表會寫入控制台和 ./diagnostics-report.txt

遠端代理程式 CLI

bce-connctl 是遠端代理程式管理員指令列介面 (CLI),可在本機與遠端代理程式互動。這個 CLI 支援各種指令,例如註冊遠端代理程式、檢查狀態和設定設定值。

Init 指令

您可以使用 Init 指令初始化遠端代理程式,並產生用於註冊代理程式的指令碼。

範例:

bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME

狀態指令

您可以使用「狀態」指令管理遠端代理人的狀態。

  • 清單:使用這項指令可列出遠端代理程式的整體狀態,以及該代理程式支援的任何連線狀態。範例:bce-connctl status list

設定指令

您可以使用設定指令管理遠端代理程式的設定值。

  • List:使用這項指令可列出遠端代理程式的設定值。範例:bce-connctl config list
  • Set:使用這個指令設定遠端代理程式的設定值。範例:bce-connctl config set <key> <value>

註冊指令

您可以使用註冊指令管理遠端代理人的註冊作業。

  • 說明:使用這個指令可取得遠端代理程式的註冊狀態。範例:bce-connctl enrollment describe

    bce-connctl init 的註冊指令碼順利完成,且公開金鑰上傳成功時,狀態會變更為 ENROLLED

說明

您可以將 -h--help 標記附加至任何 bce-connctl 指令,以便列印用量資訊。

bce-connctl init -h