安全存取私人網頁應用程式

本文說明如何設定 Chrome Enterprise 進階版安全閘道,保護私人網頁應用程式的存取權。

Chrome Enterprise 進階版安全閘道可做為正向 Proxy,強制執行零信任存取架構,並提供精細的情境感知控制項,控管哪些人可以存取私人網頁應用程式。

如何保護私有網頁應用程式的存取權

安全閘道會建立安全通道,並強制執行情境感知存取權政策,確保私人應用程式不公開,並避免暴露在公開網際網路中。用戶端瀏覽器設定會透過安全閘道 Proxy 端點,轉送這些應用程式的流量。接著,安全閘道會套用相關存取權政策,並在允許的情況下,將要求轉送至目的地應用程式。

安全閘道可協助保護託管於下列環境的私有網頁應用程式:

  • Google Cloud 專案:安全閘道可直接存取在 Google Cloud 虛擬私有雲網路中執行的應用程式。

  • 非Google Cloud (地端部署資料中心或其他雲端):您必須先在Google Cloud 的私人虛擬私有雲網路與非Google Cloud 網路之間建立連線。通常會使用 Cloud VPN 或 Cloud Interconnect。接著,安全閘道會透過連線將流量傳送至私人虛擬私有雲網路,再由該網路將流量轉送至非Google Cloud 環境。

必要的角色

請要求管理員授予下列角色:

進一步瞭解 Identity and Access Management (IAM) 角色。

事前準備

設定安全閘道前,請確認您具備下列條件:

設定殼層環境

如要簡化設定程序並與安全閘道 API 互動,請在工作殼層中定義下列環境變數。

  • 一般參數
    PROJECT_ID=PROJECT_ID
          

    更改下列內容:

    • PROJECT_ID:建立安全閘道的專案 ID。
  • 安全閘道參數
    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 進階版安全閘道是建立應用程式安全連線的基本要素。

主控台

如要建立安全閘道,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「secure gateway」(安全閘道) 頁面。
    前往安全閘道
  2. 選取要建立安全閘道的專案。
  3. 如要建立安全閘道,請按一下「Create new gateway」(建立新閘道),然後等待閘道建立程序完成。您可以在 Google Cloud 控制台的「Notifications」(通知) 部分追蹤進度。

gcloud

如要使用 gcloud 建立安全閘道,請執行下列指令:

gcloud beyondcorp security-gateways create SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --display-name="SECURITY_GATEWAY_DISPLAY_NAME" \
    --service-discovery={}
      

REST

