為 GKE 啟用 IAP

本頁面說明如何使用 Identity-Aware Proxy (IAP) 保護 Google Kubernetes Engine (GKE) 執行個體。

總覽

IAP 已透過 GKE 的輸入整合。這項整合功能可讓您控制員工的資源層級存取權,而非使用 VPN。

在 GKE 叢集中,連入流量是由 Cloud Load Balancing 的元件「HTTP(S) 負載平衡」處理。HTTP(S) 負載平衡器通常是由 Kubernetes Ingress 控制器設定。輸入控制器會從 Kubernetes 輸入物件取得設定資訊,這個輸入物件與一或多個 Service 物件相關聯。每個 Service 物件都會保留用來將傳入要求導向特定 Pod 及通訊埠的轉送資訊。

從 Kubernetes 1.10.5-gke.3 版開始,您可以為負載平衡器新增設定,方法是建立服務與 BackendConfig 物件之間的關聯。BackendConfig 是在 kubernetes/ingress-gce 存放區定義的自訂資源定義 (CRD)。

Kubernetes 輸入控制器會讀取 BackendConfig 中的設定資訊,並據此設定負載平衡器。BackendConfig 會保留 Cloud Load Balancing 專屬的設定資訊,並且可讓您為每個 HTTP(S) 負載平衡後端服務定義單獨的設定。

事前準備

如要為 GKE 啟用 IAP,請先準備好下列項目:

  • 已啟用計費功能的 Google Cloud 主控台專案。
  • 一或多個 GKE 執行個體的群組,由 HTTPS 負載平衡器提供服務。當您在 GKE 叢集中建立輸入物件時,系統應會自動建立負載平衡器。
  • 已註冊至您負載平衡器位址的網域名稱。
  • 確認所有要求都擁有身分識別資訊的應用程式程式碼。

IAP 會使用 Google 代管的 OAuth 用戶端來驗證使用者。只有機構內的使用者可以存取啟用 IAP 的應用程式。如要允許機構外使用者存取,請參閱「為外部應用程式啟用應用程式內購功能」。

啟用 IAP

如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定。如要設定 OAuth 同意畫面,請參閱「設定 OAuth 同意畫面」。

如果您執行的是 GKE 叢集 1.24 以上版本,可以使用 Kubernetes Gateway API 設定 IAP 和 GKE。如要這麼做,請完成下列步驟,然後按照「設定應用程式內商品」中的操作說明操作。請勿設定 BackendConfig

設定 IAP 存取權

  1. 前往「Identity-Aware Proxy」頁面
    前往「Identity-Aware Proxy」頁面
  2. 選取要使用 IAP 保護的專案。
  3. 找出要授予存取權的資源,然後勾選旁邊的核取方塊。

    如果沒有看到資源,請確認資源已建立,且 BackendConfig Compute Engine Ingress 控制器已同步。

    如要確認後端服務是否可用,請執行下列 gcloud 指令:

    gcloud compute backend-services list
  4. 在右側面板中,按一下「新增主體」
  5. 在顯示的「Add principals」(新增主體) 對話方塊中,輸入群組或個別使用者的電子郵件地址,其應擁有專案的「IAP-Secured Web App User」(受 IAP 保護的網路應用程式使用者) 角色。

    下列類型的主體可以擁有這個角色:

    • Google 帳戶:user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com

    請務必新增您可以存取的 Google 帳戶。

  6. 從「Roles」(角色) 下拉式清單中選取「Cloud IAP」>「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者)
  7. 按一下「Save」(儲存)

設定 BackendConfig

您可以新增 iap 區塊,為 IAP 設定 BackendConfig。

iap 區塊新增至 BackendConfig

如要為 IAP 設定 BackendConfig,請指定 enabled 值。請確認您具備 compute.backendServices.update 權限,然後將 iap 區塊新增至 BackendConfig。

如要使用 1.16.8-gke.3 以上版本的 GKE,請使用 cloud.google.com/v1 API 版本。 如果使用的是舊版 GKE,請使用 cloud.google.com/v1beta1

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: CONFIG_DEFAULT
  namespace: my-namespace
spec:
  iap:
    enabled: true

將服務通訊埠與 BackendConfig 建立關聯

此外,您還必須將服務通訊埠與您的 BackendConfig 建立關聯來觸發啟用 IAP。如要建立關聯,其中一個方法是將服務的所有通訊埠預設為 BackendConfig,方法是將下列註解新增至 Service 資源:

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}'

驗證 BackendConfig

如要測試設定,請執行 kubectl get event。如果看到「no BackendConfig for service port exists」訊息,表示您已成功將服務通訊埠與 BackendConfig 建立關聯,但系統找不到 BackendConfig 資源。如果您尚未建立 BackendConfig 資源、在錯誤的命名空間中建立 BackendConfig 資源,或是在服務註解中拼錯參照名稱,都可能發生這種錯誤。

停用 IAP

如要關閉 IAP,請將 BackendConfig 中的 enabled 設為 false。若您將 IAP 區塊從 BackendConfig 刪除,將保留所有設定。舉例來說,如果 IAP 處於啟用狀態,而您刪除該區塊,則 IAP 仍將維持啟用狀態。

後續步驟