授予及撤銷存取權

每個主體 (使用者或群組) 都必須經過兩步驟程序,才能存取 Management API 伺服器和 Kubernetes 叢集:

  • 管理 API 伺服器存取權:使用 ClusterRoleBinding 或 RoleBinding,將管理 API 伺服器中的權限授予預先定義的 ClusterRole。

  • Kubernetes 叢集存取權:授予命名空間專屬存取權或叢集範圍存取權。

    • 針對特定命名空間授予存取權:如要授予叢集內特定專案命名空間的存取權,請建立 ProjectRole 和對應的 ProjectRoleBinding。這個程序會將 Kubernetes Role 和 RoleBinding 傳播至叢集中的 Kubernetes Namespace,這對應於 ProjectRole 和 ProjectRoleBinding 相關聯的 Project。

    • 叢集範圍的存取權:如要授予叢集內所有命名空間的存取權,請建立 OrganizationRole 和對應的 OrganizationRoleBinding。這個程序會將 Kubernetes ClusterRole 和 ClusterRoleBinding 傳播至整個 Kubernetes 叢集。

本文適用於平台管理員群組中的對象,他們負責管理所屬機構的權限。

機構 IAM 管理員和專案 IAM 管理員都可以建立更多專案角色和專案角色繫結,授予額外的專案專屬權限。不過,機構 IAM 管理員可以為任何專案建立專案角色和專案角色繫結。另一方面,專案 IAM 管理員只能為他們有權存取的專案建立專案角色和專案角色繫結。

事前準備

管理角色繫結或撤銷存取權前,請先要求必要權限並準備環境。所需角色取決於您是要管理角色繫結,還是要撤銷使用者存取權。

要求 IAM 角色

請與機構 IAM 管理員聯絡,並根據您需要執行的工作要求角色:

  • 機構 IAM 管理員 (organization-iam-admin):在機構和專案層級建立、更新及刪除角色繫結。
  • 機構工作階段管理員 (org-session-admin):撤銷特定區域內使用者的有效工作階段和存取權。

準備環境

如要使用指令列工具管理角色繫結或撤銷存取權,請完成下列設定。

設定角色繫結

您可以設定角色繫結,讓團隊成員在機構或專案層級存取資源。

如要取得設定角色繫結所需的權限,請要求組織 IAM 管理員授予您組織 IAM 管理員角色。

如要指派角色給授權成員,請按照下列步驟操作:

控制台

  1. 登入 GDC 控制台。
  2. 按一下「選取專案」,選取機構或專案。
    • 如要為機構設定角色繫結,請選取機構。
    • 如要為專案設定角色繫結,請選取專案。
  3. 在導覽選單中,依序點選「Identity and Access」>「Access」。
  4. 按一下「新增成員」。
  5. 在「Identity provider」(識別資訊提供者) 清單中,選取識別資訊提供者。
  6. 選擇要新增個別使用者或群組。
  7. 在「使用者名稱或群組別名」欄位中,輸入使用者名稱、電子郵件地址或別名。
  8. 在「角色」清單中,選取要指派給使用者或群組的角色,例如機構層級的「機構檢視者」或專案層級的「專案建立者」。
  9. 按一下「新增」。

該成員會顯示在「授權成員」清單中。

gdcloud

  1. 確認已安裝 gdcloud CLI。

  2. 使用 gdcloud auth login 指令登入,向身分識別提供者驗證身分。詳情請參閱「gcloud CLI 驗證」。

  3. 設定角色繫結。

    • 為機構設定角色繫結:

      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

  1. 匯出角色繫結的環境變數:

    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)。
  2. 將使用者指派給 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:

      1. 匯出必須建立繫結的命名空間:

        export BINDING_NAMESPACE=BINDING_NAMESPACE
        
      2. 執行下列指令來建立 RoleBinding:

        kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
        rolebinding ${USERNAME}-${ROLE_NAME}-binding \
        --role=${ROLE_NAME} --user=${USER_EMAIL} --namespace=${BINDING_NAMESPACE}
        
    • 將使用者指派給 ProjectRole:

      1. 建立 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)。
      2. 套用 projectrolebinding.yaml 檔案:

        kubectl create -f projectrolebinding.yaml
        
    • 將使用者指派給 OrganizationRole:

      1. 建立 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)。
      2. 套用 organizationrolebinding.yaml YAML 檔案:

        kubectl create -f organizationrolebinding.yaml
        

移除角色繫結

不再需要存取權時,請移除成員和相關聯的角色、權限和存取權。

如要移除成員,請按照下列步驟操作:

控制台

  1. 登入 GDC 控制台。
  2. 在導覽選單中,依序點選「Identity and Access」>「Access」。
  3. 在「授權成員」清單中,選取成員。
  4. 按一下 [Remove member]。
  5. 系統提示時,按一下「移除成員」確認。

gdcloud

  1. 確認已安裝 gdcloud CLI。

  2. 使用 gdcloud auth login 指令登入,向身分識別提供者驗證身分。詳情請參閱「gcloud CLI 驗證」。

  3. 移除角色繫結。

    • 移除機構的角色繫結:

      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

  1. 匯出角色繫結的環境變數:

    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:要移除繫結的命名空間。
  2. 刪除 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 氣隙裝置,並移除其角色和權限。您也可以列出使用者在開始和結束時間內的活動和工作階段。

如要撤銷使用者的存取權,請按照下列步驟操作:

  1. 取得撤銷使用者權限所需的權限。請要求機構 IAM 管理員授予您機構工作階段管理員 (org-session-admin) 角色。

  2. 撤銷使用者的存取權:

    gdcloud admin auth revoke --accounts USER_EMAIL
    

    將 USER_EMAIL 替換為要撤銷存取權的使用者電子郵件地址。

    執行指令後,會看到類似下方的輸出內容。這個範例會撤銷使用者 ariel@example.com 的存取權:

    Success: NUMBER of sessions revoked for user ariel@example.com
    

    在本例中,變數 NUMBER 是指使用者擁有的活躍工作階段數。

  3. 再次執行 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