如果令牌静态保存,Spring Vault 有什么意义?

What's the point of Spring Vault if token is kept statically?

我正在尝试了解 Spring Vault 中身份验证令牌背后的概念以及部署链的外观?

在我阅读的所有地方,我都看到身份验证令牌必须以某种方式静态提供,但我不明白这是如何保证安全的?如果我使用保险库来安全地存储我的秘密,而不仅仅是在属性文件中,那么为什么要将令牌保存在一个文件中?

当我刚开始阅读 Vault 时,我期待一个 'human interaction' 阶段,其中令牌作为系统参数或在部署/启动应用程序之前的最后一刻提供。

此外,我看不出 Vault 如何适应全自动部署链。每当我的 master 分支发生更改时,我的 Jenkins 都会自动构建,并将通过 ssh 将 jar 和 运行 发布到指定的机器。据我对 Vault 的了解,这不是我发布应用程序的方式,对吗?

您的 post 包含多个主要与信任有关的问题。

What's the point of Spring Vault if the Token is kept statically?

认证机制至少依赖于:

  • 您的安全策略
  • 您愿意接受的风险
  • 您愿意在操作方面付出的努力。

对于某些环境,具有静态令牌的 Vault 非常好,而其他情况则需要多因素身份验证。使用静态令牌,您可以在所有 apps/app 个实例中使用单个令牌,或在每个 app/app 个实例中使用不同的令牌。这样您就可以锁定特定令牌,而其他令牌仍然有效。

也许从不同的角度看待这个问题会有所帮助:您试图通过 Vault 解决什么需求?您愿意在安全引入问题上花费多少精力?

Vault 使用令牌作为通用身份验证机制,但不限于此。您可以使用客户端证书、多因素身份验证和一些其他机制来获取会话令牌,然后将其保存在内存中。

How is the authentication token secured?

这取决于您的环境和您愿意承担的风险。您可以至少通过以下方式向任何 Java 应用程序提供静态令牌,一般来说,配置 属性:

  • 一个属性文件
  • 环境变量
  • 系统属性
  • 命令行参数
  • 应用程序启动时提示

每种可能性都有其自身的特性和实现的努力。如果您的 runtime/container 具有足够的(这是您定义的级别)保护,则 属性 文件完全可以。如果您的要求是提高安全标准,您可能希望在应用程序启动时根据提示输入令牌。

I don't see how Vault can fit with a fully automated deployment chain.

这不完全是一个问题,但可能是您 post 中最有趣的句子。

当您今天使用 Jenkins 和 SSH 进行部署时,这意味着您信任 Jenkins 机器和实际执行部署的操作员。在这种安排中,信任 Jenkins 似乎是可以接受的风险,因为对运行时的身份验证是 Jenkins 设置的一部分。由此产生的问题是:您信任您的运行时吗?您信任它到什么程度?如果您不信任您的运行时(即,运行时环境会泄露秘密,并且意外方可以轻松访问它),那么您可能会遇到比静态令牌更大的问题。