本指南適用於平台管理員,他們需要使用 Google 群組授權,為專案的使用者帳戶設定連線閘道。閱讀本頁面之前,請先熟悉總覽中的概念。如要授權個別帳戶,請參閱預設設定。
完成這項設定後,使用者就能透過 Google Cloud CLI、連線閘道和 Google Cloud 控制台登入已設定的機群叢集。
這項功能會使用與 Google Workspace 或任何版本的 Cloud Identity 相關聯的 Google 群組。
支援的叢集類型
您可以透過連線閘道,使用 Google 群組為下列叢集類型設定存取控管:
- GKE on Google Cloud:所有可用版本。如要設定 Connect Gateway,請設定 RBAC 適用的 Google 網路論壇,然後將 IAM 角色授予 Google 網路論壇。
- VMware 和裸機適用的 Google Distributed Cloud (僅限軟體):所有可用版本。
- Google Distributed Cloud 連結網路方案:所有可用版本。
- GKE 附加叢集:1.28.0-gke.2 以上版本。
AWS 上的 GKE 和 Azure 上的 GKE:所有可用版本。
如要在上述清單以外的環境中使用這項功能,請與 Cloud Customer Care 或連線閘道團隊聯絡。
運作方式
如總覽所述,根據使用者是否為 Google 網路論壇 (即在 Google Workspace 中建立的群組) 成員,授予使用者叢集存取權通常很有用。根據群組成員資格授權,表示您不必為每個帳戶分別設定授權,政策管理和稽核作業也更簡單。舉例來說,您可以輕鬆與團隊共用叢集存取權,當有人加入或離開團隊時,不必再手動新增/移除叢集中的個別使用者。您可以設定連線閘道,取得登入叢集之每位使用者的 Google 群組成員資格資訊。然後在存取控管政策中使用這項資訊。
下圖顯示使用者向叢集進行驗證,並對叢集執行指令的典型流程 (已啟用這項服務)。如要順利完成這項流程,叢集必須有群組的 RBAC 政策,且該群組:
包含使用者「
alice@example.com」做為成員。是
gke-security-groups@example.com的巢狀群組。
- 使用者
alice@example.com使用 Google 身分登入,並視是否要透過指令列使用叢集,取得叢集的閘道kubeconfig,如使用連線閘道一文所述。 - 使用者執行
kubectl指令,或在Google Cloud 控制台中開啟 Google Kubernetes Engine 的「工作負載」或「物件瀏覽器」頁面,藉此傳送要求。 - Connect 服務會收到要求,並透過 IAM 執行授權檢查。
- Connect 服務會將要求轉送至叢集上執行的 Connect Agent。要求會附上使用者的憑證資訊,供叢集進行驗證和授權。
- Connect Agent 會將要求轉送至 Kubernetes API 伺服器。
- Kubernetes API 伺服器會將要求轉送至叢集中的
anthos-identity-servicePod,該 Pod 會驗證要求。 anthos-identity-servicePod 會將使用者和群組資訊傳回 Kubernetes API 伺服器。Kubernetes API 伺服器隨後會根據叢集設定的 RBAC 政策,使用這項資訊授權要求。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init 啟用 Connect Gateway、GKE Connect、GKE Hub、Anthos Identity Service 和 Cloud Resource Manager API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable connectgateway.googleapis.com
gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com -
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init 啟用 Connect Gateway、GKE Connect、GKE Hub、Anthos Identity Service 和 Cloud Resource Manager API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable connectgateway.googleapis.com
gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com - 如果是 Google Cloud以外的叢集,叢集中的驗證元件必須呼叫 Cloud Identity API。檢查您是否有網路政策,規定叢集的輸出流量必須通過 Proxy。
必要的角色
如要取得設定連線閘道和叢集所需的權限,請要求管理員授予您專案的編輯者 (roles/editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
設定使用者和群組
請確認要搭配這項功能使用的群組已設定如下:
- 請確認貴機構的 Google Workspace 中有格式為
gke-security-groups@YOUR-DOMAIN的群組。如果沒有這類群組,請按照「在貴機構中建立群組」一文中的操作說明,使用 Google 管理控制台建立群組。 - 按照「將群組新增到其他群組中」一文中的操作說明,將要用於存取控管的群組新增為
gke-security-groups的巢狀群組。請勿將個別使用者新增為gke-security-groups的成員。
如要使用這項功能,使用者帳戶的網域名稱必須與群組相同。
設定群組支援
連線閘道會使用叢集中的驗證元件,擷取群組成員資訊。如要啟用必要元件,請根據叢集類型參閱下列其中一份文件:
- GKE on Google Cloud: 設定 RBAC 適用的 Google 群組, 然後跳至「將 IAM 角色授予群組」一節。
- GKE 附加叢集:
Google Distributed Cloud:更新叢集中的 ClientConfig 自訂資源,啟用群組支援功能。Distributed Cloud 會在每個叢集的
kube-public命名空間中,自動建立名為default的 ClientConfig。如要確認這個自訂資源是否存在,請執行下列指令:kubectl --kubeconfig CLUSTER_KUBECONFIG get ClientConfig default -n kube-public將
CLUSTER_KUBECONFIG替換為叢集 kubeconfig 的路徑。
以下各節說明如何更新 ClientConfig 自訂資源,以啟用群組支援。這些章節僅適用於 Google Distributed Cloud 叢集。如果是其他類型的叢集,例如 GKE onGoogle Cloud、GKE on AWS 和 GKE on Azure,請跳至「將 IAM 角色授予群組」一節。
如果是 Distributed Cloud,您可以為個別叢集或機群設定群組支援服務。您使用的叢集類型會決定如何設定群組支援,如下所示:
- Distributed Cloud connected:僅限個別叢集。 不支援機群層級設定。
- VMware 和裸機適用的 Google Distributed Cloud (僅限軟體):個別叢集或叢集群組。
使用 GKE Fleet API 設定群組支援
如果是 VMware 和裸機上的 Google Distributed Cloud (僅限軟體),您可以在機群層級設定群組支援。如果您先前已設定車隊層級的驗證 (例如使用其他識別資訊提供者),群組驗證功能就會處於啟用狀態。不過,如果網路政策規定輸出流量必須通過 Proxy,您就必須更新現有設定,加入該 Proxy 的相關資訊。
如要在機群層級設定群組支援,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「GKE 身分認證服務」頁面。
按一下「啟用 Identity 服務」。
選取要設定的 VMware 和裸機叢集上的 Google Distributed Cloud (僅限軟體)。
按一下「更新設定」。「編輯 Identity Service 叢集設定」窗格隨即開啟。
在「設定識別資訊提供者」部分,您可以選擇保留、新增、更新或移除識別資訊提供者。
點選「繼續」前往下一個設定步驟。如果已為這項設定選取至少一個符合資格的叢集,系統會顯示「Google 驗證」部分。
選取「啟用」,為所選叢集啟用 Google 驗證。如要透過 Proxy 存取 Google 識別資訊提供者,請輸入 Proxy 詳細資料。
按一下「更新設定」。這會將身分識別設定套用至所選叢集。
gcloud
- 啟用機群層級身分識別服務功能,並設定叢集,詳情請參閱「設定機群層級的驗證管理」。
在包含 ClientConfig 規格的
auth-config.yaml檔案中,新增下列欄位:spec: authentication: - name: google-authentication-method google: disable: falsegoogle.disable欄位中的false值可啟用群組支援。 如要停用群組支援功能,請將這個值修改為true。選用:如需透過 Proxy 存取 Google 識別資訊提供者,請將
proxy欄位新增至上述設定:spec: authentication: - name: google-authentication-method google: disable: false proxy: PROXY_URL將
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替換為叢集在機群中的專屬成員名稱。
在機群層級設定群組支援後,機群控制器會管理設定。機群層級設定會覆寫您對特定叢集設定所做的任何本機變更。
為個別叢集設定群組支援
對於所有 Distributed Cloud 叢集 (包括 Distributed Cloud connected),請在每個叢集中更新 default ClientConfig,啟用群組支援:
取得叢集的成員詳細資料:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get memberships membership -o yaml將
USER_CLUSTER_KUBECONFIG替換為叢集的 kubeconfig 檔案路徑。如果 kubeconfig 中有多個環境,系統會使用目前的環境。執行指令前,您可能需要將目前的環境重設為正確的叢集。在回應中,請參閱
spec.owner.id欄位,擷取叢集的成員詳細資料。會員 ID 的格式為//gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP。輸出結果會與下列內容相似:
id: //gkehub.googleapis.com/projects/123456789/locations/global/memberships/xy-ab12cd34ef在叢集中開啟
defaultClientConfig 進行編輯:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default如要啟用群組支援功能,請將
google欄位新增至spec.authentication欄位:spec: internalServer: https://kubernetes.default.svc authentication: - google: audiences: - "CLUSTER_IDENTIFIER" name: google-authentication-method將
CLUSTER_IDENTIFIER替換為叢集的成員資格詳細資料。確認
internalServer欄位的值為https://kubernetes.default.svc。選用:如需透過 Proxy 存取 Google 識別資訊提供者,請將
proxy欄位新增至上述設定:spec: internalServer: https://kubernetes.default.svc authentication: - google: audiences: - "CLUSTER_IDENTIFIER" name: google-authentication-method proxy: PROXY_URL將
PROXY_URL替換為要連線至 Google 身分的 Proxy 伺服器位址。例如:http://user:password@10.10.10.10:8888
將 IAM 角色授予 Google 群組
如要透過閘道與已連線的叢集互動,群組需要下列額外 Google Cloud 角色:
roles/gkehub.gatewayAdmin。這個角色可讓群組成員存取連線閘道 API。- 如果群組成員只需要連線叢集的唯讀存取權,則可改用
roles/gkehub.gatewayReader。 - 如果群組成員需要連線叢集的讀取/寫入權限,請改用
roles/gkehub.gatewayEditor。
- 如果群組成員只需要連線叢集的唯讀存取權,則可改用
roles/gkehub.viewer。這個角色可讓群組成員查看已註冊的叢集成員資格。
您可以使用 gcloud projects add-iam-policy-binding 指令授予這些角色,如下所示:
gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=GATEWAY_ROLE PROJECT_ID gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=roles/gkehub.viewer PROJECT_ID
其中
- GROUP_NAME 是要授予角色的 Google 群組
- DOMAIN 是您的 Google Workspace 網域
- GROUP_NAME@DOMAIN 是 gke-security-groups@DOMAIN 的巢狀群組
- GATEWAY_ROLE 是
roles/gkehub.gatewayAdmin、roles/gkehub.gatewayReader或gkehub.gatewayEditor其中之一。 - PROJECT_ID 是您的專案
如要進一步瞭解如何授予 IAM 權限和角色,請參閱「授予、變更及撤銷資源的存取權」。
設定角色型存取控管 (RBAC) 政策
最後,每個叢集的 Kubernetes API 伺服器都必須能夠授權來自指定群組的 kubectl 指令 (這些指令會透過閘道傳送)。您必須為每個叢集新增 RBAC 權限政策,指定群組在叢集中的權限。
在下列範例中,您會看到如何授予 cluster-admin-team 群組成員 cluster-admin 叢集權限、將政策檔案儲存為 /tmp/admin-permission.yaml,並將其套用至與目前環境相關聯的叢集。請務必在 gke-security-groups 群組底下加入 cluster-admin-team 群組。
cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gateway-cluster-admin-group
subjects:
- kind: Group
name: cluster-admin-team@example.com
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 授權」。
後續步驟
- 瞭解如何使用連線閘道,從指令列連線至叢集。
- 如需如何將連線閘道納入 DevOps 自動化作業的範例,請參閱「與 Cloud Build 整合」教學課程。