本指南适用于需要设置 Connect 网关以供项目的用户账号使用并使用 Google 群组进行授权的平台管理员。在阅读本页面之前,请确保您熟悉我们的 概览中的概念。如需向个人账号授权,请参阅 默认设置。
此设置允许用户使用 Google Cloud CLI、Connect 网关和 Google Cloud 控制台登录已配置的舰队集群。
此功能使用与 Google Workspace或任何版本的 Cloud Identity关联的 Google 群组。
支持的集群类型
您可以通过 Connect 网关为以下集群类型设置使用 Google 群组的访问权限控制:
- GKE on Google Cloud:所有可用版本。如需设置 Connect 网关, 请为 RBAC 配置 Google 群组, 然后 向 Google 群组授予 IAM 角色。
- Google Distributed Cloud on VMware 和 Bare Metal(纯软件):所有可用版本。
- Google Distributed Cloud 联网配置:所有可用版本。
- GKE 关联集群:版本 1.28.0-gke.2 及更高版本。
GKE on AWS 和 GKE on Azure:所有可用版本。
如需在上述环境之外的其他环境中使用此功能, 请联系 Cloud Customer Care 或 Connect Gateway 团队。
工作原理
如 概览中所述,根据用户在 Google 群组(即在 Google Workspace 中创建的群组)中的 成员资格授予用户对集群的访问权限是一种 非常有用的方法。基于群组成员资格进行授权意味着您无需为每个账号设置单独的授权,这样可以使政策更易于管理且更易于审核。例如,您可以轻松与团队共享集群访问权限,而无需在单个用户加入或离开团队时从集群手动添加/移除他们。您可以配置 Connect 网关以获取登录集群的每一个用户的 Google 群组成员资格信息。然后,您可以在访问权限控制政策中使用这些信息。
下面显示了用户向启用了该服务的集群进行身份验证并对其运行命令的典型流程。为了成功执行此流程,集群上必须存在针对具有以下特点的群组的 RBAC 政策:
包含用户
alice@example.com作为成员。是
gke-security-groups@example.com的嵌套群组。
- 用户
alice@example.com使用其 Google 身份登录,如果 该用户计划从命令行使用集群,则按 使用 Connect 网关中的说明获取集群的 网关kubeconfig。 - 用户运行
kubectl命令或是在 Google Cloud 控制台中打开 Google Kubernetes Engine 工作负载 或 对象浏览器 页面来发送请求。 - 该请求由使用 IAM 执行 授权检查的服务进行接收。
- Connect 服务会将请求转发到集群上运行的 Connect Agent。请求中随附了用户的凭据信息,可在集群上进行身份验证和授权。
- Connect Agent 将请求转发到 Kubernetes API 服务器。
- Kubernetes API 服务器将请求转发给集群中的
anthos-identity-servicePod,后者会验证请求。 anthos-identity-servicePod 将用户和群组信息返回到 Kubernetes API 服务器。然后,Kubernetes API 服务器可以根据集群中已配置的 RBAC 政策,使用这些信息对请求进行授权。
准备工作
- 登录您的 Google Cloud 账号。如果您是新手 Google Cloud, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init 启用 Connect Gateway、GKE Connect、GKE Hub、Anthos Identity Service 和 Cloud Resource Manager API:
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已通过所有者角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。了解如何授予角色。gcloud services enable connectgateway.googleapis.com
gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com -
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init 启用 Connect Gateway、GKE Connect、GKE Hub、Anthos Identity Service 和 Cloud Resource Manager API:
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已通过所有者角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。了解如何授予角色。gcloud services enable connectgateway.googleapis.com
gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com - 对于之外的 Google Cloud集群,您的 集群中的身份验证组件必须调用 Cloud Identity API。检查您是否具有要求集群的出站流量通过代理的网络政策。
所需的角色
如需获得配置 Connect 网关和集群所需的权限,请让您的管理员为您授予项目的Editor (roles/editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
设置用户和群组
确保您要与此功能搭配使用的群组按如下方式设置:
- 确保您的组织的 Google Workspace 中存在
gke-security-groups@YOUR-DOMAIN格式的群组。如果您没有此类群组, 请按照在您的 组织中创建群组中的说明,使用 Google 管理控制台创建 群组。 - 按照将某个群组添加到另一个
群组中的说明,将您
要用于访问权限控制的群组添加为
gke-security-groups的嵌套群组。请勿将单个用户添加为gke-security-groups的成员。
要与此功能搭配使用的用户账号应使用与其群组相同的域名。
配置对群组的支持
Connect 网关使用集群中的身份验证组件来检索群组成员资格信息。如需启用所需组件,请参阅以下文档之一,具体取决于您的集群类型:
- GKE on Google Cloud: 为 RBAC 配置 Google 群组, 然后跳至 向群组授予 IAM 角色部分。
- GKE 关联集群:
Google Distributed Cloud:通过更新集群中的 ClientConfig 自定义资源 来启用对群组的支持。Distributed Cloud 会在每个集群的
kube-public命名空间中自动创建一个名为default的 ClientConfig。如需验证此自定义资源是否存在,请运行以下命令:kubectl --kubeconfig CLUSTER_KUBECONFIG get ClientConfig default -n kube-public将
CLUSTER_KUBECONFIG替换为集群的 kubeconfig 的路径。
以下部分介绍如何更新 ClientConfig 自定义资源以启用群组支持。这些部分仅适用于 Google Distributed Cloud 集群。对于其他类型的集群,例如 GKE on Google Cloud;GKE on AWS;和 GKE on Azure,请跳至 向群组授予 IAM 角色部分。
对于 Distributed Cloud,您可以为各个集群或舰队配置对群组的支持。您使用的集群类型决定了您配置群组支持的方式,如下所示:
- Distributed Cloud connected:仅限各个集群。 不支持舰队级配置。
- Google Distributed Cloud on VMware 和 Bare Metal(纯软件):各个集群或舰队。
使用 GKE Fleet API 配置群组支持
对于 Google Distributed Cloud on VMware 和 Bare Metal(纯软件),您可以在舰队级层配置群组支持。如果您之前配置了舰队级身份验证(例如针对其他身份提供方),则群组身份验证已启用。 但是,如果您的网络策略要求出站流量通过代理,则必须使用有关该代理的信息更新现有配置。
如需在舰队级层配置群组支持,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 GKE 身份认证服务 页面。
点击启用 Identity Service 。
选择要配置的 Google Distributed Cloud on VMware 和 Bare Metal(纯软件)集群。
点击更新配置 。此时会打开修改 Identity Service 集群配置 窗格。
在配置身份提供方 部分中,您可以选择保留、添加、更新或移除身份提供方。
点击继续 以进行下一个配置步骤。如果您为此设置选择了至少一个符合条件的集群,则此时会显示 Google 身份验证 部分。
选择启用 ,为所选集群启用 Google 身份验证。如果您需要通过代理访问 Google 身份提供方,请输入代理 详细信息。
点击更新配置 。这会将身份配置应用于所选集群。
gcloud
- 启用舰队级身份服务功能并配置集群,如设置舰队级身份验证管理中所述。
在包含 ClientConfig 规范的
auth-config.yaml文件中,添加以下字段:spec: authentication: - name: google-authentication-method google: disable: falsegoogle.disable字段中的值false会启用群组支持。如需停用群组支持,请将此值修改为true。可选:如果您需要通过代理访问 Google 身份提供方,请将
proxy字段添加到上述配置中:spec: authentication: - name: google-authentication-method google: disable: false proxy: PROXY_URL将
PROXY_URL替换为用于连接到 Google 身份的代理服务器地址。例如:http://user:password@10.10.10.10:8888将配置应用于舰队中的集群:
gcloud container fleet identity-service apply \ --membership=CLUSTER_NAME \ --config=/path/to/auth-config.yaml
将
CLUSTER_NAME替换为集群在舰队内的唯一成员资格名称。
在舰队级层设置群组支持后,舰队控制器会管理配置。舰队级配置会覆盖您对特定集群中的配置所做的任何本地更改。
为各个集群配置群组支持
对于所有 Distributed Cloud 集群(包括 Distributed Cloud connected),请通过更新每个集群中的 default ClientConfig 来启用群组支持:
获取集群的成员资格详细信息:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get memberships membership -o yaml将
USER_CLUSTER_KUBECONFIG替换为集群的 kubeconfig 文件的路径。如果 kubeconfig 中有多个上下文,则会使用当前上下文。运行该命令之前,您可能需要将当前上下文重置为正确的集群。在响应中,请查看
spec.owner.id字段以检索集群的成员资格详细信息。成员资格标识符的格式为//gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP。输出类似于以下内容:
id: //gkehub.googleapis.com/projects/123456789/locations/global/memberships/xy-ab12cd34ef打开集群中的
defaultClientConfig 进行修改:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default如需启用群组支持,请将
google字段添加到spec.authentication字段:spec: internalServer: https://kubernetes.default.svc authentication: - google: audiences: - "CLUSTER_IDENTIFIER" name: google-authentication-method将
CLUSTER_IDENTIFIER替换为集群的成员资格详细信息。确保
internalServer字段的值为https://kubernetes.default.svc。可选:如果您需要通过代理访问 Google 身份提供方,请将
proxy字段添加到上述配置中:spec: internalServer: https://kubernetes.default.svc authentication: - google: audiences: - "CLUSTER_IDENTIFIER" name: google-authentication-method proxy: PROXY_URL将
PROXY_URL替换为用于连接到 Google 身份的代理服务器地址。例如:http://user:password@10.10.10.10:8888
向 Google 群组授予 IAM 角色
群组需要以下额外的 Google Cloud 角色才能通过网关与连接的集群进行交互:
roles/gkehub.gatewayAdmin。此角色允许群组成员访问 Connect 网关 API。- 如果群组成员只需要对连接的集群的只读权限,则可以改用
roles/gkehub.gatewayReader。 - 如果群组成员需要对连接的集群的读写权限,则可以改用
roles/gkehub.gatewayEditor。
- 如果群组成员只需要对连接的集群的只读权限,则可以改用
roles/gkehub.viewer。此角色允许群组成员查看已注册的集群成员资格。
您可以使用 gcloud projects add-iam-policy-binding 命令授予这些角色,如下所示:
gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=GATEWAY_ROLE PROJECT_ID gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=roles/gkehub.viewer PROJECT_ID
其中
- GROUP_NAME 是您要授予相应角色的 Google 群组
- DOMAIN 是您的 Google Workspace 网域
- GROUP_NAME@DOMAIN 是 gke-security-groups@DOMAIN 下的嵌套群组
- GATEWAY_ROLE 是
roles/gkehub.gatewayAdmin、roles/gkehub.gatewayReader或gkehub.gatewayEditor中的一个。 - PROJECT_ID 是您的项目
如需详细了解如何授予 IAM 权限和角色,请参阅授予、更改和撤消对资源的访问权限。
配置基于角色的访问权限控制 (RBAC) 政策
最后,每个集群的 Kubernetes API 服务器必须能够对来自指定群组且通过网关的 kubectl 命令授权。对于每个集群,您需要添加 RBAC 权限政策,用于指定群组对集群拥有哪些权限。
在以下示例中,您将了解如何向 cluster-admin-team 群组成员授予集群的 cluster-admin 权限,将政策文件保存为 /tmp/admin-permission.yaml,并将其应用于与当前上下文关联的集群。请务必在 gke-security-groups 群组下添加 cluster-admin-team 群组。
cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gateway-cluster-admin-group
subjects:
- kind: Group
name: cluster-admin-team@example.com
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF
# Apply permission policy to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH -f /tmp/admin-permission.yaml
如需详细了解如何指定 RBAC 权限,请参阅使用 RBAC 授权。
接下来怎么做?
- 了解如何使用 Connect 网关通过命令行连接到集群。
- 如需了解如何将 Connect 网关用作 DevOps 自动化的一部分的示例,请参阅我们的与 Cloud Build 集成教程。