使用外部身份向 GKE on Azure 进行身份验证
员工身份联合可向非 Google 身份授予对 Google Cloud 服务的访问权限。在 GKE on Azure 环境中,这意味着您可以使用现有的外部身份来创建或访问 GKE 集群,而无需依赖 Google 凭据。
使用员工身份联合的优势如下:
- 您无需在不同的平台或提供方之间反复输入账号。
- 您只需设置一次权限,而无需在多个平台上进行配置。
- 简化用户访问流程,因为需要的登录次数和密码更少。
准备工作
如需允许外部用户或群组访问 GKE 集群,您需要执行以下步骤:
为了保证外部用户或群组可以使用 GKE on Azure API,请配置员工身份联合:
- 对于 Azure 用户,请参阅使用 Azure AD 配置员工身份联合。
- 对于 Okta 用户,请参阅使用 Okta 配置员工身份联合。
- 对于其他平台的用户,请参阅配置员工身份联合。
为外部用户或群组分配
gkemulticloud.viewer
角色,以便他们可以访问集群。分配container.clusterViewer
角色以便在 Google Cloud 控制台中查看集群。请注意,角色是权限的集合。为实体(用户、群组或服务账号)分配角色时,您将为该实体授予该角色包含的所有权限。
用户
对于单个用户,您需要分配
gkemulticloud.viewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/gkemulticloud.viewer" \ --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
替换以下内容:
群组
对于群组,您需要分配
gkemulticloud.viewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/gkemulticloud.viewer" \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
替换以下内容:
可选:为外部用户或群组分配适当的 Identity and Access Management (IAM) 角色。仅当您要向用户或群组授予创建或更新集群的权限时,才需要执行此步骤;仅访问集群时不需要。
用户
对于单个用户,您需要分配
gkemulticloud.admin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/gkemulticloud.admin" \ --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
替换以下内容:
群组
对于群组,您需要分配
gkemulticloud.admin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/gkemulticloud.admin" \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
替换以下内容:
如需详细了解 GKE on Azure 所需的 API 角色和权限,请参阅 API 角色和权限。
授予对 GKE 集群的外部访问权限
您可以通过以下两种方法设置员工身份联合,以便外部用户或群组可以访问您的 GKE 集群。
方法 1 要求您定义 RBAC 文件并将其应用于集群。此方法可以精细控制权限,例如只允许用户对资源进行只读访问,而不授予他们更广泛的访问权限。
方法 2 要求您在创建或更新集群时指定外部身份的访问权限。此方法会向指定用户或群组授予完整的管理员权限。
选择最适合您所需的访问权限控制级别的方法:方法 1 适合用于授予更精细的权限,方法 2 则适合用于授予完整的集群管理员权限。
方法 1:使用 RBAC 文件
第一种用来授予对 GKE 集群的外部访问权限的方法涉及使用 RBAC 文件。请按照以下步骤操作:
定义 RBAC YAML 文件,其中包含主体(用户或群组)以及您要在 GKE 集群中为这些主体授予的权限。以下是单个用户以及群组的 RBAC YAML 配置示例:
用户
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gateway-cluster-admin-user subjects: - kind: User name: principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
替换以下内容:
群组
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gateway-cluster-admin-group subjects: - kind: Group name: principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
替换以下内容:
使用以下命令指定要配置的 GKE 集群,并将其设置为活跃上下文:
kubectl config use-context CLUSTER_CONTEXT
将
CLUSTER_CONTEXT
替换为集群的相应上下文名称。将所需的 GKE 集群设置为活跃上下文后,使用以下命令将 RBAC 配置应用于该集群:
kubectl apply -f RBAC_PATH
将
RBAC_PATH
替换为您创建或修改的 RBAC 文件的路径。运行此命令后,RBAC 配置中的指定用户或群组将具有访问和管理目标 GKE 集群的权限(具体权限遵循定义的 RBAC 规则)。
如果您需要对权限进行后续更改,可修改 RBAC 文件,然后重复上述步骤将其重新应用于集群。
方法 2:在创建或更新集群期间向外部身份授予访问权限
方法 2 会在集群创建或更新期间向外部身份授予访问权限。
如需创建集群,请按照创建集群中的步骤操作。如需更新集群,请按照更新集群中的步骤操作。
运行 gcloud
命令创建或更新集群时,指定 admin-users
和/或 admin-groups
参数,如下所示:
gcloud container azure clusters [create|update] CLUSTER_NAME \
--location=LOCATION
--admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
--admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID
替换以下内容:
CLUSTER_NAME
:您的集群的名称。LOCATION
:托管集群的 Google Cloud 区域。WORKFORCE_POOL_ID
:唯一标识 Google Cloud 中的员工身份池的 ID。设置 ID 格式时,请确保遵循 IAM 文档中查询参数下提供的推荐准则。SUBJECT_VALUE
:唯一标识外部用户的 ID。例如,ID 可以是电子邮件地址(如alex@cymbalgroup.com
)。GROUP_ID
:唯一标识外部群组的 ID。
向外部 ID 授予对 GKE 集群的访问权限的摘要
执行方法 1 或方法 2 后,指定的外部用户或群组可以使用 Google Cloud 控制台连接集群及查看集群详细信息。他们还可以通过 gcloud CLI 将 kubectl
与身份搭配使用来管理、操作集群以及与集群通信。
如需对 GKE 集群执行 kubectl
命令,请参阅如何生成 kubeconfig
条目。