如要使用 REST API 建立安全閘道,請執行下列指令:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{ "display_name": "SECURITY_GATEWAY_DISPLAY_NAME", "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways?security_gateway_id=SECURITY_GATEWAY_ID"
      

設定私人網頁應用程式

您必須先設定必要權限和網路設定,啟用連線和適當的轉送功能,才能在安全閘道中定義特定應用程式資源。

將權限授予服務帳戶

如要成功將流量傳送至虛擬私有雲網路,安全閘道必須具備委派服務帳戶的特定 IAM 權限。這樣一來,安全閘道就能連線至私人應用程式,無論這些應用程式是託管於 Google Cloud 虛擬私有雲,還是透過 Cloud VPN 或 Cloud Interconnect 連線的非Google Cloud 環境。

如要將權限授予服務帳戶,請按照下列步驟操作:

  1. 取得安全閘道的詳細資料,找出委派服務帳戶電子郵件。電子郵件地址位於回應的 delegatingServiceAccount 欄位中。

    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://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
                   
  2. 為服務帳戶和目標虛擬私有雲專案設定環境變數。如要取得服務帳戶電子郵件地址,可以使用下列指令:
    DELEGATING_SERVICE_ACCOUNT=`gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID --project=PROJECT_ID --location=global --format="value(delegatingServiceAccount)"`
          
  3. 將 roles/beyondcorp.upstreamAccess IAM 角色授予私人虛擬私有雲專案的委派服務帳戶。
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
        --role=roles/beyondcorp.upstreamAccess \
        --member=serviceAccount:DELEGATING_SERVICE_ACCOUNT
        
    將 PRIVATE_VPC_PROJECT_ID 替換為部署私人網頁應用程式或設定 Cloud VPN/Interconnect 的虛擬私有雲網路專案 ID。

授予角色後,Identity and Access Management 政策約需兩分鐘才會生效。

設定網路轉送和防火牆規則

如要允許安全閘道的流量連至私人網頁應用程式,請設定防火牆規則、網路轉送和 DNS 設定。

Google Cloud中應用程式的防火牆規則

如果私人網頁應用程式託管於 Google Cloud 虛擬私有雲網路中 (例如託管於 Compute Engine VM、具有內部 IP 的 Google Kubernetes Engine 服務,或位於內部 TCP/UDP 負載平衡器後方),請設定Google Cloud 虛擬私有雲防火牆規則。這樣就能允許來自安全閘道 IP 範圍 (136.124.16.0/20) 的 TCP 輸入流量。

gcloud

如要使用 gcloud 建立防火牆規則,請執行下列指令:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
   --project=PRIVATE_VPC_PROJECT_ID \
   --network=NETWORK_NAME \
   --allow=tcp \
   --source-ranges=136.124.16.0/20
      

更改下列內容:

  • FIREWALL_RULE_NAME:防火牆 規則的名稱。
  • PRIVATE_VPC_PROJECT_ID:託管虛擬私有雲網路的專案 ID。
  • NETWORK_NAME:託管應用程式的虛擬私有雲網路名稱。

非Google Cloud 環境中應用程式的防火牆規則

如果私人網頁應用程式位於地端部署資料中心或其他雲端服務供應商的網路,並使用 Cloud VPN 或 Cloud Interconnect 連線至 Google Cloud虛擬私有雲,請在地端部署防火牆或同等網路安全控制項 (例如其他雲端環境中的安全性群組和網路 ACL) 設定防火牆規則。這會允許來自安全閘道 IP 範圍 136.124.16.0/20 的輸入 TCP 流量。

設定從非Google Cloud 環境到安全閘道的轉送

如要為託管於非Google Cloud 環境 (例如地端部署或其他雲端) 的私人應用程式進行雙向通訊,外部網路必須建立傳回路徑,指向下列安全閘道 IP 範圍:136.124.16.0/20。

確認私人網路可以透過 Cloud VPN 或 Cloud Interconnect 連線至安全閘道 IP 範圍:

  • 動態轉送:如果您使用動態轉送,例如搭配 Cloud Router 使用邊界閘道通訊協定 (BGP),請將虛擬私有雲網路的動態轉送模式設為「Global」(全域),這樣透過 BGP 得知的路由就會 advertise 至虛擬私有雲網路中的所有區域。安全閘道是全域服務,因此全域動態轉送可確保從任何區域傳入的流量都能到達私人應用程式。

    此外,請確認 Google Cloud 中的 Cloud Router 會明確向地端部署 BGP 裝置 advertise 安全閘道 IP 範圍。雖然 BGP 會動態交換多個路由,但安全閘道 IP 範圍需要明確 advertise。

    gcloud

    如要檢查來源範圍是否已公告,請執行下列指令:

    gcloud compute routers list-bgp-routes ROUTER_NAME \
    --peer=PEER_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --route-direction=OUTBOUND \
    --address-family=IPV4 \
    --destination-range=136.124.16.0/20
          

    更改下列內容:

    • ROUTER_NAME:Cloud Router 的名稱
    • PEER_NAME:BGP 對等互連的名稱
    • REGION:路由器所在的區域
    • PROJECT_ID:路由器所在專案的 ID
  • 靜態轉送:如果使用靜態路徑,您必須在地端部署網路設備 (例如路由器或防火牆) 上,手動為每個安全閘道 IP 範圍新增路徑。這些靜態路由必須指定,目的地為安全閘道 IP 範圍的流量,必須透過 Cloud VPN 或 Cloud Interconnect 連線傳送。

    如果使用靜態路由 (而非動態轉送 (BGP)) 設定 Cloud VPN,這些路由僅適用於建立 VPN 通道的特定區域。安全閘道是全域服務,因此從不同區域傳入的輸入流量無法到達私人應用程式,因為靜態路由不會在各區域全域 advertise。如要避免在使用靜態路徑時發生跨區域轉送失敗,請採取下列任一做法:

    • 切換至動態轉送 (BGP):將虛擬私有雲網路的動態轉送模式設為「Global」(全域),這樣一來,透過 BGP 得知的路由就能在虛擬私有雲網路的所有區域中使用。

    • 設定輸出政策:建立應用程式資源時,請在上游網路設定輸出政策,強制安全閘道的流量從建立 Cloud VPN 或 Cloud Interconnect 連線的特定區域輸出。

    使用靜態路由時,Cloud VPN 必須位於下列其中一個支援的地區:

    • africa-south1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-northeast2
    • asia-northeast3
    • asia-south1
    • asia-south2
    • asia-southeast1
    • asia-southeast2
    • asia-southeast3
    • australia-southeast2
    • europe-central2
    • europe-north1
    • europe-north2
    • europe-southwest1
    • europe-west1
    • europe-west10
    • europe-west12
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west6
    • europe-west8
    • europe-west9
    • me-central1
    • me-central2
    • me-west1
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-central2
    • us-east1
    • us-east4
    • us-east5
    • us-east7
    • us-south1
    • us-west1
    • us-west2
    • us-west3
    • us-west4
    • us-west8

安全閘道私人主機名稱解析的 DNS 設定

如要讓安全閘道解析私人應用程式主機名稱,Google Cloud 虛擬私有雲網路必須能使用 Cloud DNS 解析主機名稱。具體的 Cloud DNS 設定取決於私人 DNS 記錄的權威託管位置:

  • 使用 Cloud DNS 私人區域的 Google Cloud 內應用程式:如果私人應用程式託管於 Google Cloud ,且 DNS 記錄是在與虛擬私有雲網路相關聯的 Cloud DNS 私人區域中管理,請確認區域已正確設定且可存取。安全閘道會使用虛擬私有雲現有的 Cloud DNS 解析功能。

  • 非Google Cloud 環境中的應用程式,或使用外部 DNS 伺服器的應用程式:如果私人應用程式位於非Google Cloud環境 (地端部署或其他雲端),或其 DNS 記錄是由虛擬私有雲 Cloud DNS 私人區域外部的 DNS 伺服器管理,則必須設定 Cloud DNS,轉送這些私人網域的查詢。這通常涉及在虛擬私有雲中建立 Cloud DNS 轉送區域。這些區域會將指定私人網域的 DNS 查詢,導向權威私人 DNS 伺服器,例如地端部署或其他雲端。

如需 DNS 設定的詳細操作說明,請參閱「建立轉送區域」。

建立應用程式資源

如要提供私人網頁應用程式的存取權,您必須建立應用程式資源,在安全閘道架構中建立應用程式。這項資源定義了安全閘道如何根據主機名稱識別應用程式的流量,以及如何轉送該流量。

  1. 執行下列指令,設定必要的環境變數:
       APPLICATION_ID=APPLICATION_ID
       APP_DISPLAY_NAME="APP_DISPLAY_NAME"
       HOST_NAME=HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAME
       
    更改下列內容:
    • APPLICATION_ID:應用程式資源的專屬 ID。
    • APP_DISPLAY_NAME:要顯示的人類可讀名稱。
    • HOST_NAME:使用者存取的主要主機名稱 (例如 private.local)。
    • PRIVATE_NETWORK_RESOURCE_NAME:虛擬私有雲網路的完整資源名稱,例如 projects/my-project/global/networks/my-network。
  2. 建立應用程式資源。

    主控台

    如要使用 Google Cloud 控制台建立應用程式資源,請按照下列步驟操作:

    1. 前往 Google Cloud 控制台的「secure gateway」(安全閘道) 頁面。
      前往安全閘道
    2. 如要新增應用程式,請按一下「Add application」(新增應用程式)。
    3. 選取應用程式類型:「Private application」(私人應用程式)。
    4. 輸入應用程式詳細資料:
      • Application name (應用程式名稱):輸入名稱,例如 GitHub。
      • 網域比對器:輸入要透過安全閘道轉送的網域模式清單,並以半形逗號分隔。請按照 domain:port 格式加入通訊埠。可使用萬用字元 (*)。例如:github.com:443。
    5. 設定虛擬私有雲網路:
      • 「In current project」(在目前專案中):如果虛擬私有雲網路位於目前專案,請從下拉式選單中選擇虛擬私有雲網路。
      • 在其他專案中:如果虛擬私有雲網路位於其他 Google Cloud 專案,請指定虛擬私有雲網路的完整資源名稱,例如 projects/my-project/global/networks/my-network。
    6. 選用:定義輸出政策:從下拉式選單中選取一或多個 Google Cloud 區域。如果使用區域性靜態路由,請選取建立 Cloud VPN 或 Cloud Interconnect 連線的區域。
    7. 選用:定義存取權政策:選取 Access Context Manager 存取權政策。在本指南中,您可以略過這個步驟。
    8. 如要建立應用程式資源,請按一下「Create」(建立)。

    gcloud

    如要使用 gcloud 建立應用程式資源,請執行下列指令:

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME"
            

    如要指定輸出區域 (例如使用靜態路由時),請在 --upstreams 旗標中加入 egressPolicy:

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME",egressPolicy=regions=us-central1
            

    將 us-central1 替換為與區域靜態轉送設定一致的 Google Cloud 區域 (例如 europe-west1 或 asia-northeast1)。如果您沒有特定的區域靜態路由需求,可以從設定中省略輸出政策。

    REST

    如要使用 API 建立應用程式資源,請完成下列步驟:

    1. 建立名為 application.json 的檔案。

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      如要指定輸出區域 (例如使用靜態路由時),請在上游設定中新增 egress_policy:

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      將 us-central1 替換為與區域靜態轉送設定一致的 Google Cloud 區域 (例如 europe-west1 或 asia-northeast1)。如果您沒有特定的區域靜態路由需求,可以從設定中省略輸出政策。

    2. 呼叫 Create API 方法。

      curl \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -X POST \
          -d @application.json \
          "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_ID"
                

設定存取權政策

您可以套用存取權政策,在應用程式層級控管存取權。如未設定存取權政策,系統預設會拒絕存取應用程式。

主控台

為多個應用程式建立政策

如要設定存取權政策,請按照下列步驟操作:

  1. 如要建立政策,並套用至連結安全閘道的多個應用程式,請前往「政策」頁面。
    前往「政策」頁面
  2. 如要為應用程式新增存取權政策,請按一下「Create Policy」(建立政策)。
  3. 從下拉式選單中,選取要套用政策的應用程式。
  4. 將主體新增至政策:

    主體可以是使用者、群組、網域或服務帳戶。系統會根據您指派的存取層級,授予或拒絕這些主體的存取權。

    1. 如要新增主體,請按一下「Add principal」(新增主體)。
    2. 在「Principal」(主體) 欄位中,輸入使用者、群組、服務帳戶的電子郵件地址,或網域名稱。
    3. 在「存取層級」下拉式選單中,選取一或多個預先定義的情境感知存取權層級。只有在主體符合所選存取層級的條件時,系統才會授予存取權。

    如要新增更多主體,請再次點選「新增主體」,然後重複上述子步驟。

    您可以在 Access Context Manager 中建立及管理存取層級。

  5. 如要將政策套用至應用程式,請按一下「Create Policy」(建立政策)。

修改應用程式層級存取政策

  1. 如要修改單一應用程式的政策,請前往「Applications」(應用程式) 頁面。
    前往「Applications」(應用程式)
  2. 如要找出要編輯的應用程式,請按照下列步驟操作:
    1. 在「Applications」清單中,搜尋要修改的應用程式。
    2. 如要查看應用程式詳細資料,請按一下「更多動作」選單 (),然後選取「查看詳細資料」。
  3. 如要編輯應用程式,請按一下「編輯」。
  4. 將主體新增至政策:

    主體可以是使用者、群組、網域或服務帳戶。系統會根據您指派的存取層級,授予或拒絕這些主體的存取權。

    1. 如要新增主體,請按一下「Add principal」(新增主體)。
    2. 在「Principal」(主體) 欄位中,輸入使用者、群組、服務帳戶的電子郵件地址,或網域名稱。
    3. 在「存取層級」下拉式選單中,選取一或多個預先定義的情境感知存取權層級。只有在主體符合所選存取層級的條件時,系統才會授予存取權。

    如要新增更多主體,請再次點選「新增主體」,然後重複上述子步驟。

    您可以在 Access Context Manager 中建立及管理存取層級。

  5. 如要將政策套用至應用程式,請按一下「Save」(儲存)。

gcloud

新增服務探索閘道層級繫結

授予使用者應用程式存取權前,請確認使用者具備安全閘道層級的服務探索權限。

gcloud beyondcorp security-gateways add-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

更改下列內容:

  • SECURITY_GATEWAY_ID:安全閘道的 ID
  • PROJECT_ID:設定安全閘道的專案 ID
  • MEMBER:要指派服務探索角色的使用者、群組或服務帳戶。詳情請參閱「IAM 主體」

新增應用程式層級繫結

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

更改下列內容:

  • APPLICATION_ID:應用程式資源的 ID
  • SECURITY_GATEWAY_ID:安全閘道的 ID
  • PROJECT_ID:設定安全閘道的專案 ID
  • MEMBER:要指派服務探索角色的使用者、群組或服務帳戶。詳情請參閱「IAM 主體」

新增條件式繫結

您也可以新增有條件的繫結。條件會指定要求,例如使用者的 IP 位址來自特定位置。(存取層級可在組織層級存取權政策或範圍存取權政策中定義)。

下列範例指令只會在來源 IP 位址位於指定存取層級時授予存取權:

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

移除服務探索閘道層級繫結

在安全閘道層級撤銷使用者的服務探索權限。

gcloud beyondcorp security-gateways remove-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

更改下列內容:

  • SECURITY_GATEWAY_ID:安全閘道的 ID
  • PROJECT_ID:設定安全閘道的專案 ID
  • MEMBER:要移除服務探索角色的使用者、群組或服務帳戶。詳情請參閱「IAM 主體」

移除應用程式層級繫結

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

更改下列內容:

  • APPLICATION_ID:應用程式資源的 ID
  • SECURITY_GATEWAY_ID:安全閘道的 ID
  • PROJECT_ID:設定安全閘道的專案 ID
  • MEMBER:要移除服務探索角色的使用者、群組或服務帳戶。詳情請參閱「IAM 主體」

移除條件繫結

您也可以移除有條件的繫結。條件會指定要求,例如使用者的 IP 位址來自特定位置。(存取層級可在組織層級存取權政策或範圍存取權政策中定義)。

下列範例指令會移除具有指定存取層級的條件式繫結:

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

REST

安全更新存取權政策

setIamPolicy 指令會將整個現有政策替換為您提供的政策。為避免不小心移除現有權限,建議您使用下列「讀取-修改-寫入」模式。這種模式有助於避免意外移除現有權限。

  1. Read:將目前的存取權政策儲存至檔案。
  2. 修改:在本機編輯政策檔案,新增或變更權限。
  3. 寫入:套用更新後的政策檔案。

設定服務探索閘道層級政策

如要授予服務探索權限,您必須在安全閘道 (而非個別應用程式) 設定存取權政策。這遵循相同的「讀取-修改-寫入」模式。

擷取目前的政策,並儲存至名為 gateway_policy.json 的檔案。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:getIamPolicy" > gateway_policy.json
  

接著,在文字編輯器中開啟 gateway_policy.json 檔案,然後將必要的主體新增至 roles/beyondcorp.serviceDiscoveryUser 角色的 members 清單,類似於應用程式層級的修改。

gateway_policy.json 檔案類似於以下範例:

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

您也可以在政策繫結中新增其他類型的成員,例如 serviceAccount、user、group、principal 和 principalSet。詳情請參閱「IAM 主體」。

套用更新後的政策:

jq '{policy: .}' gateway_policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:setIamPolicy"
  

設定應用程式層級存取權政策

取得目前政策

擷取目前的政策。如果有多位管理員同時進行變更,etag 欄位可避免更新作業衝突。

下列指令會擷取政策,並將政策儲存至名為 policy.json 的檔案。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/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 檔案。

修改政策檔案

如要授予群組安全閘道的使用權限,請按照下列步驟操作:

  1. 使用文字編輯器開啟 policy.json 檔案。
  2. 將群組新增至 roles/beyondcorp.securityGatewayUser 角色的 members 清單。

policy.json 檔案類似於以下範例:

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

如要新增其他群組,請在 members 陣列中新增項目。請在前一個項目後方加上半形逗號。以下範例會新增 new-group@example.com:

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

您也可以在政策繫結中新增其他類型的成員,例如 serviceAccount、user、group、principal 和 principalSet。詳情請參閱「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://beyondcorp.googleapis.com/v1/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.sgApplicationUser",
      "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="
}
  

