使用第三方身分設定 Connect Gateway

本指南適用於平台管理員,他們需要在專案中設定 Connect 閘道,而專案中的使用者沒有 Google 身分,也不屬於 Google Workspace。在本指南中,這些身分稱為「第三方身分」。閱讀本指南之前,請先熟悉連線閘道總覽中的概念。如要授權個別 Google 帳戶,請參閱「設定 Connect 閘道」。如需 Google 網路論壇支援,請參閱「使用 Google 網路論壇設定 Connect Gateway」。

本指南中的設定可讓使用者透過 Google Cloud CLI、Connect 閘道和 Google Cloud 控制台登入車隊叢集。

支援的叢集類型

您可以透過 Connect 閘道,為下列已註冊的叢集類型設定第三方身分識別的存取權控管:

如要使用這項功能,您可能需要升級地端叢集,請參閱「升級 GKE Enterprise 叢集 (適用於 VMware)」和「升級 GKE Enterprise 裸機叢集」。

如果您需要使用上述未列出的 GKE 叢集環境,請與 Cloud Customer CareConnect 閘道團隊聯絡。

運作方式

總覽所述,使用者可能使用非 Google WorkspaceCloud Identity 的身分識別提供者。透過員工身分聯盟,使用者可以透過第三方身分提供者 (例如 Okta 或 Azure Active Directory),透過 Connect Gateway 存取叢集。與 Google 帳戶不同,第三方使用者是由身分與存取權管理 (IAM) 主體代表,格式如下:

principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
  • WORKFORCE_POOL_ID 是指包含相關第三方身分提供者的工作團隊集區名稱。

  • SUBJECT_VALUE 是指第三方身分對應至 Google 主體。

如果是第三方群組,IAM 主體的格式如下:

principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_VALUE

下圖顯示第三方使用者向啟用這項服務的叢集進行驗證,並對叢集執行指令的一般流程。如要順利完成這項流程,必須在叢集上為使用者或群組套用角色型存取權控管 (RBAC) 政策。

如為個別使用者,叢集必須有使用完整 IAM 主體名稱的 RBAC 政策。

如果使用群組功能,叢集上必須有使用完整 IAM 主體名稱的 RBAC 政策,適用於下列群組:

  1. 包含使用者 alice@example.com 做為成員。

  2. 包含在 Alice 的 Google Cloud 機構中,工作團隊集區內識別資訊提供者的對應中。

這張圖表顯示閘道第三方身分流程

  1. 使用者透過第三方瀏覽器登入,使用第三方身分登入 gcloud。alice@example.com如要透過指令列使用叢集,使用者會取得叢集的閘道 kubeconfig,如「使用 Connect Gateway」一文所述。
  2. 使用者執行 kubectl 指令,或在 Google Cloud 控制台中開啟 Google Kubernetes Engine 的「工作負載」或「物件瀏覽器」頁面,藉此傳送要求。
  3. Connect Gateway 會收到要求,並使用員工身分聯盟處理第三方驗證。
  4. Connect 閘道會使用 IAM 執行授權檢查。
  5. Connect 服務會將要求轉送至叢集上執行的 Connect Agent。要求會附上使用者的憑證資訊,供叢集進行驗證和授權。
  6. Connect Agent 會將要求轉送至 Kubernetes API 伺服器。
  7. Kubernetes API 伺服器會將要求轉送至 GKE Identity Service,後者會驗證要求。
  8. GKE Identity Service 會將第三方使用者和群組資訊傳回 Kubernetes API 伺服器。Kubernetes API 伺服器隨後可根據叢集設定的 RBAC 政策,使用這項資訊授權要求。

事前準備

  • 確認您已安裝下列指令列工具:

    • 最新版 Google Cloud CLI,這是與 Google Cloud互動的指令列工具。
    • Kubernetes 指令列工具 kubectl,用於與叢集互動。

    如果您使用 Cloud Shell 做為與 Google Cloud互動的 Shell 環境,系統會為您安裝這些工具。

  • 確認您已初始化 gcloud CLI,以便搭配專案使用。

  • 本指南假設您專案中已有 roles/owner。如果您不是專案擁有者,可能需要額外權限才能執行部分設定步驟。

  • 如果是 Google Cloud以外的叢集,GKE Identity Service 必須從叢集呼叫 Google API,才能完成驗證。檢查網路政策是否規定輸出流量必須通過 Proxy。

使用員工身分聯盟設定第三方身分屬性對應

請按照與識別資訊提供者對應的操作說明,為 Google Cloud 機構設定工作團隊集區和識別資訊提供者:

啟用 API

如要將閘道新增至專案,請啟用 Connect 閘道 API 和必要的依附元件 API。如果使用者只想透過控制台 Google Cloud 驗證叢集,則不需要啟用 connectgateway.googleapis.com,但必須啟用其餘 API。

gcloud services enable --project=PROJECT_ID  \
connectgateway.googleapis.com \
anthos.googleapis.com \
gkeconnect.googleapis.com \
gkehub.googleapis.com \
cloudresourcemanager.googleapis.com

