【问题标题】:What's the point of Spring Vault if token is kept statically?如果令牌是静态保存的,那么 Spring Vault 的意义何在?
【发布时间】:2018-02-24 04:57:25
【问题描述】:

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

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

当我刚开始阅读有关 Vault 的信息时,我期待一个“人机交互”阶段,其中令牌作为系统参数或在应用程序部署/启动之前的最后一刻提供。

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

【问题讨论】:

    标签: security authentication spring-boot jenkins hashicorp-vault


    【解决方案1】:

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

    如果 Token 是静态保存的,Spring Vault 的意义何在?

    身份验证机制至少取决于:

    • 您的安全政策
    • 您愿意承担的风险
    • 您愿意在运维方面付出的努力。

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

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

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

    如何保护身份验证令牌?

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

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

    每种可能性都有其自身的属性和实现的努力。如果您的运行时/容器有足够的(这是您定义的级别)保护,那么属性文件就可以了。如果您的要求是提高安全门槛,您可能希望在应用启动期间输入令牌并提示。

    我看不出 Vault 如何适应全自动部署链。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 2021-02-25
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2010-10-07
      • 2015-09-04
      相关资源
      最近更新 更多