如何在 Azure Key Vaults 中创建分层数据结构

How do I create hierarchical data structures in Azure Key Vaults

我需要一种在 Azure Key Vaults 中存储分层数据的方法,这样我的结构类似于:

AppName
  /Prod
    /Data
  /Test
    /Data
AppName2
  /Prod
    /Data

...

据我所知,我只能存储平面数据结构。我希望能够存储类似于 HashiCorp 的 Vault 的数据,它允许层次结构。

例如,在 HashiCorp 的 Vault 中,我可以使用 'path' 获取数据:"app/test/TestConnection" 并且我在路径的端点处获取值:TestConnection。

任何关于替代方案的建议或关于如何使用 Key Vault 执行我需要执行的操作的说明都很好。

谢谢


更新

我尝试了一些建议:MySettings--SomeSection--SecretThing,Multiple Vaults,但都没有按照我需要的方式工作,如上所述。 没有错误输入,但我想做的只是在 Key Vault 中不可用。

@juunas 原来你的建议可能是最好的解决方案。我刚刚在另一篇文章中发现MySettings--SomeSection--Secret在.NET Core中翻译成类似的东西:

MySettings: {
    SomeSection: "Secret"
}

由于我的客户想要使用 Key Vault,我们可能会为每个应用程序的每个秘密存储 json 结构化数据。

欢迎提出任何其他建议

Key Vault 不支持机密的层次结构。

要模拟结构,您可以执行类似于 .NET Core 对其 Key Vault 配置提供程序执行的操作。您可以指定一个名为 Settings--SomeCategory--SomeValue 的秘密,加载时它将对应以下 JSON:

{
  "Settings": {
    "SomeCategory": {
      "SomeValue": "value goes here"
    }
  }
}

所以基本上您可以使用分隔符来模拟结构,这也类似于 Azure Blob 存储模拟文件夹的方式。

我建议不要在同一个密钥库中混合不同的环境机密。不能将访问限制为某些密钥,因为仅在 Key Vault 级别授予和拒绝访问。您可能不希望相同的 persons/applications 能够访问所有不同的环境,而是仅向选定的一组用户和应用程序授予对生产环境的访问权限,反之亦然。

由于 Key Vault 服务本身并不真正花费任何费用,因此我们至少采用了为每个环境(即开发、测试和生产)创建一个 Key Vault 的方法。在该密钥库中,机密是 "structured" 前缀,即 AppName-DataAppName2-Data。这带来了额外的好处,即当从开发转移到测试和生产时,不需要更改对秘密的引用,因为它们在所有环境中都具有相同的名称。只需更改对 Key Vault 的引用,一切就绪!