我按照这篇文章了解了如何为 Kubernetes 集群中的用户设置 RBAC:https://medium.com/better-programming/k8s-tips-give-access-to-your-clusterwith-a-client-certificate-dfb3b71a76fe。
这工作正常,但在我按照文章中所述签署、批准和配置所有内容后,如何撤销对某些用户的访问权限。例如,如果用户离开公司,我也想从集群中删除该用户。
我已经像这样设置了 RoleBinding:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: $NAMESPACE-role_binding
namespace: $NAMESPACE
subjects:
- kind: Group
name: $GROUP
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: $NAMESPACE-role
apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)
其中用户是 RoleBinding 中组的一部分
已提供的答案是正确的,您在撰写此答案时无法撤销证书。
有人已经提到使用 serviceaccount 令牌并将 RBAC 角色分配给用户而不是组,我只想添加一些有关此方法为何有效的详细信息。
让我们从一些理论开始。用户验证的过程包括:
身份验证 - 验证用户是谁的过程。在您的情况下,使用客户端证书,但其他方法(例如不记名令牌、身份验证代理)也可以达到此目的。使用证书时,用户由证书本身定义。谁持有该证书就可以作为用户。
授权 - 验证用户有权访问哪些内容的过程。对于 kubernetes,这是使用 RBAC 角色完成的。角色绑定用于向用户或组(由证书表示)添加特定权限(由 rbac 角色表示)。
我们现在知道您无法更改身份验证级别,因为签名的证书无法撤销。不过,您可以通过删除用户的权限来对授权级别进行更改(通过删除角色绑定或删除/更改 rbac 角色;请注意,可以将相同的 RBAC 角色分配给不同的用户/组)。
这种方法尽管是正确的,但可能会导致一些值得一提的安全问题。为新用户签署证书时,您需要记住永远不要使用相同的用户名签署证书。一旦权限被撤销,您就不应该对新证书和关联的角色绑定使用相同的用户名(至少在旧证书过期之前),以确保旧证书在使用时不会被允许访问集群。
另外,我想向您推荐另一种已经提出的解决方案:OpenID Connect Tokens
虽然 Kubernetes 不提供 OpenID Connect Identity Provider。您可以使用现有的公共 OpenID Connect 身份提供商(例如 Google)。或者,您可以运行自己的身份提供商,例如 dex 或 Keycloak
OpenId 令牌是生命周期非常短的令牌(例如 1 分钟),一旦您的 id_token 过期,kubectl 将尝试使用您的refresh_token 和 client_secret 刷新您的 id_token,并将refresh_token 和 id_token 的新值存储在您的 .kube/config 中。
即使此解决方案的配置比较复杂,但在需要管理大量用户时也值得考虑。
此外,可以使用身份验证代理或身份验证 Webhook来完成与其他身份验证协议(LDAP、SAML、Kerberos、备用 x509 方案等)的集成
小智 2
恐怕吊销证书是 Kubernetes 无法管理的事情。您可以在这里看到一些不错的替代建议https://github.com/kubernetes/kubernetes/issues/60917
归档时间: |
|
查看次数: |
4306 次 |
最近记录: |