應用程式安全性總覽

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。

進一步瞭解區域 ID

安全防護是 Google Cloud的核心功能,但您仍須採取一些步驟來保護您的 App Engine 應用程式並找出安全漏洞。

請使用下列功能,確保您的 App Engine 應用程式安全無虞。如要進一步瞭解 Google 安全性模型,以及可以採取哪些步驟來保護 Google Cloud 專案,請參閱「Google Cloud Platform 安全性」一文。

HTTPS 要求

您可以透過 HTTPS 要求,以安全的方式存取 App Engine 應用程式。視應用程式的設定方式而定,您可以使用下列幾種選項:

appspot.com 網域
  • 使用 https 網址前置字串,將 HTTPS 要求傳送至 Google Cloud 專案的 default 服務,例如:
    https://PROJECT_ID.REGION_ID.r.appspot.com
  • 如要指定 App Engine 應用程式中的特定資源,請使用 -dot- 語法來區隔您要指定的每項資源,例如:
    https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

  • 如要將 HTTP 網址轉換為 HTTPS 網址,請將各項資源之間的半形句點改為 -dot-,例如:
    http://SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com
    https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com

如要進一步瞭解 HTTPS 網址和指定資源的相關資訊,請參閱要求的轉送方式一文。

自訂網域

如要透過自訂網域傳送 HTTPS 要求,您可以使用 App Engine 佈建的代管安全資料傳輸層 (SSL) 憑證。詳情請參閱使用安全資料傳輸層 (SSL) 保護自訂網域一文。

存取權控管

在每個 Google Cloud 專案中設定存取權控管,以決定哪些使用者可以存取專案內的服務,包括 App Engine。您可以為不同的帳戶指派不同的角色,確保每個帳戶僅具備支援應用程式所需的權限。詳情請參閱「設定存取權控管」。

App Engine 防火牆

App Engine 防火牆可讓您透過一組規則來允許或拒絕來自指定 IP 位址範圍的要求,藉此控管 App Engine 應用程式的存取權。您不必為防火牆封鎖的流量或頻寬支付費用。建立防火牆之後,您就可以套用下列設定:

只允許來自特定網路的流量
確保只有特定網路中的某個 IP 位址範圍可以存取您的應用程式。舉例來說,您可以在應用程式測試階段建立規則,只允許公司私人網路中的 IP 位址範圍。接著,您可以在應用程式發布流程的各個階段中建立及修改防火牆規則,只允許特定機構 (您的公司或外部機構) 存取您的應用程式,藉此控管存取權範圍,直到應用程式公開發布為止。
只允許來自特定服務的流量
確保所有連入 App Engine 應用程式的流量都已先透過特定服務的 Proxy 進行處理。舉例來說,如果您使用第三方網頁應用程式防火牆 (WAF) 將導向應用程式的要求傳送至 Proxy,您可以建立如下的防火牆規則:除了由 WAF 轉送的要求以外,所有其他要求一律拒絕。
封鎖違規 IP 位址
雖然 Google Cloud 提供了許多防範攻擊的機制,但您仍可以使用 App Engine 防火牆,封鎖從帶有不良意圖的 IP 位址連向應用程式的流量,或防止應用程式受到阻斷服務攻擊和類似形式的濫用行為。您可以將 IP 位址或子網路新增至拒絕清單,這樣系統就會拒絕轉送來自這些位址和子網路的要求,將要求阻隔在 App Engine 應用程式之外。

如要進一步瞭解如何建立規則和設定防火牆,請參閱透過防火牆控管應用程式存取權一文。

輸入控管

本節說明如何使用入口設定限制對 App Engine 應用程式的網路存取權。在網路層級,根據預設,網路上的任何資源都能透過 appspot URL 或在 App Engine 中設定的自訂網域存取您的 App Engine 應用程式。例如,appspot.com 網址可以採用下列格式:SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com

您可以指定不同的入口設定來變更這項預設設定。所有入口路徑 (包括預設 appspot.com 網址) 都會受到入口設定的影響。Ingress 是在服務層級設定。

可用的輸入設定

可用的設定如下:

設定 說明
內部 最嚴格。允許來自已連結至專案虛擬私有雲網路的資源的請求,例如:
來自這些來源的要求會留在 Google 網路內,即使是透過 appspot.com URL 存取您的服務也是如此。來自其他來源 (包括網際網路) 的要求無法透過 appspot.com 網址或自訂網域存取您的服務。系統不支援多租戶模式,也就是在同一個專案中有多個信任網域。
內部和雲端負載平衡 允許來自下列資源的要求:
  • 內部設定允許的資源 (限制較嚴格)
  • 外部應用程式負載平衡器
使用「內部和雲端負載平衡」設定,接受來自外部應用程式負載平衡器的要求,但不要直接接受來自網際網路的要求。對 appspot.com 網址的請求會略過外部應用程式負載平衡器,因此這項設定可防止外部要求存取 appspot.com 網址。
全部 最寬鬆。允許所有要求,包括直接從網際網路傳送至 appspot.com 網址的要求。

存取內部服務

