【问题标题】:Use Google as the OIDC provider without leaking client secret in kubernetes使用 Google 作为 OIDC 提供者,而不会在 kubernetes 中泄露客户端机密
【发布时间】:2019-09-13 17:50:36
【问题描述】:

我们有一个 Kubernetes 开发集群。我们希望为每个在此开发集群上工作的开发人员提供命名空间受控访问。

我们希望使用 Google 作为 Kubernetes API 支持的 OIDC 提供程序对其进行身份验证。

但这需要 client-secret 成为 ~/.kube/config

的一部分
users:
- name: you@yourdomain.com
  user:
    auth-provider:
      name: oidc      
      config:
        client-id: <client-id>
        client-secret: <client-secret>
        idp-issuer-url: https://accounts.google.com        
        id-token: <id-token>
        refresh-token: <refresh-token>

我们不希望将客户端密码泄露给用户,因为当开发人员离开组织时,客户端密码将被泄露并可能被滥用于模拟。

请建议如何使用 google 作为 OIDC 提供者在 kubernetes 集群中对用户进行身份验证,并且不会泄露客户端密码。

【问题讨论】:

  • 这对我来说似乎很奇怪,我们在 GKE 中使用 GSuite 组织进行了 Google Cloud 身份验证。因此,即使此人离开组织但仍有访问令牌 - 如果此人从 GSuite 中的组织中删除,它将毫无用处。以及您如何管理 Google 作为 OIDC 的群组成员资格?
  • 客户端密码可能被其他恶意应用滥用。问题是即使成员离开了组织,任何其他应用程序都可以使用客户端密码并现在充当当前应用程序,因为它同时具有客户端 ID 和密码,并且可以通过让现有用户登录到该应用程序来获得访问权限。可以在此处阅读有关为什么不应泄露客户端机密的更多信息 - salesforce.stackexchange.com/questions/14009/…
  • stackoverflow.com/questions/55836757/… 为客户端秘密利用讨论创建一个新主题。

标签: authentication kubernetes google-oauth openid-connect


【解决方案1】:

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

这意味着您不需要使用客户端密码进行身份验证,但正如我在回答您的下一个问题 openid-kubernetes 时所写的那样,无需担心泄露凭据。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2020-09-14
    • 2020-11-20
    • 2020-04-30
    • 2019-02-07
    • 2020-01-05
    • 2020-06-05
    • 2021-09-05
    • 2021-08-07
    相关资源
    最近更新 更多