授予及撤銷存取權

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

  • 管理 API 伺服器存取權:使用 ClusterRoleBindingRoleBinding,在管理 API 伺服器中授予主體權限,以存取預先定義的 ClusterRole

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

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

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

角色 (IO、PA、AO) 並非角色,而是對應至特定權限並指派給個別使用者的使用者角色集合。

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

設定角色繫結

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

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

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

控制台

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

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

gdcloud

  1. 請確認已安裝 gcloud CLI

  2. 使用 gdcloud auth login 指令登入,向身分識別提供者驗證身分。詳情請參閱 gdcloud 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:您要設定角色繫結的 ClusterRoleRoleOrganizationRole
      • 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:您要設定角色繫結的 RoleProjectRole
      • ROLE:要指派給使用者的預先定義或自訂角色名稱 (例如 project-viewer)。

API

  1. 匯出您使用的使用者憑證:

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. 匯出要指派角色的使用者帳戶,包括身分識別提供者前置字元 (例如 idpprefix-paul@example.com):

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. 匯出使用者需要的角色名稱,例如 project-creator。如要瞭解角色詳情,請參閱「角色定義」。

    export ROLE_NAME=ROLE_NAME
    
  4. 將使用者指派給 ClusterRoleRoleProjectRoleOrganizationRole

    • 將使用者指派給 ClusterRole

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      clusterrolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME}
      

      如果 ClusterRole 需要 RoleBinding 而非 ClusterRoleBinding,請參閱「角色定義」,瞭解角色需要的繫結類型,並在 gpc-system 命名空間中建立 RoleBinding:

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      rolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME} --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=${USERNAME} --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: USERNAME
        

        更改下列內容:

        • BINDING_NAME:使用者可自訂的繫結名稱 (例如 user-project-creator-binding)。
        • PROJECT_NAME:您要授予角色的專案名稱。
        • ROLE_NAME:您要指派給使用者的 ProjectRole名稱。
        • USER_KIND:使用者類型,可以是 UserGroupServiceAccount
        • USERNAME:您要指派角色的使用者電子郵件地址,包括身分識別提供者前置字元 (例如 idpprefix-paul@example.com)。這必須與匯出的 USERNAME 相符。
      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: USERNAME
        

        更改下列內容:

        • BINDING_NAME:使用者可自訂的繫結名稱 (例如 user-organization-creator-binding)。
        • ROLE_NAME:您要指派給使用者的 OrganizationRole名稱。
        • USER_KIND:使用者類型,可以是 UserGroupServiceAccount
        • USERNAME:您要指派角色的使用者電子郵件地址,包括身分識別提供者前置字元 (例如 idpprefix-paul@example.com)。這必須與匯出的 USERNAME 相符。
      2. 套用 organizationrolebinding.yaml YAML 檔案:

        kubectl create -f organizationrolebinding.yaml
        

移除角色繫結

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

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

控制台

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

gdcloud

  1. 請確認已安裝 gcloud CLI

  2. 使用 gdcloud auth login 指令登入,透過身分識別提供者進行驗證。詳情請參閱 gdcloud 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:要移除角色繫結的 ClusterRoleRoleOrganizationRole
      • 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:要移除角色繫結的 RoleProjectRole
      • ROLE:要從使用者帳戶移除的預先定義或自訂角色名稱 (例如 project-viewer)。

API

  1. 匯出您使用的使用者憑證:

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. 匯出要移除角色的使用者帳戶,包括身分識別提供者前置字元 (例如 idpprefix-paul@example.com):

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. 匯出要移除繫結的命名空間:

    export BINDING_NAMESPACE=BINDING_NAMESPACE
    
  4. 刪除 ClusterRoleBindingRoleBindingProjectRoleBindingOrganizationRoleBinding,即可撤銷授予使用者帳戶的權限:

    • 從使用者帳戶中移除 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