請考量下列因素:

  • 對於共用虛擬私有雲的請求,只有在共用虛擬私有雲主機專案中部署 App Engine 應用程式時,流量才會視為內部流量。如果 App Engine 應用程式是部署在共用虛擬私有雲服務專案中,則只有應用程式專案擁有的網路流量才會歸類為內部流量。所有其他流量 (包括其他共用虛擬私有雲的流量) 都屬於外部流量。

  • 存取內部服務時,請使用其公開網址 (預設 appspot.com 網址或在 App Engine 中設定的自訂網域) 以正常方式呼叫服務。

  • 如果要求來自 Compute Engine VM 執行個體或在相同專案內的 VPC 網路中執行的其他資源,則不需要進一步設定。

  • 如果是來自其他 App Engine 服務或同一專案中 Cloud Run 或 Cloud Run 函式的要求,請將服務或函式連線至虛擬私有雲網路,並透過連接器轉送所有傳出流量,如「連線至共用虛擬私有雲網路」一文所述。

  • 同一個專案中虛擬私人雲端網路中的資源發出的請求,即使來源資源有公開 IP 位址,也會歸類為內部。

  • 透過 Cloud VPN 連線至 VPC 網路的內部部署資源所提出的要求,會視為 internal

查看 ingress 設定

控制台

  1. 前往「App Engine Services」(App Engine 服務) 頁面。

    前往「Services」(服務) 頁面

  2. 找出「Ingress」欄。針對每項服務,這個欄中的值會顯示「所有」 (預設)、「內部 + 負載平衡」或「內部」等入口設定。

gcloud

如要使用 gcloud CLI 查看服務的入口設定,請按照下列步驟操作:

gcloud app services describe SERVICE

SERVICE 改為您的服務名稱。

例如,如要查看預設服務執行作業的入口設定和其他資訊,請執行下列操作:

gcloud app services describe default

編輯輸入設定

控制台

  1. 前往「App Engine Services」(App Engine 服務) 頁面。

    前往「Services」(服務) 頁面

  2. 選取要編輯的服務。

  3. 按一下「編輯入站設定」

  4. 從選單中選取所需的入口設定,然後按一下「儲存」

gcloud

如要使用 gcloud CLI 更新服務的入口設定,請按照下列步驟操作:

gcloud app services update SERVICE --ingress=INGRESS

取代:

  • SERVICE:服務名稱。
  • INGRESS:要套用的輸入控管。只能設為 allinternal-onlyinternal-and-cloud-load-balancing

例如:

  • 如要更新 App Engine 應用程式的預設服務,只接受來自同一專案中 Cloud Load Balancing 和 VPC 網路的流量,請按照下列步驟操作:

    gcloud app services update default --ingress=internal-and-cloud-load-balancing
  • 如要更新名為「internal-requests」的服務,讓其只接受來自相同專案內虛擬私有雲網路的流量,請按照下列步驟操作:

    gcloud app services update internal-requests --ingress=internal-only

輸出設定

如果您使用無伺服器虛擬私有雲端存取,可以為 App Engine 服務指定出口設定。

根據預設,只有內部 IP 位址和內部 DNS 名稱的要求會透過無伺服器虛擬私人雲端存取連接器轉送。您可以在 appengine-web.xml 檔案中指定服務的輸出設定。

外送設定與 網址擷取服務不相容。如果您尚未停止使用 URLFetchService,請立即停止。使用 urlfetch 程式庫會忽略輸出設定,且要求不會透過無伺服器虛擬私有雲存取連接器路由。

如要設定 App Engine 服務的傳出行為,請按照下列步驟操作:

  1. <egress-setting> 元素新增至服務 appengine-web.xml 檔案中的 <vpc-access-connector> 元素:

    <vpc-access-connector>
     <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name>
     <egress-setting>EGRESS_SETTING</egress-setting>
    </vpc-access-connector>

    取代:

    • PROJECT_ID 改成您的 Google Cloud 專案 ID
    • REGION 連接器所在的地區
    • CONNECTOR_NAME 替換為連接器名稱
    • EGRESS_SETTING 與下列任一值:
      • private-ranges-only 預設值。只有針對 RFC 1918RFC 6598 IP 位址範圍或內部 DNS 名稱的要求,才會轉送至您的 VPC 網路。所有其他要求都會直接轉送至網際網路。
      • all-traffic 服務的所有外連要求都會轉送至虛擬私有雲網路。要求會受到 VPC 網路的防火牆、DNS 和路由規則限制。請注意,將所有傳出要求轉送至虛擬私有雲網路,會增加 Serverless VPC Access 連接器處理的輸出量,並可能產生費用
  2. 部署服務:

    gcloud app deploy WEB-INF/appengine-web.xml
    

Security Scanner

Google Cloud Web Security Scanner 會檢索您的 App Engine 應用程式、追蹤起始網址涵蓋的所有連結,並盡可能執行大量的使用者輸入內容和事件處理常式,藉此找出安全漏洞。

如要使用 Security Scanner,您必須是Google Cloud 專案的擁有者。如要進一步瞭解如何指派角色,請參閱「設定存取權控管」。

您可以透過 Google Cloud 主控台執行安全性掃描,找出 App Engine 應用程式中的安全漏洞。如要進一步瞭解如何執行 Security Scanner,請參閱「使用 Web Security Scanner」。