【问题标题】:Azure KeyVault key rotationAzure KeyVault 密钥轮换
【发布时间】:2016-08-15 15:53:46
【问题描述】:

用于密钥轮换的Azure Storage sample code 演示了如何使用多个唯一命名的秘密。但是,现在可以在 KeyVault 中创建单个 Secret 的多个版本。我看不出为什么无法使用版本实现密钥轮换,而且从表面上看,它似乎更容易管理。

任何人都可以就您为什么选择多个 Secret 而不是单个 Secret 的版本来支持密钥轮换提供任何指导吗?如果不是这个,可能还有关于哪些版本的一般指导?

谢谢!

【问题讨论】:

  • 我不是专家,但查看 API,似乎每个没有版本标识符的秘密都默认为最新版本,这就是预期的方法。因此,大多数情况下,看起来那里的 API(REST、.NET 等)并没有真正构建代码模式来支持使用您想要的版本。
  • 例如,看起来 ResolverKeyAsync 方法不允许您提供版本值来选择不同版本的密钥。或许当 API 已经针对这种新功能成熟时,这种模式会更有意义。再说一次,不是专家,一粒盐,等等。
  • 谢谢@kyle-hale。回答您的观点“[..] 查看 API,似乎每个没有版本标识符的秘密都默认为最新版本” - 正确。但我认为这并不重要(事实上我认为这是可取的)。由于每个版本的密钥都可以唯一寻址,因此只要存储版本,就可以解密用以前版本加密的数据,并使用最新版本进行加密
  • 我的直接想法是他们在示例中使用了这种方法,因为它更容易遵循,使用版本会使代码不太清晰。在other places 版本控制似乎是建议的方法
  • 请参阅 - github.com/Azure/azure-storage-net/issues/334 - “我们正在努力改进整个密钥轮换体验,更新示例以使用 Key Vault 密钥版本是这项工作的一部分。”

标签: azure azure-keyvault


【解决方案1】:

根据您使用的 SDK,您可以随意使用单个密钥和多个版本进行密钥轮换。

对于我们基于 Node.js 的应用程序,我们有指向完整 KeyVault 机密 URI 的配置。

一些秘密只指向秘密的短网址(无版本),因此应用程序获得“最新版本”。

需要轮换的其他机密将需要版本的完整 URL。例如,我们使用 Azure 表加密;因此加密时表中的每一行都使用来自 KeyVault 的密钥包装密钥。密钥包装密钥是完整的 KeyVault 版本 URL,因为您需要该特定密钥来解密表数据。随着时间的推移,不同的行将指向不同的密钥版本。

对于一般场景,即将当前版本的密钥转换为新版本,只需构建配置系统和连接逻辑以一次支持 2 个密钥 - 如果一个失败,请使用另一个;或考虑基于时间的逻辑。

任何方法都可以,但请考虑如果您随着时间的推移使用版本而不是增加额外的秘密名称,您的故事将会多么美好和“干净”。

【讨论】:

  • 密钥可以拥有的版本数量是否有限制?
猜你喜欢
  • 2018-04-12
  • 1970-01-01
  • 2019-07-30
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多