設定 GKE Identity Service

Connect 閘道的第三方身分支援功能會使用 GKE Identity Service,從 Google 取得群組成員資訊。如要進一步瞭解 GKE Identity Service,請參閱「GKE Identity Service 簡介」。

如果您使用閘道搭配 GKE 叢集,則不需要設定 GKE Identity Service,即可使用第三方身分支援功能。請改為按照「設定要與 RBAC 搭配使用的 Google 網路論壇」一文中的指示操作,然後繼續授予 IAM 角色,透過閘道授予叢集存取權。

如果您使用GKE 連結叢集搭配閘道,則不需要 GKE Identity Service 即可支援第三方身分。請按照所選叢集類型的操作說明,設定第三方身分支援:

確認已安裝 GKE Identity Service

從 1.7 版開始,GKE 叢集預設會安裝 GKE Identity Service (但第三方身分識別支援功能需要 1.13 以上版本)。執行下列指令,確認已在叢集上正確安裝:

kubectl --kubeconfig CLUSTER_KUBECONFIG get all -n anthos-identity-service

CLUSTER_KUBECONFIG 替換為叢集的 kubeconfig 路徑。

為群組設定第三方身分支援

如果叢集或車隊已設定支援 Google 群組,則不需要執行其他步驟,可以直接跳到「授予第三方使用者和群組 IAM 角色」。

如果您在 VMware 或裸機上使用 Google Distributed Cloud,設定 GKE Identity Service 的方式會決定您需要如何設定第三方群組功能。

如果您是第一次使用 GKE Identity Service,可以選擇使用 Fleet API (建議做法) 或 kubectl,設定第三方群組支援功能。

如果您不是第一次使用 GKE Identity Service,請注意下列事項:

  • 如果您已在機群層級設定 GKE Identity Service,使用其他識別資訊提供者,系統會預設啟用第三方群組功能。詳情請參閱下方的「車隊」一節,瞭解可能需要的其他設定。
  • 如果您已為其他識別資訊提供者設定 GKE Identity Service (以叢集為單位),請參閱下方的「Kubectl」Kubectl一節,瞭解如何更新第三方群組功能的設定。

機群

您可以使用 Google Cloud 主控台或指令列,透過 Fleet Feature API 設定第三方群組的存取權。

控制台

如果先前未曾為車隊設定 GKE Identity Service,請按照「設定 GKE Identity Service 的叢集」一文中的操作說明進行。

選取叢集並更新設定

  1. 前往 Google Cloud 控制台的「Feature Manager」頁面。

    前往功能管理工具

  2. 在「身分識別服務」面板中,按一下「詳細資料」。系統會顯示專案的叢集詳細資料。

  3. 按一下「更新身分識別服務」,開啟設定窗格。

  4. 選取要設定的叢集。您可以選擇個別叢集,也可以指定要為所有叢集設定相同的身分識別設定。

  5. 在「設定身分識別提供者」部分,您可以選擇保留、新增、更新或移除身分識別提供者。

  6. 點選「繼續」前往下一個設定步驟。如果您已為這項設定選取至少一個符合資格的叢集,系統會顯示「Google 驗證」部分。

  7. 選取「啟用」,為所選叢集啟用 Google 驗證。如要透過 Proxy 存取 Google 身份識別資訊提供者,請輸入「Proxy」詳細資料。

  8. 按一下「更新設定」。這會將身分識別設定套用至所選叢集。

gcloud

如果您先前未曾為車隊設定 GKE Identity Service,請按照「設定 GKE Identity Service 的叢集」的指示操作。在 auth-config.yaml 檔案中只指定下列設定:

spec:
  authentication:
  - name: google-authentication-method
    google:
      disable: false

使用 Proxy 設定第三方群組存取權

如需透過 Proxy 存取識別資訊提供者,請在 auth-config.yaml 檔案中使用 proxy 欄位。舉例來說,如果叢集位於私人網路中,且需要連線至公開身分識別提供者,您可能就需要設定這項屬性。即使您已為其他供應商設定 GKE Identity Service,也必須新增這項設定。

如要設定 proxy,請按照下列步驟更新現有設定檔 auth-config.yamlauthentication 區段。

  spec:
    authentication:
    - name: authentication-method
      google:
        disable: false
      proxy: PROXY_URL

其中

  • disable (選用) 表示您是否要為叢集啟用或停用第三方群組功能。 根據預設,這個值會設為 false。如要停用這項功能,請將這項政策設為 true

  • PROXY_URL (選用) 是要連線至 Google 身分的 Proxy 伺服器位址。 例如:http://user:password@10.10.10.10:8888

套用設定

如要將設定套用至叢集,請執行下列指令:

gcloud container fleet identity-service apply \
--membership=CLUSTER_NAME \
--config=/path/to/auth-config.yaml

其中

CLUSTER_NAME 是叢集在機群中的專屬成員名稱。

套用後,這項設定會由 GKE Identity Service 控制器管理。控制器會將對 GKE Identity Service 用戶端設定所做的任何本機變更,與此設定中指定的設定進行比對。

