如何防止 pods 在同一个命名空间中安装机密?
How do I prevent pods from mounting secrets in the same namespace?
我的命名空间包含多个机密和 pods。使用部署规范将机密作为卷选择性地安装在 pods 上。是否可以在某些 pods 中拒绝将特定机密作为卷安装。我测试了 RBAC,它阻止 pods 通过 api 访问机密。考虑到允许将所有机密安装在同一命名空间的 pods 中存在安全风险,是否存在用于安装机密的类似机制。
没有简单的方法可以做到这一点,因为密钥是由 kubelet 安装的。但是您可以配置一个验证 web-hook 来拦截所有到达 Kubernetes API 服务器的 pod 创建请求。您将在 web-hook 中编写代码以验证并仅在 pod 规范没有任何无效或不需要的秘密时才允许 pod 创建请求,否则它会拒绝 pod 创建请求。
另一种选择是让 Open Policy Agent 验证 pod 创建请求,您可以在其中编写策略来实现类似的验证。
另一个答案是正确的,但为了完整起见,您可以编写一个准入控制器来根据某种策略检查请求。这就是内置的 NodeRestriction 准入控制器所做的,它有助于限制事物,因此 kubelet 只能访问 pods 的秘密,它应该是 运行。
我的命名空间包含多个机密和 pods。使用部署规范将机密作为卷选择性地安装在 pods 上。是否可以在某些 pods 中拒绝将特定机密作为卷安装。我测试了 RBAC,它阻止 pods 通过 api 访问机密。考虑到允许将所有机密安装在同一命名空间的 pods 中存在安全风险,是否存在用于安装机密的类似机制。
没有简单的方法可以做到这一点,因为密钥是由 kubelet 安装的。但是您可以配置一个验证 web-hook 来拦截所有到达 Kubernetes API 服务器的 pod 创建请求。您将在 web-hook 中编写代码以验证并仅在 pod 规范没有任何无效或不需要的秘密时才允许 pod 创建请求,否则它会拒绝 pod 创建请求。
另一种选择是让 Open Policy Agent 验证 pod 创建请求,您可以在其中编写策略来实现类似的验证。
另一个答案是正确的,但为了完整起见,您可以编写一个准入控制器来根据某种策略检查请求。这就是内置的 NodeRestriction 准入控制器所做的,它有助于限制事物,因此 kubelet 只能访问 pods 的秘密,它应该是 运行。