security - 非组织成员可以利用 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和秘密仍然被泄露。
client-secret
这里的泄漏会引起任何安全问题吗?- 非组织成员可以使用组织成员来利用它吗?
- 这是否可以用于制作不同的应用程序
client-id
并被client-secret
利用以使现有组织用户登录并代表该现有用户获得对 ID 令牌的访问权限?
请建议。
PS:此客户端 ID 和客户端秘密的凭据类型是“其他”,而不是带有重定向 url 的“Web 应用程序”。
解决方案
首先也是最重要的,离职后禁止使用机密凭证和访问帐户,这就是为什么开发人员在离职后无法访问这些数据的原因。
Kubernetes 中 OpenID 的流程:
- 登录您的身份提供商
- 您的身份提供者将为您提供 access_token、id_token 和 refresh_token
- 使用 kubectl 时,将您的 id_token 与 --token 标志一起使用或直接将其添加到您的 kubeconfig
- kubectl 在名为 Authorization 的标头中将您的 id_token 发送到 API 服务器
- API 服务器将通过检查配置中指定的证书来确保 JWT 签名有效
- 检查以确保 id_token 没有过期
- 确保用户被授权
- 一旦获得授权,API 服务器就会向 kubectl 返回响应
- 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 用户)。
因此,对于您的每个问题的回答是否定的,无需担心安全方面。
我希望它有所帮助。
推荐阅读
- flutter - 当我使用 Flutter Hooks 时,Set() 在 Flutter 中不起作用
- java - 带有 AWS EC2 IMDSv2 的 Spring Cloud Netflix Eureka 客户端?
- java - 使用 Java AWT 在 2D Canvas 上渲染 3D 对象
- python - 如何在 discord.py 中获取 pin 消息
- wordpress - 多站点内容同步 Wordpress 问题
- android - 如何修复此错误?错误:找不到符号 Vholder.setData(mValues.get(position));
- filter - 没有为 scipy.signal.butter 定义名称为“b”的错误。怎么了?
- javascript - n秒后datatable.js ajax livereload
- javascript - 在 arr 中生成 4 个唯一的随机数?
- dialogflow-es - 无法创建新代理