本指南适用于需要设置 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(纯软件)和 Google Distributed Cloud on Bare Metal(纯软件):所有可用版本。
- Google Distributed Cloud connected:所有可用版本。
- 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 服务会将请求转发到集群上运行的 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,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。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,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。gcloud services enable connectgateway.googleapis.com
gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com - 对于 Google Cloud之外的集群,集群中的身份验证组件必须调用 Cloud Identity API。检查您是否拥有要求集群的出站流量通过代理的网络政策。
所需的角色
如需获得配置连接网关和集群所需的权限,请让您的管理员为您授予项目的 Editor (roles/editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
设置用户和群组
确保您要与此功能搭配使用的群组按如下方式设置:
- 确保您的组织的 Google Workspace 中存在
gke-security-groups@YOUR-DOMAIN格式的群组。如果您没有此类群组,请按照在组织中创建群组中的说明,使用 Google 管理控制台创建群组。 - 按照将某个群组添加到另一个群组中的说明,将您要用于访问权限控制的群组添加为
gke-security-groups的嵌套群组。请勿将单个用户添加为gke-security-groups的成员。
要与此功能搭配使用的用户账号应使用与其群组相同的域名。
配置群组支持
连接网关使用集群中的身份验证组件来检索群组成员资格信息。如需启用必需的组件,请根据您的集群类型参阅以下文档之一:
- Google Cloud上的 GKE:为 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 onGoogle Cloud、GKE on AWS 和 GKE on Azure,请跳至向群组授予 IAM 角色部分。
对于 Distributed Cloud,您可以为各个集群或舰队配置群组支持。您使用的集群类型决定了您配置群组支持的方式,如下所示:
- Distributed Cloud connected:仅限单个集群。 不支持舰队级配置。
- Google Distributed Cloud on VMware 和 Google Distributed Cloud on Bare Metal(纯软件):单个集群或舰队。
使用 GKE Fleet API 配置群组支持
对于 Google Distributed Cloud on VMware(纯软件)和 Google Distributed Cloud on Bare Metal(纯软件),您可以在舰队级别配置群组支持。如果您之前配置了舰队级身份验证(例如针对其他身份提供方),则群组身份验证已处于启用状态。 不过,如果您的网络政策要求出站流量通过代理,您必须使用有关该代理的信息更新现有配置。
如需在车队级配置群组支持,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 GKE 身份认证服务 页面。
点击启用 Identity Service。
选择要配置的 Google Distributed Cloud on VMware(纯软件)集群和 Google Distributed Cloud on 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 Gateway 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 集成教程。