集中式配置

提示

此内容摘自电子书《为 Azure 构建云原生 .NET 应用程序》,可在 .NET 文档上获取,也可作为免费可下载的 PDF 脱机阅读。

Cloud Native .NET apps for Azure eBook cover thumbnail.

在整体式应用中,所有内容都在单个实例中运行。与该应用不同,云原生应用程序由跨虚拟机、容器和地理区域分布的独立服务构成。 管理数十个相互依赖的服务的配置设置可能非常困难。 不同位置的配置设置的重复副本容易出错,并且难于管理。 对于分布式云原生应用程序来说,集中式配置是一项关键要求。

第 1 章所述,十二要素应用建议要求严格分隔代码和配置。 必须从应用程序外部存储配置,并在需要时读入此配置。 将配置值存储为代码中的常量或文本值违反要求。 同一应用程序中的许多服务通常使用相同的配置值。 此外,我们必须跨多个环境(如开发、测试和生产)支持相同的值。 最佳做法是将它们存储在集中式配置存储中。

Azure 云提供了几个不错的选项。

Azure 应用程序配置

Azure 应用程序配置是一项完全托管的 Azure 服务,可将非机密配置设置存储在一个安全集中的位置。 存储的值可在多个服务和应用程序之间共享。

此服务易于使用,并提供若干优点:

  • 灵活键/值表示和映射
  • 使用 Azure 标签进行标记
  • 专用 UI 用于管理
  • 敏感信息加密
  • 查询和批量检索

Azure 应用程序配置将对键值设置所作的更改保留 7 天。 借助时间点快照功能,你可重新构造设置的历史记录,甚至可为失败的部署进行回滚。

应用程序配置会自动缓存每个设置,以避免过多调用配置存储。 刷新操作会等待,直到某项设置的已缓存值过期才更新该设置,即使其值在配置存储中发生了更改。 默认缓存过期时间为 30 秒。 可替代过期时间。

应用程序配置会对传输中和静态的所有配置值进行加密。 键名称和标签充当检索配置数据的索引,且不进行加密。

尽管应用程序配置提供强化的安全性,Azure Key Vault 仍然是存储应用程序机密的最佳位置。 Key Vault 提供硬件级加密、粒度访问策略和管理操作(如证书轮换)。 你可创建引用存储在 Key Vault 中的机密的应用程序配置值。

Azure Key Vault

Key Vault 是一项托管服务,用于安全地存储和访问机密。 机密是你希望严格控制对其的访问的任何东西,例如 API 密钥、密码或证书。 保管库是机密的逻辑组。

Key Vault 可以大大减少机密意外泄露的可能性。 有了 Key Vault,应用程序开发人员就再也不需要将安全信息存储在应用程序中。 这种做法消除了在代码中存储此信息的需求。 例如,如果某个应用程序需要连接到数据库, 则可将连接字符串安全地存储在 Key Vault 中,而不是存储在应用代码中。

应用程序可以使用 URI 安全访问其所需的信息。 这些 URI 允许应用程序检索特定版本的机密。 无需编写自定义代码即可保护 Key Vault 中存储的任何机密信息。

要访问 Key Vault,需要适当的调用方身份验证和授权。 通常,每个云原生微服务使用 ClientId/ClientSecret 组合。 将这些凭据保留在源代码管理范围之外非常重要。 最佳做法是在应用程序的环境中对其进行设置。 使用 Key Vault FlexVolume 可直接从 AKS 访问 Key Vault。

eShop 中的配置

eShopOnContainers 应用程序包含每个微服务的本地应用程序设置文件。 这些文件签入到源代码管理中,但不包括连接字符串或 API 密钥之类的生产机密。 在生产环境中,可能会用每个服务的环境变量替代各个设置。 在环境变量中注入机密是托管应用程序的一种常见做法,但这并不提供中央配置存储。 为了支持集中管理配置设置,每个微服务都包含一个设置来切换使用本地设置或 Azure Key Vault 设置。

参考