授予和撤消访问权限

每个主体(用户或群组)都遵循一个两步流程来获取对 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 管理员可以为任何项目创建项目角色和项目角色绑定。另一方面,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:您要为其设置角色绑定的 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. 在导航菜单中,依次点击身份和访问权限 > 访问权限。
  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:您要移除角色绑定的 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 (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