在同一命名空间的服务层隔离秘密

Isolate Secrets at Service layer in same namespace

我正在尝试了解如何将我的 Kubernetes Secrets 隔离到特定服务。

例如,假设我有两个名为 private-keypublic-key 的秘密以及两个 Kubernetes 服务 auth-service网关服务

我想向 auth-service 提供 private-key secret 以生成令牌并向 gateway-service[=] 提供 public-key 28=] 来验证生成的令牌。所有机密和服务都在同一个命名空间中。

如何将 private-key 的访问限制为仅 auth-service

无法实现,这是 Kubernetes 的设计。 Kubernetes 中的秘密是每个命名空间,这个命名空间中的任何 pod 都可以挂载它们。因此,实现这一目标的唯一方法是使用单独的名称空间。顺便说一句,不仅 Secrets,而且 RBAC 权限都是每个命名空间的——您不能将用户权限限制到特定对象,而是限制到整个命名空间。

此外,从安全的角度来看,您可能需要为用于签署令牌的私钥考虑更安全的解决方案,例如 HSM。有一些云选项提供此功能,例如 Azure KeyVault 或 AWS CloudHSM。

关于最后的评论,这是我们最终构建自己的秘密加密解决方案的原因之一 - Kamus。 Kamus 允许您为特定服务加密机密,并且只有该服务才能解密它们。这使我们能够拥有更好的机密权限粒度,这是 Kubernetes 机密机制没有提供的。