本指南適用於平台管理員,他們需要使用 Google 群組進行授權,為專案的使用者帳戶設定連線閘道。閱讀本頁內容前,請先熟悉總覽中的概念。如要授權個別帳戶,請參閱預設設定。
完成這項設定後,使用者就能透過 Google Cloud CLI、連結閘道和 Google Cloud 控制台,登入已設定的機群叢集。
這項功能會使用與 Google Workspace 或任何 Cloud Identity 版本相關聯的 Google 網路論壇。
支援的叢集類型
您可以透過 Connect 閘道,使用 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 Identity 登入,如果打算透過指令列使用叢集,則會按照「使用 Connect 閘道」一文所述,取得叢集的閘道kubeconfig。 - 使用者執行
kubectl指令,或在Google Cloud 控制台中開啟 Google Kubernetes Engine 的「工作負載」或「物件瀏覽器」頁面,藉此傳送要求。 - Connect 服務會收到要求,並透過 IAM 執行授權檢查。
- Connect 服務會將要求轉送至叢集上執行的 Connect Agent。要求會附上使用者的憑證資訊,用於叢集上的驗證和授權。
- Connect Agent 會將要求轉送至 Kubernetes API 伺服器。
- Kubernetes API 伺服器會將要求轉送至叢集中的
anthos-identity-servicePod,並驗證要求。 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 身分識別服務和 Cloud Resource Manager API,請啟用這些 API:
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。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 身分識別服務和 Cloud Resource Manager API,請啟用這些 API:
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。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的成員。
如要搭配這項功能使用使用者帳戶,該帳戶應與群組使用相同的網域名稱。
設定群組支援
Connect 閘道會使用叢集中的驗證元件,擷取群組成員資訊。如要啟用必要元件,請參閱下列任一文件 (視叢集類型而定):
- 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 身分認證服務」頁面。
按一下「啟用身分識別服務」。
選取要設定的 VMware 和裸機叢集上的 Google Distributed Cloud (僅限軟體)。
按一下「更新設定」。「Edit Identity Service Clusters Config」(編輯身分識別服務叢集設定) 窗格隨即開啟。
在「設定識別資訊提供者」部分,您可以選擇保留、新增、更新或移除識別資訊提供者。
點選「繼續」前往下一個設定步驟。如果您為這項設定選取了至少一個符合資格的叢集,系統會顯示「Google Authentication」(Google 驗證) 專區。
選取「啟用」,為所選叢集啟用 Google 驗證。如需透過 Proxy 存取 Google Identity,請輸入 Proxy 詳細資料。
按一下「更新設定」。這會將身分設定套用至所選叢集。
gcloud
- 啟用機群層級身分識別服務功能,並設定叢集,詳情請參閱「設定機群層級驗證管理」。
在包含 ClientConfig 規格的
auth-config.yaml檔案中,新增下列欄位:spec: authentication: - name: google-authentication-method google: disable: falsegoogle.disable欄位中的false值可啟用群組支援。如要停用群組支援功能,請將這個值修改為true。選用:如要透過 Proxy 存取 Google Identity 識別資訊提供者,請將
proxy欄位新增至上述設定:spec: authentication: - name: google-authentication-method google: disable: false proxy: PROXY_URL將
PROXY_URL替換為要連線至 Google Identity 的 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 Identity 的 Proxy 伺服器位址。例如:http://user:password@10.10.10.10:8888
將 IAM 角色授予 Google 群組
如要透過閘道與已連線的叢集互動,群組需要下列額外 Google Cloud 角色:
roles/gkehub.gatewayAdmin。這個角色可讓群組成員存取 Connect Gateway 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 權限,請參閱「Using RBAC authorization」(使用 RBAC 授權)。
後續步驟
- 瞭解如何使用 Connect 閘道,透過指令列連線至叢集。
- 如需如何使用連線閘道做為 DevOps 自動化程序的一部分,請參閱「與 Cloud Build 整合」教學課程中的範例。