首页 > 解决方案 > 非组织成员可以利用 Google 客户端 ID 和客户端机密凭据吗?

问题描述

假设我们有一个 Kubernetes 集群,谷歌作为 OIDC 提供者进行身份验证。使用该集群的每个开发人员都~/.kube/config配置了以下配置:

user:
    auth-provider:
      config:
        client-id: <client-id>
        client-secret: <client-secret>
        id-token: <id-token>
        idp-issuer-url: https://accounts.google.com
        refresh-token: <refresh-token>

当开发人员离开组织时,他会从 Google 登录中删除,并且他不能使用它~/.kube/config来访问 kubernetes 资源,因为他需要登录到 Google,但他现在不能这样做。

但是客户端ID和秘密仍然被泄露。

请建议。

PS:此客户端 ID 和客户端秘密的凭据类型是“其他”,而不是带有重定向 url 的“Web 应用程序”。

标签: securityauthenticationkubernetesgoogle-oauth

解决方案


首先也是最重要的,离职后禁止使用机密凭证和访问帐户,这就是为什么开发人员在离职后无法访问这些数据的原因。

Kubernetes 中 OpenID 的流程:

  1. 登录您的身份提供商
  2. 您的身份提供者将为您提供 access_token、id_token 和 refresh_token
  3. 使用 kubectl 时,将您的 id_token 与 --token 标志一起使用或直接将其添加到您的 kubeconfig
  4. kubectl 在名为 Authorization 的标头中将您的 id_token 发送到 API 服务器
  5. API 服务器将通过检查配置中指定的证书来确保 JWT 签名有效
  6. 检查以确保 id_token 没有过期
  7. 确保用户被授权
  8. 一旦获得授权,API 服务器就会向 kubectl 返回响应
  9. kubectl 向用户提供反馈

对你来说最重要的点是5、6、7 您客户端的 JWT 无效,因此离职用户及其帐户凭据(或具有此类凭据的其他组织的成员)无法访问您的集群。

id_token 不能被撤销,它就像一个证书,所以它应该是短暂的。如果不使用 kubectl proxy 命令或注入 id_token 的反向代理,则无法轻松地向 Kubernetes 仪表板进行身份验证。

您可以在此处找到更多信息:kubernetes-cluster-access。因此,假设您不必担心泄露 client_id 和

您也可以删除集群/上下文/用户条目,例如:

$ kubectl config unset users.gke_project_zone_name

Client_secret 现在对于 k8s oidc 配置是可选的,这意味着它可以支持公共客户端(有或没有 client_secret)和机密客户端(有 client_secret,每个 kubectl 用户)。

因此,对于您的每个问题的回答是否定的,无需担心安全方面。

我希望它有所帮助。


推荐阅读