kubectl

如要設定叢集,透過第三方群組功能使用 GKE Identity Service,請更新叢集的 GKE Identity Service ClientConfig。這是用於叢集設定的 Kubernetes 自訂資源類型 (CRD)。每個 GKE Enterprise 叢集都有一個名為 defaultClientConfig 資源,位於 kube-public 命名空間中,您可使用設定詳細資料更新該資源。

如要編輯設定,請使用下列指令。

kubectl --kubeconfig CLUSTER_KUBECONFIG -n kube-public edit clientconfig default

如果 kubeconfig 中有多個環境,系統會使用目前的環境。 您可能需要將目前的背景資訊重設為正確的叢集,才能執行指令。

以下範例說明如何使用類型為 google 的設定,透過新的驗證方法更新 ClientConfig,以啟用第三方群組功能。 如果 internalServer 欄位空白,請確認已設為 https://kubernetes.default.svc,如下所示。

spec:
  authentication:
  - google:
      audiences:
      - "CLUSTER_IDENTIFIER"
    name: google-authentication-method
    proxy: PROXY_URL
  internalServer: https://kubernetes.default.svc

其中

CLUSTER_IDENTIFIER (必要) 表示叢集的成員詳細資料。 您可以使用下列指令擷取叢集的成員資格詳細資料:

kubectl --kubeconfig CLUSTER_KUBECONFIG get memberships membership -o yaml

其中

CLUSTER_KUBECONFIG 是叢集 kubeconfig 檔案的路徑。在回應中,請參閱 spec.owner.id 欄位,擷取叢集的成員資格詳細資料。

以下是顯示叢集成員詳細資料的回覆範例:

id: //gkehub.googleapis.com/projects/123456789/locations/global/memberships/xy-ab12cd34ef

對應的格式如下: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP

將 IAM 角色授予第三方使用者和群組

第三方身分需要下列額外 Google Cloud 角色,才能透過閘道與已連線的叢集互動:

  • roles/gkehub.gatewayAdmin。這個角色可讓使用者存取 Connect 閘道 API。
    • 如果使用者只需要連線叢集的唯讀存取權,則可改用 roles/gkehub.gatewayReader
    • 如果使用者需要連線叢集的讀取/寫入權限,請改用 roles/gkehub.gatewayEditor
  • roles/gkehub.viewer。使用者可透過這個角色查看已註冊的叢集成員資格。

以下說明如何將必要角色新增至個別身分和對應群組:

單一身分

如要為專案 PROJECT_ID 的單一身分授予必要角色,請執行下列指令:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=GATEWAY_ROLE \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=roles/gkehub.viewer \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

其中

  • PROJECT_ID:是專案 ID。
  • GATEWAY_ROLEroles/gkehub.gatewayAdminroles/gkehub.gatewayReadergkehub.gatewayEditor
  • WORKFORCE_POOL_ID:工作團隊身分集區 ID。
  • SUBJECT_VALUE:使用者身分。

群組

如要為專案 PROJECT_ID 中特定群組的所有身分授予必要角色,請執行下列指令:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=GATEWAY_ROLE \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=roles/gkehub.viewer \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

其中

  • PROJECT_ID:是專案 ID。
  • GATEWAY_ROLEroles/gkehub.gatewayAdminroles/gkehub.gatewayReadergkehub.gatewayEditor
  • WORKFORCE_POOL_ID:是工作團隊集區 ID。
  • GROUP_ID:是已對應 google.groups 聲明中的群組。

如要進一步自訂 RBAC 政策,例如指定部門屬性,請參閱「使用 Workforce Identity 設定第三方對應」一文,瞭解如何設定身分識別提供者。

如要進一步瞭解如何授予 IAM 權限和角色,請參閱「授予、變更及撤銷資源的存取權」。

設定角色型存取權控管 (RBAC) 政策

最後,每個叢集的 Kubernetes API 伺服器都必須能夠授權 kubectl 指令,這些指令是透過閘道從您指定的第三方使用者和群組傳送而來。您必須為每個叢集新增 RBAC 權限政策,指定主體在叢集中的權限。

RBAC 政策中的主體必須使用與 IAM 繫結相同的格式,第三方使用者開頭為 principal://iam.googleapis.com/,第三方群組開頭為 principalSet://iam.googleapis.com/如果叢集未設定 GKE Identity Service,除了第三方使用者的角色/叢集角色外,您還需要模擬政策。在這種情況下,請按照這些 RBAC 設定步驟,將以 principal://iam.googleapis.com/ 開頭的第三方主體新增為使用者。

以下範例說明如何對已設定 GKE Identity Service 的叢集,授予第三方群組成員 cluster-admin 權限。然後,您可以將政策檔案儲存為 /tmp/admin-permission.yaml,並套用至與目前環境相關聯的叢集。

cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-cluster-admin-group
subjects:
- kind: Group
  name: "principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF
# Apply permission policy to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH -f /tmp/admin-permission.yaml

如要進一步瞭解如何指定 RBAC 權限,請參閱「使用 RBAC 授權」。

後續步驟