使用 SAML 为 GKE Identity Service 设置集群

本文档适用于希望在单个集群上设置 GKE Identity Service 的集群管理员或应用运维人员,以使开发者和其他用户可以使用来自安全断言标记语言 (SAML) 提供方的现有身份详细信息登录集群。本指南假定您已阅读 GKE Identity Service 概览。本文档中的说明假定 GKE Identity Service 已作为客户端应用向您的身份提供商注册

准备工作

  • 在开始设置之前,请确保平台管理员已为您提供向您的提供方注册 GKE Identity Service 所需的全部信息。
  • 确保您已安装以下命令行工具:

    • 使用 466.0.0 版或更高版本的 Google Cloud CLI,其中包含用于与 Google Cloud交互的命令行工具 gcloud。如果您需要安装 Google Cloud CLI,请参阅安装指南
    • kubectl,用于对 Kubernetes 集群运行命令。如果您需要安装 kubectl,请按照这些说明操作。

    如果您使用 Cloud Shell 作为与 Google Cloud交互的 Shell 环境,则系统会为您安装这些工具。

  • 确保您已初始化要用于在其中注册集群的项目的 gcloud CLI。

配置集群

GKE Identity Service 使用特殊的 Kubernetes 自定义资源类型 (CRD) 来配置名为 ClientConfig 的集群,其中包含有关身份提供商的信息字段以及返回用户信息所需的参数字段。

kubectl

如要修改默认的 ClientConfig,请确保通过 kubectl 连接到集群,然后运行以下命令:

kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public

KUBECONFIG_PATH 替换为集群的 kubeconfig 文件的路径,例如 $HOME/.kube/config

文本编辑器会加载集群的 ClientConfig 资源。添加 saml 对象(如代码段中所示)。

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - name: NAME
   saml:
     idpEntityID: ENTITY_ID
     idpSingleSignOnURI: SIGN_ON_URI
     idpCertificateDataList: IDP_CA_CERT
     userAttribute: USER_ATTRIBUTE
     groupsAttribute: {'<var name="user attribute">GROUPS_ATTRIBUTE</var>'}}
     userPrefix: USER_PREFIX
     groupPrefix: GROUP_PREFIX
     attributeMapping:
       ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
       ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
  certificateAuthorityData: CERTIFICATE_STRING
  preferredAuthentication: PREFERRED_AUTHENTICATION
  server: <>

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

您可以根据需要,在 ClientConfig 中配置多个身份提供方。这可以简化管理并提供灵活性,从而在统一的配置资源中配置各种身份验证方法。以下示例 ClientConfig 按所需的身份验证优先顺序定义了多个身份提供方。

apiVersion: v1
items:
- apiVersion: authentication.gke.io/v2alpha1
  kind: ClientConfig
...
  spec:
    authentication:
    - aws:
        region: us-west-2
      name: AWS Login
    - ldap:
    ...
    - saml:
      ...
    - azureAD:
      ...
    - oidc:
      name: Okta OIDC
      ...
    -oidc:
      name: Google OIDC
      ...

下表介绍了 ClientConfig saml 对象的字段。您需要添加的字段取决于您的身份提供方,以及您的平台管理员在为 GKE Identity Service 配置提供方时选择的设置选项。

字段 必需 说明 格式
name 您要用于标识此配置的名称,通常是身份提供方名称。配置名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。 字符串
idpEntityID SAML 提供方的 SAML 实体 ID,以 URI 格式指定。例如:https://www.idp.com/saml 网址字符串
idpSingleSignOnURI SAML 提供方的 SSO 端点,以 URI 格式指定。例如:https://www.idp.com/saml/sso 网址字符串
idpCertificateDataList 对应于用于验证 SAML 响应的身份提供方证书。 这些证书必须采用标准的 base64 编码和 PEM 格式。最多支持两个证书,以便于身份提供方证书轮替。 字符串
userAttribute SAML 响应中包含用户名的属性的名称。 字符串
groupsAttribute SAML 响应中包含用户群组信息的属性的名称。 字符串
userPrefix 如果您不想使用默认前缀,则该字段为您要附加到用户声明的前缀,其目的是避免与现有名称发生冲突。 字符串
groupPrefix 该字段为您要附加到安全群组名称的前缀,其目的是在您有多个身份提供方的配置(通常是提供方名称)时避免与访问权限控制规则中的现有名称冲突。 字符串
attributeMapping 其他用户属性的映射。 字符串
certificateAuthorityData 如果平台管理员提供,则该字段为身份提供方的 PEM 编码证书字符串。将生成的字符串作为单独的一行添加到 certificateAuthorityData 中。 字符串
preferredAuthentication 在集群中配置的首选身份验证方法的名称。 字符串

完成 ClientConfig 后保存文件,以更新集群上的 ClientConfig。如果有任何语法错误,系统会提示您重新修改配置以修复错误。

后续步骤

应用配置后,继续设置用户对集群的访问权限