使用 Azure Function 和 Key Vault 管理 Azure 存储帐户密钥的轮换
Managing the rotation of Azure storage account keys with Azure Function and Key Vault
问了一个关于 this Microsoft approach was recommended for managing the rotation of keys for Azure Storage Accounts and the keeping of those keys secret in Azure KeyVault
的问题
请注意,我们正在访问 Azure 存储帐户中的表,而与 Blob 和队列不同的是,表不支持托管身份访问控制。
建议附带了一些 Azure 部署模板,这些模板 运行 不适合我,所以我决定自己创建资源来检查我对该方法的理解。在尝试遵循建议后我有一些问题
现状:
- 一个名为“OurAzureFunction”的现有函数,当前具有直接在函数配置中使用密钥配置的存储帐户连接字符串。
- 名为“ourstorageaccount”的现有存储帐户,其中包含“OurAzureFunction”运行的应用程序数据
我对推荐的理解是介绍了
- “keyRotationAzureFunction”,一个具有两个 Httptriggers 的 Azure 函数,一个用于响应即将到期的机密的事件网格事件,另一个可以调用以按需重新生成密钥。
- “keyRotationKeyVault”,一个由 keyRotationAzureFunction 操作的 Key Vault。
- 监听来自“keyRotationKeyVault”
SecretNearExpiry
事件的事件网格订阅
我对这种方法的理解有问题。除了整理这个 Stack Overflow 问题中的问题而不是三个单独的问题之外,我找不到更好的方法。
- keyRotationAzureFunction 是否在“ourstorageaccount”上具有“存储帐户密钥操作员服务角色”以便它可以重新生成其密钥?
- “OurAzureFunction”有什么配置允许它创建到我们的存储帐户的连接?它是“keyRotationKeyVault”中标记的秘密吗?
- “keyRotationKeyVault”中secret的值是不是只使用了与secret相关的标签?
我不确定为什么 ARM 模板不适合您。您需要成为存储和 Key Vault 的所有者才能创建必要的权限。
回答您的问题:
- 是
- 是的,它使用标签和存储信息来连接和重新生成密钥
- Value 不适用于连接到存储,但它可能是另一种连接方式。
您可以在此处查看有关标签的更多信息:
https://github.com/jlichwa/KeyVault-Rotation-StorageAccountKey-PowerShell
是的,该函数必须 运行 作为可以轮换该角色提供的密钥的主体。密钥轮换可以作为一个单独的角色保留,以便您可以提供对秘密的精细访问以避免泄漏。
函数(而不是委托人)只需要“获取”访问用于生成 SAS 令牌的秘密(这是一种特殊的秘密,返回的值将更改以生成新的 SAS 令牌) 授予对存储的访问权限。 Key Vault 必须配置为管理存储帐户的令牌。请参阅我最近在 https://docs.microsoft.com/samples/azure/azure-sdk-for-net/share-link/ 上发布的示例,我希望它能简化问题。
secret的值实际上是为存储账户生成的SAS令牌。如果您的 Key Vault 中有其他机密,或者甚至以这种方式管理多个功能应用程序(您可以为即将到期的存储帐户密钥识别正确的机密),这些标签用于确定将哪个机密用于存储帐户。
问了一个关于
请注意,我们正在访问 Azure 存储帐户中的表,而与 Blob 和队列不同的是,表不支持托管身份访问控制。
建议附带了一些 Azure 部署模板,这些模板 运行 不适合我,所以我决定自己创建资源来检查我对该方法的理解。在尝试遵循建议后我有一些问题
现状:
- 一个名为“OurAzureFunction”的现有函数,当前具有直接在函数配置中使用密钥配置的存储帐户连接字符串。
- 名为“ourstorageaccount”的现有存储帐户,其中包含“OurAzureFunction”运行的应用程序数据
我对推荐的理解是介绍了
- “keyRotationAzureFunction”,一个具有两个 Httptriggers 的 Azure 函数,一个用于响应即将到期的机密的事件网格事件,另一个可以调用以按需重新生成密钥。
- “keyRotationKeyVault”,一个由 keyRotationAzureFunction 操作的 Key Vault。
- 监听来自“keyRotationKeyVault”
SecretNearExpiry
事件的事件网格订阅
我对这种方法的理解有问题。除了整理这个 Stack Overflow 问题中的问题而不是三个单独的问题之外,我找不到更好的方法。
- keyRotationAzureFunction 是否在“ourstorageaccount”上具有“存储帐户密钥操作员服务角色”以便它可以重新生成其密钥?
- “OurAzureFunction”有什么配置允许它创建到我们的存储帐户的连接?它是“keyRotationKeyVault”中标记的秘密吗?
- “keyRotationKeyVault”中secret的值是不是只使用了与secret相关的标签?
我不确定为什么 ARM 模板不适合您。您需要成为存储和 Key Vault 的所有者才能创建必要的权限。 回答您的问题:
- 是
- 是的,它使用标签和存储信息来连接和重新生成密钥
- Value 不适用于连接到存储,但它可能是另一种连接方式。 您可以在此处查看有关标签的更多信息: https://github.com/jlichwa/KeyVault-Rotation-StorageAccountKey-PowerShell
是的,该函数必须 运行 作为可以轮换该角色提供的密钥的主体。密钥轮换可以作为一个单独的角色保留,以便您可以提供对秘密的精细访问以避免泄漏。
函数(而不是委托人)只需要“获取”访问用于生成 SAS 令牌的秘密(这是一种特殊的秘密,返回的值将更改以生成新的 SAS 令牌) 授予对存储的访问权限。 Key Vault 必须配置为管理存储帐户的令牌。请参阅我最近在 https://docs.microsoft.com/samples/azure/azure-sdk-for-net/share-link/ 上发布的示例,我希望它能简化问题。
secret的值实际上是为存储账户生成的SAS令牌。如果您的 Key Vault 中有其他机密,或者甚至以这种方式管理多个功能应用程序(您可以为即将到期的存储帐户密钥识别正确的机密),这些标签用于确定将哪个机密用于存储帐户。