首页 > 解决方案 > 使用 Azure Function 和 Key Vault 管理 Azure 存储帐户密钥的轮换

问题描述

在询问了有关从 Azure 功能配置中删除机密的问题后,建议使用此 Microsoft 方法来管理 Azure 存储帐户的密钥轮换并将这些密钥保密在 Azure KeyVault 中

请注意,我们正在访问 Azure 存储帐户中的表,并且与 Blob 和队列不同的表不支持托管标识访问控制。

该建议附带了一些不会为我运行的 Azure 部署模板,因此我决定自己创建资源以检查我对该方法的理解。在尝试遵循建议后,我有一些问题

现有情况:

  1. 一个名为“OurAzureFunction”的现有函数,该函数当前直接在函数配置中使用密钥配置了存储帐户连接字符串。
  2. 一个名为“ourstorageaccount”的现有存储帐户,其中包含“OurAzureFunction”操作的应用程序数据

我对建议的理解是它介绍了

  1. “keyRotationAzureFunction”,一个带有两个 Httptrigger 的 Azure 函数,一个响应即将过期的机密的事件网格事件,另一个可以调用以按需重新生成密钥。
  2. “keyRotationKeyVault”,由 keyRotationAzureFunction 操作的 Key Vault。
  3. SecretNearExpiry监听来自“keyRotationKeyVault”的事件的事件网格订阅

我对理解这种方法有疑问。除了整理这个 Stack Overflow 问题中的问题而不是三个单独的问题之外,我找不到更好的方法。

  1. keyRotationAzureFunction 是否在“ourstorageaccount”上具有“存储帐户密钥操作员服务角色”,以便它可以重新生成其密钥?
  2. “OurAzureFunction”有什么配置允许它创建到 ourstorageaccount 的连接?它是“keyRotationKeyVault”中的标记秘密吗?
  3. “keyRotationKeyVault”中的秘密值不只是使用与秘密相关的标签吗?

标签: azure-storageazure-keyvault

解决方案


  1. 是的,该函数必须作为可以轮换该角色提供的密钥的主体运行。密钥轮换可以作为一个单独的角色保留,以便您可以提供对机密的精细访问以避免泄漏。

  2. 该函数(更确切地说,主体)只需要“获取”对用于生成 SAS 令牌的机密的访问权限(这是一种特殊类型的机密,返回的值将更改以生成新的 SAS 令牌)授予对存储的访问权限。Key Vault 必须配置为管理存储帐户的令牌。请参阅我最近在https://docs.microsoft.com/samples/azure/azure-sdk-for-net/share-link/上发布的示例,我希望它可以简化问题。

  3. 密钥的值实际上是为存储帐户生成的 SAS 令牌。这些标签用于确定存储帐户使用哪个机密,以防您的 Key Vault 中有其他机密,或者甚至以这种方式管理多个功能应用程序(您可以识别即将到期的存储帐户密钥的正确机密)。


推荐阅读