如要套用這項政策,請按照前述步驟操作。

透過情境感知存取權強化安全性

為進一步強化安全性,並確保只有受管理的 Google Chrome 執行個體能透過安全閘道存取網頁應用程式,建議您新增情境感知存取權 (CAA) 規則。這項規則會驗證使用者的 Chrome 設定檔是否受管理,防止未受管理或惡意瀏覽器可能造成的濫用行為。

注意:如要使用這項功能,必須安裝並設定端點驗證擴充功能。

如要實作這項功能,請在 Access Context Manager 自訂存取層級中新增條件。以下是可採用的條件範例:

  device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
  

如要進一步瞭解如何設定、檢查及管理這個狀態,請參閱「Chrome 瀏覽器屬性」。

安裝 Chrome Enterprise 進階版擴充功能

Chrome Enterprise 進階版擴充功能是安全閘道不可或缺的一部分,可協助進行驗證。為所有安全閘道使用者安裝擴充功能。如要瞭解如何部署擴充功能,請參閱「查看及設定應用程式和擴充功能」。如要安裝 Chrome Enterprise 進階版擴充功能,請按照下列步驟操作:

  1. 前往 Google 管理控制台。
  2. 依序按一下「Chrome 瀏覽器」>「應用程式和擴充功能」。
  3. 按一下「使用者和瀏覽器」分頁。
  4. 如要新增 Chrome 擴充功能,請按一下「+」按鈕,然後選取「使用 ID 新增 Chrome 應用程式或擴充功能」。
  5. 使用下列 ID 搜尋 Secure Enterprise Browser 擴充功能,然後將安裝政策設為「強制安裝」,套用至機構單位或群組中的所有使用者:

    ekajlcmdfcigmdbphhifahdfjbkciflj
  6. 按一下已安裝的擴充功能,然後在「Policy for extensions」欄位中輸入下列 JSON 值:

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

    替換下列內容:

    • PROJECT_ID:設定安全閘道的專案 ID
    • SECURITY_GATEWAY_ID:安全閘道的 ID

  7. 如要儲存設定,請按一下「儲存」。

