授予和撤消访问权限

每个正文(用户或群组)都遵循以下两步流程来获取对 Management API 服务器和 Kubernetes 集群的访问权限:

  • 管理 API 服务器访问权限:使用 ClusterRoleBindingRoleBinding 向管理 API 服务器中的某个正文授予权限,以访问预定义的 ClusterRole

  • Kubernetes 集群访问权限:授予命名空间专用访问权限或集群范围的访问权限。

    • 对于特定于命名空间的访问权限:如需授予对集群中特定项目的命名空间的访问权限,请创建 ProjectRole 和相应的 ProjectRoleBinding。此过程会将 Kubernetes RoleRoleBinding 传播到集群中的 Kubernetes Namespace,该 Namespace 对应于 ProjectRoleProjectRoleBinding 所关联的 Project

    • 对于集群级访问权限:如需授予对集群中所有命名空间的访问权限,请创建 OrganizationRole 和相应的 OrganizationRoleBinding。此过程会将 Kubernetes ClusterRoleClusterRoleBinding 传播到整个 Kubernetes 集群。

本页面适用于平台管理员群组中负责管理组织内权限的受众群体。

组织 IAM 管理员和项目 IAM 管理员都可以创建更多项目角色和项目角色绑定,以授予其他项目专属权限。不过,组织 IAM 管理员可以为任何项目创建项目角色和项目角色绑定。另一方面,Project IAM Admin 只能为他们有权访问的项目创建项目角色和项目角色绑定。

准备工作

在管理角色绑定或撤消访问权限之前,您必须请求必要的权限并准备好环境。所需的具体角色取决于您是要管理角色绑定还是要撤消用户访问权限。

申请 IAM 角色

请与组织 IAM 管理员联系,根据您需要执行的任务申请相应角色:

  • Organization IAM Admin (organization-iam-admin):在组织级层和项目级层创建、更新和删除角色绑定。
  • 组织会话管理员 (org-session-admin):撤消用户在特定区域内的有效会话和访问权限。

准备环境

如需使用命令行工具管理角色绑定或撤消访问权限,请完成以下设置。

设置角色绑定

您可以设置角色绑定,以便团队成员在组织级或项目级层访问资源。

如需获得设置角色绑定所需的权限,请让组织 IAM 管理员向您授予组织 IAM 管理员角色。

如需向已获授权的成员分配角色,请按以下步骤操作:

控制台

  1. 登录 GDC 控制台。
  2. 点击选择项目,以选择组织或项目。
    • 如需为组织设置角色绑定,请选择一个组织。
    • 如需为项目设置角色绑定,请选择一个项目。
  3. 在导航菜单中,依次点击身份和访问权限 > 访问权限
  4. 点击添加成员
  5. 身份提供方列表中,选择一个身份提供方。
  6. 选择要添加单个用户还是群组。
  7. 用户名或群组别名字段中,输入用户名、电子邮件地址或别名。
  8. 角色列表中,选择要分配给用户或群组的角色,例如组织级Organization Viewer或项目级Project Creator
  9. 点击 Add(添加)。

相应成员会显示在授权成员列表中。

gdcloud

  1. 确保您已安装 gdcloud 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. 在导航菜单中,依次点击身份和访问权限 > 访问权限
  3. 授权成员列表中,选择一个成员。
  4. 点击移除成员
  5. 出现提示时,点击移除成员进行确认。

gdcloud

  1. 确保您已安装 gdcloud 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 (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