如何在函数应用中引用 Azure Key Vault 中的密钥?

Posted

技术标签:

【中文标题】如何在函数应用中引用 Azure Key Vault 中的密钥?【英文标题】:How do you reference a Key from Azure Key Vault in a function app? 【发布时间】:2020-09-18 02:31:01 【问题描述】:

过去我为 Azure Functions 使用了很多机密,现在我尝试使用 RSA 加密的 4096 位密钥。这是一个私有 PuTTy .ppk 密钥,我已将其导出为 .pem 类型以符合 Azure 的要求。我有一个 Python 3.7 应用程序,在其中部署了所需的功能,并尝试在应用程序设置中使用以下语句引用所需的键:

@Microsoft.KeyVault(SecretUri=https://thevault-address.vault.azure.net/keys/thekey-name/)

还有

@Microsoft.KeyVault(SecretUri=https://thevault-address.vault.azure.net/keys/thekey-name/latestVersionHash)

但是当我尝试保存它时,它说引用无法解析。

应用程序的 Identity On 并且 Vault 具有针对秘密配置为 Get 和 List 以及 Keys 的访问策略作为所有内容(最初只是 Get 和 List,但添加了其余部分以防万一,因为我认为它可能是一个“加密/解密”问题)。

知道为什么我会得到状态:无效语法和错误详细信息: 无法解析 Key Vault 引用,因为找到无效的 Key Vault 引用语法?谢谢!

【问题讨论】:

【参考方案1】:

您上面描述的过程对于引用 Secret 是完全正确的。这就是为什么在字符串 @Microsoft.KeyVault(SecretUri= 中您设置 SecretUri 等于...

对于 Keys thow,这是不可能的。天蓝色 Web 应用无法引用密钥。


要清除任何混淆以便从 Web 应用程序引用 Azure KeyVault 的机密,您需要三点

    你的应用程序身份开启 在 Keyvault 中设置策略,以便您的应用能够访问该值 在您的 Web 应用程序的配置选项卡中,您将变量的值设置为 @Microsoft.KeyVault(SecretUri=Secret Identifier)

如果您转到 Keyvault 资源并单击您的密码,则可以找到密码标识符

标识值需要相同。

【讨论】:

很遗憾,不,我已经尝试过了。如果您未指定版本,则末尾的 / 表示该引用是针对最新版本的密钥/密钥。我有这样引用的秘密,它完美地工作:@Microsoft.KeyVault(SecretUri=thevault-address.vault.azure.net/secrets/thesecret-name)。哦,对于 SecretUri=...,不需要大括号。无论如何,我尝试了所有变体,带大括号,不带/,不带/,但它只是不适用于键。秘密非常好。 @VladS 花括号只是为了表明这是一个变量。它应该只是标识符。 @VladS 我正在阅读 KeyVault 的文档。无法像使用 Secrets 那样引用它。如果您愿意,可以通过可用的 API 访问它。 哦,好吧,是的,找到了。看来我需要使用 Python 库 azure.keyvault.key 和 azure.identity。谢谢你:) 您仍然可以发出 get 调用并获取密钥。有一个可用的获取点来获取密钥。但是你不能引用它。【参考方案2】:

不幸的是,应用服务/Azure Functions 仅支持引用机密,不支持密钥或证书。事实上,Key Vault 根本不会让您访问密钥的私有部分,因此如果您需要访问它,您需要将其存储为秘密,或者如果您只想这样做,请使用 Key Vault SDK使用保存的密钥进行加密/解密。

【讨论】:

以上是关于如何在函数应用中引用 Azure Key Vault 中的密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用用户分配的托管标识访问 Azure 中 Function App Config 的 Key Vault

如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户

Azure Key Vault 是不是支持客户端证书?

从 Azure Functions 访问 Azure Key Vault 时访问被拒绝

无法在 Azure 函数中引用 GeoSpatial 类型点 [重复]

如何在 Azure Key Vault 中序列化和反序列化 PFX 证书?