每個主體 (使用者或群組) 都必須經過兩步驟程序,才能存取 Management API 伺服器和 Kubernetes 叢集:
管理 API 伺服器存取權:使用
ClusterRoleBinding或RoleBinding,將管理 API 伺服器中的權限授予預先定義的ClusterRole。Kubernetes 叢集存取權:授予命名空間專屬存取權或叢集範圍存取權。
針對特定命名空間授予存取權:如要授予叢集內特定專案命名空間的存取權,請建立
ProjectRole和對應的ProjectRoleBinding。這個程序會將 KubernetesRole和RoleBinding傳播至叢集中的 KubernetesNamespace,這對應於ProjectRole和ProjectRoleBinding相關聯的Project。叢集範圍的存取權:如要授予叢集內所有命名空間的存取權,請建立
OrganizationRole和對應的OrganizationRoleBinding。這個程序會將 KubernetesClusterRole和ClusterRoleBinding傳播至整個 Kubernetes 叢集。
本文適用於平台管理員群組中的對象,他們負責管理所屬機構的權限。
機構 IAM 管理員和專案 IAM 管理員都可以建立更多專案角色和專案角色繫結,授予額外的專案專屬權限。不過,機構 IAM 管理員可以為任何專案建立專案角色和專案角色繫結。另一方面,專案 IAM 管理員只能為他們有權存取的專案建立專案角色和專案角色繫結。
事前準備
管理角色繫結或撤銷存取權前,請先要求必要權限並準備環境。所需角色取決於您是要管理角色繫結,還是要撤銷使用者存取權。
要求 IAM 角色
請與機構 IAM 管理員聯絡,並根據您需要執行的工作要求角色:
- 機構 IAM 管理員 (
organization-iam-admin):在機構和專案層級建立、更新及刪除角色繫結。 - 機構工作階段管理員 (
org-session-admin):撤銷特定區域內使用者的有效工作階段和存取權。
準備環境
如要使用指令列工具管理角色繫結或撤銷存取權,請完成下列設定。
設定角色繫結
您可以設定角色繫結,讓團隊成員在機構或專案層級存取資源。
如要取得設定角色繫結所需的權限,請要求組織 IAM 管理員授予您組織 IAM 管理員角色。
如要指派角色給授權成員,請按照下列步驟操作:
控制台
- 登入 GDC 控制台。
- 按一下「選取專案」,選取機構或專案。
- 如要為機構設定角色繫結,請選取機構。
- 如要為專案設定角色繫結,請選取專案。
- 在導覽選單中,依序點選「Identity and Access」>「Access」。
- 按一下「新增成員」。
- 在「Identity provider」(識別資訊提供者) 清單中,選取識別資訊提供者。
- 選擇要新增個別使用者或群組。
- 在「使用者名稱或群組別名」欄位中,輸入使用者名稱、電子郵件地址或別名。
- 在「角色」清單中,選取要指派給使用者或群組的角色,例如機構層級的「機構檢視者」或專案層級的「專案建立者」。
- 按一下「新增」。
該成員會顯示在「授權成員」清單中。
gdcloud
確認已安裝 gdcloud CLI。
使用
gdcloud auth login指令登入,向身分識別提供者驗證身分。詳情請參閱「gcloud CLI 驗證」。設定角色繫結。
為機構設定角色繫結:
gdcloud organizations add-iam-policy-binding root \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE請替換下列變數:
USER_ACCOUNT:要授予角色的使用者帳戶。這個旗標接受使用者電子郵件地址 (含身分識別提供者前置字元user:idpprefix-user@example.com),或服務帳戶名稱 (含服務帳戶專案serviceAccount:projectName:serviceAccountName)。ROLE_TYPE:您要設定角色繫結的ClusterRole、Role或OrganizationRole。ROLE:要指派給使用者的預先定義或自訂角色名稱 (例如project-creator)。
為專案設定角色繫結:
gdcloud projects add-iam-policy-binding PROJECT \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE請替換下列變數:
PROJECT:要設定角色綁定的專案名稱。USER_ACCOUNT:要授予角色的使用者帳戶。這個旗標接受使用者電子郵件地址 (含身分識別提供者前置字元user:idpprefix-user@example.com),或服務帳戶名稱 (含服務帳戶專案serviceAccount:projectName:serviceAccountName)。ROLE_TYPE:您要設定角色繫結的Role或ProjectRole。ROLE:要指派給使用者的預先定義或自訂角色名稱 (例如project-viewer)。
API
匯出角色繫結的環境變數:
export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG export USERNAME=IDP_PREFIX-USERNAME export ROLE_NAME=ROLE_NAME export USER_EMAIL=IDP_PREFIX-USER_EMAIL更改下列內容:
YOUR_IAM_ADMIN_KUBECONFIG:IAM 管理員的 kubeconfig 檔案路徑。IDP_PREFIX:身分識別提供者前置字元。USERNAME:使用者電子郵件地址中@符號前的使用者名稱部分 (例如paul@example.com中的paul)。ROLE_NAME:使用者需要的角色名稱 (例如project-creator)。如要瞭解角色詳細資料,請參閱「角色定義」。USER_EMAIL:要指派角色的使用者帳戶電子郵件地址 (例如paul@example.com)。
將使用者指派給
ClusterRole、Role、ProjectRole或OrganizationRole:將使用者指派給
ClusterRole:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ clusterrolebinding ${USERNAME}-${ROLE_NAME}-binding \ --clusterrole=${ROLE_NAME} --user=${USER_EMAIL}如果
ClusterRole需要RoleBinding而非ClusterRoleBinding,請參閱「角色定義」,瞭解角色需要哪種繫結類型,並在gpc-system命名空間中建立 RoleBinding:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ rolebinding ${USERNAME}-${ROLE_NAME}-binding \ --clusterrole=${ROLE_NAME} --user=${USER_EMAIL} --namespace=gpc-system將使用者指派給
Role:匯出必須建立繫結的命名空間:
export BINDING_NAMESPACE=BINDING_NAMESPACE執行下列指令來建立
RoleBinding:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ rolebinding ${USERNAME}-${ROLE_NAME}-binding \ --role=${ROLE_NAME} --user=${USER_EMAIL} --namespace=${BINDING_NAMESPACE}
將使用者指派給
ProjectRole:建立
projectrolebinding.yaml檔案:apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectRoleBinding metadata: name: BINDING_NAME namespace: PROJECT_NAME spec: roleRef: apiGroup: resourcemanager.gdc.goog kind: ProjectRole name: ROLE_NAME subjects: - apiGroup: rbac.authorization.k8s.io kind: USER_KIND name: IDP_PREFIX-USER_EMAIL更改下列內容:
BINDING_NAME:使用者可自訂的繫結名稱 (例如user-project-creator-binding)。PROJECT_NAME:您要授予角色的專案名稱。ROLE_NAME:您要指派給使用者的ProjectRole名稱。USER_KIND:使用者類型,可以是User、Group或ServiceAccount。IDP_PREFIX:身分提供者前置字元。USER_EMAIL:要指派角色的使用者帳戶電子郵件地址 (例如paul@example.com)。
套用
projectrolebinding.yaml檔案:kubectl create -f projectrolebinding.yaml
將使用者指派給
OrganizationRole:建立
organizationrolebinding.yaml檔案:apiVersion: resourcemanager.gdc.goog/v1 kind: OrganizationRoleBinding metadata: name: BINDING_NAME namespace: gpc-system spec: roleRef: apiGroup: resourcemanager.gdc.goog kind: OrganizationRole name: ROLE_NAME subjects: - apiGroup: rbac.authorization.k8s.io kind: USER_KIND name: IDP_PREFIX-USER_EMAIL更改下列內容:
BINDING_NAME:使用者可自訂的繫結名稱 (例如user-organization-creator-binding)。ROLE_NAME:您要指派給使用者的OrganizationRole名稱。USER_KIND:使用者類型,可以是User、Group或ServiceAccount。IDP_PREFIX:身分提供者前置字元。USER_EMAIL:要指派角色的使用者帳戶電子郵件地址 (例如paul@example.com)。
套用
organizationrolebinding.yamlYAML 檔案:kubectl create -f organizationrolebinding.yaml
移除角色繫結
不再需要存取權時,請移除成員和相關聯的角色、權限和存取權。
如要移除成員,請按照下列步驟操作:
控制台
- 登入 GDC 控制台。
- 在導覽選單中,依序點選「Identity and Access」>「Access」。
- 在「授權成員」清單中,選取成員。
- 按一下 [Remove member]。
- 系統提示時,按一下「移除成員」確認。
gdcloud
確認已安裝 gdcloud CLI。
使用
gdcloud auth login指令登入,向身分識別提供者驗證身分。詳情請參閱「gcloud CLI 驗證」。移除角色繫結。
移除機構的角色繫結:
gdcloud organizations remove-iam-policy-binding root \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE請替換下列變數:
USER_ACCOUNT:要移除角色的使用者帳戶。這個旗標接受使用者電子郵件地址 (含身分識別提供者前置字元user:idpprefix-user@example.com),或服務帳戶名稱 (含服務帳戶專案serviceAccount:projectName:serviceAccountName)。ROLE_TYPE:要移除角色繫結的ClusterRole、Role或OrganizationRole。ROLE:要從使用者帳戶移除的預先定義或自訂角色名稱 (例如project-creator)。
移除專案的角色繫結:
gdcloud projects remove-iam-policy-binding PROJECT \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE請替換下列變數:
PROJECT:要移除角色綁定的專案名稱。USER_ACCOUNT:要移除角色的使用者帳戶。這個旗標接受使用者電子郵件地址 (含身分識別提供者前置字元user:idpprefix-user@example.com),或服務帳戶名稱 (含服務帳戶專案serviceAccount:projectName:serviceAccountName)。ROLE_TYPE:要移除角色繫結的Role或ProjectRole。ROLE:要從使用者帳戶移除的預先定義或自訂角色名稱 (例如project-viewer)。
API
匯出角色繫結的環境變數:
export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG export USERNAME=IDP_PREFIX-USERNAME export BINDING_NAMESPACE=BINDING_NAMESPACE更改下列內容:
YOUR_IAM_ADMIN_KUBECONFIG:IAM 管理員的 kubeconfig 檔案路徑。IDP_PREFIX:身分識別提供者前置字元。USERNAME:使用者電子郵件地址中@符號前的使用者名稱部分 (例如paul@example.com中的paul)。BINDING_NAMESPACE:要移除繫結的命名空間。
刪除
ClusterRoleBinding、RoleBinding、ProjectRoleBinding或OrganizationRoleBinding,即可撤銷授予使用者帳戶的權限:從使用者帳戶中移除
ClusterRoleBinding:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete clusterrolebinding ${USERNAME}-pa從使用者帳戶中移除
RoleBinding:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete rolebinding ${USERNAME}-pa \ --namespace=${BINDING_NAMESPACE}從使用者帳戶中移除
ProjectRoleBinding:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete projectrolebinding ${USERNAME}-pa \ --namespace=${BINDING_NAMESPACE}從使用者帳戶中移除
OrganizationRoleBinding:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete organizationrolebinding ${USERNAME}-pa \ --namespace=gpc-system
撤銷使用者存取權
如果成員離開貴機構或團隊,您可以撤銷他們對 Google Distributed Cloud (GDC) 氣隙裝置的存取權。撤銷使用者的存取權後,系統會將他們登出 GDC 氣隙裝置,並移除其角色和權限。您也可以列出使用者在開始和結束時間內的活動和工作階段。
如要撤銷使用者的存取權,請按照下列步驟操作:
取得撤銷使用者權限所需的權限。請要求機構 IAM 管理員授予您機構工作階段管理員 (
org-session-admin) 角色。撤銷使用者的存取權:
gdcloud admin auth revoke --accounts USER_EMAIL將 USER_EMAIL 替換為要撤銷存取權的使用者電子郵件地址。
執行指令後,會看到類似下方的輸出內容。這個範例會撤銷使用者
ariel@example.com的存取權:Success: NUMBER of sessions revoked for user ariel@example.com在本例中,變數 NUMBER 是指使用者擁有的活躍工作階段數。
再次執行
gdcloud admin auth revoke指令,確認您已撤銷使用者的存取權。如果成功,您會看到以下內容:No sessions found for account: ariel@example.com
列出所有遭撤銷的使用者
如要查看所有已撤銷存取權的使用者及其活動和工作階段,請按照下列步驟操作:
列出所有在開始和結束時間之間遭撤銷存取權的使用者:
gdcloud admin auth list --format="csv(ACCOUNT, IDENTITY_PROVIDER, CREATION_TIME, EXPIRATION_TIME)"如果成功,您會看到類似以下的輸出內容:
account,identity_provider,creation_time,expiration_time ariel@example.com,example-idp,2023-02-15 22:10:52,2023-02-15 23:10:52