使用Azure Function和Key Vault管理Azure存储帐户密钥的轮换

时间:2020-10-12 16:25:54

标签: azure-storage azure-keyvault

问了一个关于Removing Secrets from Azure Function Config的问题,建议managing the rotation of keys for Azure Storage Accounts and the keeping of those keys secret in Azure KeyVault使用这种Microsoft方法

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

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

现有情况:

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

我对建议的理解是它引入了

  1. “ keyRotationAzureFunction”,一个具有两个Httptriggers的Azure函数,一个对即将过期的机密事件进行事件网格事件响应,另一个可以按需重新生成密钥。
  2. “ keyRotationKeyVault”,由keyRotationAzureFunction对其进行操作的密钥库。
  3. 一个事件网格订阅,它从“ keyRotationKeyVault”监听SecretNearExpiry事件

我对理解这种方法有疑问。我看不出有更好的方法,只能整理这个Stack Overflow问题中的问题,而不是三个单独的问题。

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

2 个答案:

答案 0 :(得分:1)

我不确定为什么ARM模板对您不起作用。您需要是Storage and Key Vault的所有者才能创建必要的权限。 要回答您的问题:

  1. 是的,它正在使用带有存储信息的标签来连接和重新生成密钥
  2. 该值并非用于连接到Storage,但它可以是一种替代的连接方式。 您可以在此处查看有关标签的更多信息: https://github.com/jlichwa/KeyVault-Rotation-StorageAccountKey-PowerShell

答案 1 :(得分:1)

  1. 是的,该功能必须作为可以旋转该角色提供的键的主体运行。密钥旋转可以保留为单独的角色,这样您就可以提供对机密的细密访问,从而避免泄漏。

  2. 该函数(而是主体)仅需要“获取”访问用于生成SAS令牌的机密(这是一种特殊的机密,其中返回的值将更改以生成新的SAS令牌),以授予访问权限存放。必须将密钥保管库配置为管理存储帐户的令牌。请参阅我最近在https://docs.microsoft.com/samples/azure/azure-sdk-for-net/share-link/发布的样本,希望可以简化此问题。

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