閘道安全性

本頁面說明在 Google Kubernetes Engine (GKE) 中保護閘道的不同方法。您也可以瞭解如何保護閘道。

閘道安全防護的運作方式

閘道代表負載平衡器的前端。您可以透過驗證和加密機制,保護閘道的兩條路徑:

  • 用戶端到閘道:流量源自用戶端,並在閘道終止。
  • 閘道到 Pod:流量源自閘道,並在後端 Pod 終止。

下圖顯示驗證及加密閘道的兩種路徑:

除了加密之外,您也可以使用授權政策保護用戶端到閘道的路徑。授權政策會檢查傳入的要求,並根據用戶端 ID、HTTP 標頭和要求路徑強制執行存取控管,然後將流量轉送至後端 Pod,藉此啟用零信任架構。

本頁說明如何使用在閘道層級上傳及管理的憑證,保護用戶端到閘道的路徑。如要瞭解如何保護閘道至 Pod 的流量,請參閱「使用 TLS 保護負載平衡器至應用程式的流量」。

優點

您可以使用 Gateway API,以多種方式保護應用程式,讓與 Gateway 互動的不同角色都能靈活運用。

誰擁有網域和 TLS 設定?

Gateway API 模型會導入兩個角色,分別是使用或部署 Gateway 的角色:

  • 平台管理員:叢集運算子是整個叢集的管理員。他們負責管理政策、網路存取權和應用程式權限。
  • 應用程式開發人員:應用程式開發人員定義應用程式和服務設定。

下圖顯示閘道和 HTTPRoute 資源中的欄位,這些欄位會影響 store-v1 和 store-v2 這兩個應用程式的 TLS 和網域擁有權。

在圖表中,叢集運算子會控管下列項目:

  • 應用程式開發人員可在每個命名空間中,為應用程式使用哪些網域。
  • 終止不同網域的特定憑證。
  • 閘道擁有者提供的憑證。
  • HTTPRoute 擁有者是否可指定自己的主機名稱,以產生憑證。

如果 Gateway 定義允許,應用程式開發人員可以控管產生憑證的主機名稱。

這種作業工作分離方式可讓應用程式開發人員部署及管理自己的 HTTPRoute,以利分散式控制,並讓平台管理員部署及管理 Gateway,以集中控管 TLS。

閘道憑證管理

您可以使用下列任一方法保護閘道:

如果您使用 Kubernetes Secrets 或 Compute Engine API 的 SslCertificate 資源,則單一閘道最多可附加 15 個憑證。

如果申請提高配額,Certificate Manager 最多可為每個負載平衡器附加 10,000,000 個憑證。

如要進一步瞭解 Cloud de Confiance 安全資料傳輸層 (SSL) 憑證,請參閱「安全資料傳輸層 (SSL) 憑證總覽」。

Kubernetes Secret

Gateway API 規格支援 Kubernetes Secrets,可儲存憑證並附加至 Gateway。您可以使用 Gateway.spec.tls.certificateRef 欄位,將一或多個 Kubernetes Secret 與閘道建立關聯。

透過 Kubernetes Secret 保護的 Gateway 資源須符合下列規定:

  • 您必須將 Gateway 監聽器 port 和 protocol 設為 443 和 HTTPS。
  • 您必須將 listener.tls.mode 欄位設為 Terminate。
  • 您必須在 listeners.tls 區塊中參照 TLS 憑證。

使用 Kubernetes Secret 保護的閘道資源有以下限制:

  • 只有 HTTPS 接聽程式會使用指定的祕密終止流量,但您可以指定多個接聽程式,混合使用 HTTP 和 HTTPS。
  • 如果同一個閘道有多個使用 HTTPS 的監聽器,每個監聽器都必須有專屬的主機名稱。
  • 您只能省略單一主機名稱,或為每個通訊埠和通訊協定配對指派 *。
  • 每個閘道只能指派一個預設憑證。

如要瞭解如何使用 Kubernetes Secret 保護 Gateway,請參閱「使用 Kubernetes Secret 保護 Gateway」。

SSL 憑證

SSL 憑證會儲存憑證,並將憑證傳送至負載平衡器。SSL 憑證可以是自行管理或 Google 代管。

  • 自行管理的 SSL 憑證是您自行取得、佈建及更新的憑證。
  • Google 代管的 SSL 憑證是 Cloud de Confiance by S3NS 自動取得、管理及更新的憑證。

如要進一步瞭解這兩種憑證的差異,請參閱「SSL 憑證總覽」。

SSL 憑證的範圍和位置必須與使用該憑證的閘道範圍和位置相符。舉例來說,區域閘道無法使用全域 SSL 憑證。

下表列出各 GatewayClass 的 SSL 憑證範圍和位置規定:

GatewayClass SSL 憑證範圍 SSL 憑證位置
gke-l7-global-external-managed 全球 SSL 憑證 全球
gke-l7-global-external-managed-mc
gke-l7-gxlb
gke-l7-gxlb-mc
gke-l7-regional-external-managed 區域性 SSL 憑證 必須與閘道位於相同區域
gke-l7-regional-external-managed-mc
gke-l7-cross-regional-internal-managed-mc
gke-l7-rilb
gke-l7-rilb-mc

Google 代管的 SSL 憑證與區域性閘道不相容。如要保護區域閘道,請改用 Certificate Manager。

如要瞭解如何使用 SSL 憑證保護 Gateway,請參閱「使用 SSL 憑證保護 Gateway」。

Certificate Manager

Certificate Manager是集中管理 TLS 憑證的位置。

使用 Certificate Manager 保護 Gateway 時,您可以執行下列操作:

  • 直接從您在 Certificate Manager 中建立的閘道參照 CertificateMap。
  • 管理自己的憑證。
  • 縮短憑證傳播時間。
  • 使用 Cloud Monitoring 監控過期憑證和憑證傳播。

Certificate Manager 支援自行管理和 Google 代管的 SSL 憑證。如要瞭解如何使用 Certificate Manager 保護 Gateway 安全,請參閱「使用 Certificate Manager 保護 Gateway 安全」。

GatewayClass TLS 支援

下表說明 GKE 為每個 GatewayClass 支援的 TLS 終止方法:

GatewayClass gke-l7-global-external-managed
gke-l7-global-external-managed-mc
gke-l7-gxlb
gke-l7-gxlb-mc
gke-l7-regional-external-managed
gke-l7-regional-external-managed-mc
gke-l7-rilb
gke-l7-rilb-mc
gke-l7-cross-regional-internal-managed-mc
用戶端對閘道 TLS 支援 支援
閘道至後端 TLS 支援 支援
Cloud de Confiance 憑證資源 全球 SSL 憑證
CertificateMap
區域性 SSL 憑證
使用 Kubernetes Secret 自行管理憑證 支援 支援 不支援
自行管理的 Compute Engine SSL 憑證 支援 支援 不支援
Google 代管的 Compute Engine SSL 憑證 支援 不支援 不支援
透過 Certificate Manager 管理自行管理的 SSL 憑證 支援 支援 支援
使用 Certificate Manager 取得 Google 代管的 SSL 憑證 支援 支援 支援

授權和存取控管

GKE Gateway 支援身分型存取控管,方法是使用 GCPAuthzPolicy 自訂資源。平台管理員可透過這項資源,為南北向流量定義明確的 ALLOW 或 DENY 規則。

此外,閘道可使用 GCPAuthzExtension 資源與 Service Extensions 整合。這項資源可讓閘道對外部、自訂或第三方授權引擎 (例如 Identity-Aware Proxy) 進行內嵌呼叫,即時評估要求。

後續步驟