我有一个spring boot应用程序,该应用程序在启动时会加载一个yaml文件,其中包含一个加密密钥,该密钥需要解密从spring config接收到的属性。
上述yaml文件作为k8s秘密文件挂载在etc / config / springconfig.yaml
如果springboot正在运行,我仍然可以使用“ docker exec -it 123456 sh”关闭并查看yaml文件。如何防止任何人能够查看加密密钥?
答案 0 :(得分:3)
您需要限制对Docker守护程序的访问。如果您正在运行Kubernetes集群,则应严格限制对可以执行docker exec ...
的节点的访问。
答案 1 :(得分:0)
OR
OR
答案 2 :(得分:0)
通常,此问题甚至比仅访问Docker守护程序还要严重。即使您禁止对工作节点使用SSH,并且没有人可以直接使用Docker守护程序-仍有读取机密的可能性。
如果命名空间中的任何人都有权创建Pod(这意味着可以创建部署/状态集/守护程序/作业/ cronjobs等)-它可以轻松创建Pod并在其中安装秘密并简单地读取它。即使某人仅具有修补pod /部署等功能的能力,他也可能会读取名称空间中的所有机密信息。您无法逃脱。
对我来说,这是Kubernetes中最大的安全漏洞。这就是为什么您必须非常仔细地授予创建和修补Pod /部署等权限的原因。始终限制对名称空间的访问,始终从RBAC规则中排除机密,并始终尝试避免提供Pod创建功能。
答案 3 :(得分:0)
您可以尝试将密钥安装为环境变量。一旦您的应用程序在启动时抓住了秘密,应用程序便可以取消设置该变量,从而使其无法访问该秘密。
希望这会有所帮助!
答案 4 :(得分:0)
一种可能是使用sysdig falco(https://sysdig.com/opensource/falco/)。该工具将查看pod事件,并在容器中启动shell时采取措施。典型的动作是立即杀死容器,因此不会发生读取秘密。 kubernetes将重新启动容器以避免服务中断。
请注意,您必须禁止访问节点本身,以避免docker daemon访问。