管理对标准集群的访问权限

本文档介绍了如何在 Google Distributed Cloud (GDC) 气隙环境中的标准集群内授予访问权限和管理权限。标准集群是项目级可配置的 Kubernetes 环境,具有最少的默认服务,可为自定义工作负载提供更高的灵活性和控制力。

如需了解如何管理标准集群生命周期(例如创建或删除集群),请参阅创建标准集群和删除标准集群。

如需详细了解标准集群和其他集群类型,请参阅 Kubernetes 集群配置。

本文档面向应用运营人员群组(例如开发运维人员或数据科学家),他们需要管理和保护 GDC 项目中的资源。如需了解详情,请参阅 GDC 气隙环境文档的受众群体。

准备工作

在管理对标准集群的访问权限之前,您必须拥有必要的权限并准备好环境。

申请 IAM 角色

如需获得管理标准集群访问权限所需的权限,请根据您需要执行的任务请求以下角色:

  • 如需为标准集群授予和管理项目级 IAM 政策绑定,请与您的 IAM 组织管理员联系,请求 IAM Project Admin (project-iam-admin) 角色。
  • 如需管理集群内 Kubernetes 基于角色的访问权限控制 (RBAC) 并在标准集群内部署工作负载,请让您的 IAM 项目管理员为您授予集群管理员 (cluster-admin) 角色。

准备环境

授予标准集群访问权限

具有 IAM 项目管理员 (project-iam-admin) 角色的用户可以向其他用户授予在标准集群中管理访问权限所需的角色:

  1. 使用 gdcloud CLI 通过已配置的身份提供方登录。

  2. 为用户授予项目的 Cluster Admin (cluster-admin) 角色。此命令会将用户绑定到角色,从而允许用户管理标准集群内的访问权限。

    如需详细了解这些角色,请参阅预定义角色说明和项目的角色定义。

    gdcloud projects add-iam-policy-binding PROJECT \
      --role=ROLE \
      --member=user:USER_ACCOUNT
    

    执行以下变量替换操作:

    • PROJECT:标准集群所在项目的名称。
    • ROLE:您要授予的角色的名称(例如 cluster-admin)。
    • USER_ACCOUNT:您要授予角色的用户账号,包括与您组织关联的身份提供方前缀(例如 idpprefix-user@example.com)。所用的具体前缀取决于您组织的 IdP 配置。如需了解详情,请参阅连接到身份提供方。

    以下示例向 user@example.com 授予 Cluster Admin 角色,假设项目 foo 的身份提供方前缀为 fop-:

    gdcloud projects add-iam-policy-binding foo \
      --role=cluster-admin \
      --member=user:fop-user@example.com
    

管理标准集群中的访问权限

拥有集群管理员 (cluster-admin) 角色的用户可以在标准集群中授予访问权限:

  1. 使用 gdcloud CLI 通过已配置的身份提供方登录。

  2. 使用 --standard 标志为标准集群生成 kubeconfig 文件。此标志是定位标准集群所必需的。

    export KUBECONFIG=KUBECONFIG_FILE
    gdcloud clusters get-credentials STANDARD_CLUSTER_NAME --standard --project=PROJECT
    

    执行以下变量替换操作:

    • KUBECONFIG_FILE:kubeconfig 文件的路径,例如 standard-cluster-kubeconfig.yaml。
    • STANDARD_CLUSTER_NAME:标准集群的名称。
    • PROJECT:标准集群所在项目的名称。
  3. 使用 kubectl 在标准集群中定义权限。

    拥有 cluster-admin 权限的用户可以创建自定义 Role 和 ClusterRole 对象。如需授予这些权限,他们可以创建相应的 Rolebinding 和 ClusterRoleBinding 对象,将角色绑定到特定主体(例如用户或服务账号)。

    以下示例使用 kubectl 在 test 命名空间中创建名为 test-role 的自定义 Role 示例:

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: test-role
      namespace: test
    rules:
    - apiGroups:
      - ""
      resources:
      - configmaps
      verbs:
      - get
    EOF
    

    以下示例在 test 命名空间中为名为 test-role 的 Role 创建了 RoleBinding。它向具有身份提供方前缀 fop- 的用户 alice@example.com 以及 default 命名空间中名为 my-service-account 的 ServiceAccount 授予权限:

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: test-role-binding
      namespace: test
    subjects:
    - kind: User
      name: fop-alice@example.com
      apiGroup: rbac.authorization.k8s.io
    - kind: ServiceAccount
      name: my-service-account
      namespace: default
    roleRef:
      kind: Role
      name: test-role
      apiGroup: rbac.authorization.k8s.io
    EOF