使用應用程式連接器保護非 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 叢集中,為每個應用程式連線器遠端代理程式指派 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 Daemon 設定正確無誤
    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:專案 ID。 Google Cloud
      • 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. 下載用戶端程式庫設定,然後將檔案放在遠端代理程式 VM 的 /var/beyondcorp/credentials/credentials.json
      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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
    • 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」欄中的切換按鈕。在顯示的「開啟 IAP」視窗中,選取核取方塊確認這項資源的設定規定,然後按一下「開啟」,確認要使用 IAP 保護資源。

  3. 如要允許使用者存取應用程式,請完成下列步驟,授予使用者專案的「受 IAP 保護的網路應用程式使用者」角色:

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

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

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

完成本節中的程序,即可使用 Google Cloud 控制台部署 Chrome Enterprise Premium 應用程式連接器。

輸入應用程式詳細資料

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

  1. 前往 Google Cloud 控制台的 IAP 頁面。
    前往 IAP

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

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

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

  5. 點選「下一步」

設定與「 Google Cloud」的連結

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

  1. 按一下「建立應用程式連線器」按鈕,然後輸入下列資訊:

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

  3. 按照「佈建虛擬機器」窗格中的指示,在 VM 上部署遠端代理程式。

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

  5. 在「Where can Google Cloud find your application?」(Google Cloud 在哪裡可以找到您的應用程式?) 中輸入下列資訊,設定您在上一個步驟中建立的連接器:

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

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

  1. 在「New principals」(新增主體) 部分輸入下列一或多個項目:

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

發布應用程式

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

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

    • 在「步驟 2 - 更新 DNS」部分,複製「IP 位址」欄位中的 IP 位址。按照 DNS 供應商的指示,使用該位址建立 DNS 記錄,將 IP 位址與 DNS 名稱建立關聯。
  3. 建立 DNS 記錄後,請按一下「測試」按鈕進行測試。你應該會收到「已通過 DNS 測試」確認訊息。

  4. 按一下「完成」

啟用 IAP

  1. 前往 IAP 頁面。
    前往 IAP

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

  3. 在隨即顯示的「Turn on IAP」(啟用 IAP) 對話方塊中,勾選「I have read the configuration requirements and configured my Backend Service according to documentation」(我已詳閱設定規定,並按照說明文件設定後端服務) 核取方塊,然後按一下「TURN ON」(啟用)

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

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

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

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

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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
  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:專案 ID。 Google Cloud
  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 Daemon 設定正確無誤,可搭配 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 Premium 支援團隊分享。如要執行這項診斷指令碼,請執行下列指令:

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

設定指令

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

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

註冊指令

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

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

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

說明

您可以在任何 bce-connctl 指令中附加 -h--help 旗標,列印使用資訊。

bce-connctl init -h