如何阻止访问已安装的机密文件?

问题描述 投票:2回答:5

我有一个Spring启动应用程序,它在启动时加载一个yaml文件,其中包含一个加密密钥,它需要解密从spring配置接收的属性。

所述yaml文件作为k8s秘密文件安装在etc / config / springconfig.yaml中

如果我的springboot正在运行,我仍然可以使用“docker exec -it 123456 sh”来查看yaml文件。如何防止任何人查看加密密钥?

spring-boot docker kubernetes
5个回答
3
投票

您需要限制对Docker守护程序的访问。如果您正在运行Kubernetes集群,则应严格限制对可以执行docker exec ...的节点的访问。


0
投票
  1. 完成流程后,您可以删除该文件。鉴于您的应用程序不需要再次阅读。

要么,

  1. 您可以通过--env-file设置这些属性,然后您的应用应该从环境中读取。但是,如果您有可能登录到该容器,他也可以读取环境变量。

要么,

  1. 使用-D将这些属性设置为JVM而不是系统环境。 Spring也可以从JVM环境中读取属性。

0
投票

通常,问题甚至比仅仅访问Docker守护程序更糟糕。即使你禁止SSH到工作节点,没有人可以直接使用Docker守护进程 - 仍然有可能读取秘密。

如果命名空间中的任何人都有权创建pod(这意味着能够创建部署/ statefulsets / daemonsets / jobs / cronjobs等) - 它可以轻松地在其中创建pod和mount秘密并简单地读取它。即使有人只能修补pod /部署等等 - 他可能会读取命名空间中的所有秘密。没有办法逃脱这种情况。

对我来说,这是Kubernetes最大的安全漏洞。这就是为什么你必须非常谨慎地提供创建和修补pod /部署等的访问权限。始终限制对命名空间的访问,始终从RBAC规则中排除秘密,并始终尽量避免提供pod创建功能。


0
投票

您可以尝试将密钥作为环境变量加载。一旦您的应用程序在启动时获取秘密,应用程序就可以取消设置该变量,使其上的秘密无法访问。

希望这可以帮助!


0
投票

一种可能性是使用sysdig falco(https://sysdig.com/opensource/falco/)。此工具将查看pod事件,并且可以在容器中启动shell时执行操作。典型的操作是立即杀死容器,因此不会发生读取秘密。并且kubernetes将重新启动容器以避免服务中断。

请注意,您必须禁止访问节点本身以避免停靠守护程序访问。

© www.soinside.com 2019 - 2024. All rights reserved.