舊版 PAC 檔案設定

啟用服務探索後,Chrome 瀏覽器用戶端就能自動偵測流量,並透過安全閘道將流量轉送至設定的應用程式,不必再使用 PAC 檔案手動設定轉送。

如果安全閘道未啟用服務探索功能,則表示您採用舊版設定。您必須設定 PAC 檔案,才能控管 Chrome 瀏覽器用戶端的轉送作業。

如要確認是否採用舊版設定,請使用下列指令,查看是否已啟用服務探索:

gcloud

gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global | grep -i "serviceDiscovery"
      

REST

curl --silent \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" | grep -i "serviceDiscovery"
      

如果指令未傳回任何輸出內容,表示閘道使用的是舊版設定。如果閘道使用舊版設定,系統會透過代管的 PAC 檔案處理轉送作業。

步驟 1:建立及託管 PAC 檔案

  1. 使用下列 JavaScript 建立名為 pac_config.js 的檔案,並將 HOST_NAME 替換為應用程式的網域 (例如 myapp.example.com):

    function FindProxyForURL(url, host) {
      const PROXY = "HTTPS via.prod.securegateway.goog:443";
      const sites = ["HOST_NAME"];
    
      for (const site of sites) {
        if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
          return PROXY;
        }
      }
      return 'DIRECT';
    }
  2. 將 PAC 檔案上傳至代管服務,例如 Cloud Storage bucket。

    • 確認檔案可公開下載。
    • 將 HTTP 標頭 Cache-Control 設為 no-cache,讓瀏覽器一律擷取最新的路由規則。
  3. 複製上傳 PAC 檔案的公開網址。

