客户端认证对于k8s来说足够吗?

3
我正在尝试保护我的k8s集群,并查看k8s的客户端身份验证授权支持。我的要求是我想能够向k8s apiserver唯一地识别自己(例如,客户端),但是到目前为止我所读的关于客户端身份验证的所有内容都不是解决方案。
我的理解是,服务器将仅确保所提供的客户端证书实际上由证书颁发机构签名。如果黑客获得了另一个由同一证书颁发机构签名的证书(在我们组织中不难做到),并使用该证书与我的服务器进行通信怎么办?似乎像Swarm和k8s这样的流行编排工具支持此选项并将其标榜为最安全的选项,因此必须有一些原因来支持这样做。是否有人能够解释一下?
1个回答

3

该证书不仅由CA授权验证,客户端证书还包含通用名称(CN),可以与简单的ABAC授权一起使用,以限制对特定用户或组的访问。

此外,获取签名证书也不应该很容易。我认为根CA的访问权限应该非常有限,并且应该清楚谁有权签署证书以及何时签署。理想情况下,根CA应该位于离线主机上。

除此之外,听起来CA也用于其他目的。如果是这样,您可以考虑为客户端身份验证创建单独的根证书。您可以通过为apiserver设置不同的CA文件--client-ca-file--tls-ca-file,使用不同的CA用于服务器证书。这样,您就可以限制谁能创建客户端证书,并仍然使用您组织的CA验证服务器身份(该CA可能已经分发到所有组织计算机上)。

其他身份验证方法

如前所述,Kubernetes还有其他身份验证方法。静态令牌文件静态密码文件的缺点是密钥必须以明文形式存储在磁盘上。而且每次更改都必须重新启动apiserver。 服务帐户令牌专为在集群中运行的应用程序使用。 OpenID可能是客户端证书的安全替代方案,但据我所知,它的设置要困难得多。特别是当尚无OpenID服务器时。
我不太了解其他身份验证方法,但它们似乎旨在与现有的单点登录服务集成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接