Skip to main content

配置管理

Vault vs Apollo

HashiCorp Vault 和携程 Apollo 都是用于管理应用程序配置和敏感数据的工具,但它们的设计理念和使用场景有所不同。以下是两者之间的一些主要区别:

  1. 主要目的和功能

    • Vault:专注于安全地存储、访问和管理敏感数据,如 API 密钥、密码、证书等。它的特点是对秘密的生命周期进行管理,并提供加密、访问控制、秘密撤销和动态秘密等功能。
    • Apollo:作为一个配置中心,用于集中管理应用配置。它允许你修改应用配置而不需要重启应用,并支持配置的版本管理、灰度发布等。
  2. 安全性

    • Vault:设计时就考虑到了安全性,提供了诸如秘密租期、自动秘密撤销、详细的审计日志、多种认证方式等安全特性。
    • Apollo:虽然也考虑了权限控制和安全性,但它的主要功能是配置管理,不像 Vault 那样专门针对敏感数据的安全存储和访问控制。
  3. 使用场景

    • Vault:适用于需要高度安全性的环境,尤其是在处理金融、医疗和其他对安全要求极高的领域。
    • Apollo:适用于需要集中管理和实时更新配置的场景,如互联网应用、大型分布式系统等。
  4. 客户端支持

    • Vault:提供了丰富的 API 和多种编程语言的客户端库,以便于集成到各种不同的应用程序中。
    • Apollo:同样提供了多种语言的客户端,便于在不同的开发环境中使用。
  5. 社区和生态

    • Vault:由 HashiCorp 支持,这是一个在 DevOps 领域具有强大影响力的公司,Vault 因此有着强大的社区支持和丰富的生态系统。
    • Apollo:由携程开发和维护,主要在中国区域有较多的使用者和社区支持。

综上所述,如果你的主要需求是安全地管理敏感数据和秘密,那么 Vault 可能是更好的选择。而如果你需要一个强大的配置中心来管理应用的配置信息,那么 Apollo 可能更适合你的需求。在实际使用中,这两个工具也可以相互补充,Vault 用于敏感数据的管理,而 Apollo 用于常规配置的管理。 alt text

mfa

alt text

https://portal.cloud.hashicorp.com/orgs/6a1b814a-85ef-4ed5-bc89-6ab2a569757e/projects/d261f5b2-e3fb-4960-865d-83d70a3a0f7c

source: https://github.com/hashicorp/vault/blob/main/shamir/shamir.go

这段 Go 语言代码实现了 Shamir 的秘密共享(Shamir's Secret Sharing)算法。Shamir 的秘密共享是一种密码学方法,用于将一个秘密(比如加密密钥)分割成多个部分(称为“shares”或“shares”),这样只有当收集到一定数量的部分时,才能重新构建原始的秘密。这个方法由以色列数学家 Adi Shamir 在 1979 年提出。

代码的主要功能如下:

  1. Split 函数:接受一个秘密(作为字节切片),并将其分割成指定数量的 shares,其中任意指定数量的 shares 就足以重建该秘密。这个函数会为每个 share 生成一个随机的多项式,并计算该多项式在不同点的值,然后将这些值作为 shares。

  2. Combine 函数:接受一组 shares 并尝试重建原始的秘密。这个函数使用了拉格朗日插值法(Lagrange interpolation)来计算原始多项式在 x=0 处的值,这个值就是秘密的原始值。

  3. polynomial 结构体:表示一个多项式,它有一个字段 coefficients,用来存储多项式的系数。

  4. makePolynomial 函数:生成一个具有随机系数的多项式,但第一个系数(截距)是给定的值。

  5. evaluate 方法:计算多项式在给定 x 值处的值。

  6. interpolatePolynomial 函数:使用拉格朗日插值法来估算多项式在特定 x 值处的值。

  7. addmultdivinverse 函数:用于在有限域 GF(2^8) 上执行加法、乘法、除法和求逆操作。这些数学运算对于在有限域上计算多项式和进行插值是必要的。

整体来说,这段代码提供了一个安全的方式来分发和重建秘密,而不需要将整个秘密暴露给单一个体或实体。这在需要分散风险和责任时非常有用,例如在加密货币钱包、安全存储备份密钥或分布式系统中管理密钥的情况下。