步驟 2:在 Google 管理控制台中套用 PAC 檔案

  1. 前往 Google 管理控制台。
  2. 依序前往「裝置」>「Chrome」>「設定」。
  3. 選取組織單位或群組,然後按一下「Proxy 模式」。
  4. 在「Proxy 模式」下方,選取「一律使用以下指定的 Proxy 自動設定」。
  5. 在指定欄位中,輸入託管 PAC 檔案的公開網址。
  6. 按一下 [儲存]。

步驟 3:設定 Chrome Enterprise 進階版擴充功能

擴充功能必須處理驗證。這項擴充功能政策與標準設定不同,因為不含 serviceDiscovery 區塊。

  1. 在 Google 管理控制台中,依序前往 「Chrome 瀏覽器」 >「應用程式和擴充功能」。
  2. 前往「使用者和瀏覽器」分頁,確認已新增並強制安裝 Secure Enterprise Browser 擴充功能 (ekajlcmdfcigmdbphhifahdfjbkciflj)。
  3. 按一下擴充功能,然後在「擴充功能政策」欄位中輸入下列 JSON 值:

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": {
            "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
          }
        }
      }
    }
  4. 按一下 [儲存]。

轉換至服務探索設定

如要將舊版安全閘道從 PAC 檔案設定轉換為較新的服務探索設定,您必須手動啟用這項功能並更新設定。

  1. 在安全閘道啟用服務探索:更新現有閘道,啟用服務探索。

    gcloud

    gcloud beyondcorp security-gateways update SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --service-discovery={}
          

    REST

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{ "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID?updateMask=service_discovery"
          
  2. 設定閘道層級存取權政策:在閘道層級授予使用者 roles/beyondcorp.serviceDiscoveryUser 角色,讓他們可以使用服務探索功能。按照「新增服務探索閘道層級繫結」一節的指示操作。

  3. 更新 Chrome Enterprise 進階版擴充功能設定:按照「安裝 Chrome Enterprise 進階版擴充功能」一節的指示更新擴充功能政策。新的 JSON 設定必須包含 "serviceDiscovery": { "routes": {} } 區塊。

  4. 移除舊版 PAC 檔案:服務探索功能啟用後,就不再需要舊版 PAC 檔案。

    1. 在 Google 管理控制台中,依序前往「裝置」>「Chrome」>「設定」>「使用者和瀏覽器設定」>「網路」。
    2. 找出「Proxy 模式」設定。
    3. 移除 Proxy 自動設定 (PAC) 網址,或將設定從「一律使用以下指定的 Proxy 自動設定」切換為適合您網路的模式,例如「允許使用者自行設定」。
    4. 按一下 [儲存]。

使用者體驗

設定完成後,使用者存取受保護的 SaaS 應用程式時,系統會根據套用至應用程式的存取權政策,授予或拒絕存取權。

在 Chrome 中存取應用程式

必須安裝 Chrome Enterprise 進階版擴充功能,才能透過安全閘道導向流量。擴充功能會處理使用者與安全閘道之間的驗證。系統會透過網域政策自動安裝擴充功能。

使用者存取您設定的 SaaS 應用程式時,流量會通過安全閘道,檢查是否符合存取政策。如果使用者通過存取權政策檢查,就會獲得應用程式存取權。

如果授權政策拒絕瀏覽器存取應用程式,使用者會收到 Access denied 訊息。

後續步驟