如何在同一资源组中设置来自 Azure Function 应用程序的 Key Vault 机密?

How to set a Key Vault secret from Azure Function app in the same resource group?

我想设置一个 Azure 函数,它将 运行 每 4 小时从 URL 中检索一个 JWK(它不是我在下面显示的那个)并将其保存到Key Vault 作为秘密。

当我在命令行尝试 Powershell 代码时,它正常工作:

PS C:\> $x5c = (Invoke-WebRequest https://login.microsoftonline.com/common/discovery/v2.0/keys |
>> ConvertFrom-Json |
>> Select-Object -expand keys |
>> Where-Object -Property kid -Eq SsZsBNhZcF3Q9S4trpQBTByNRRI) |
>> Select-Object -expand x5c
PS C:\> $secretvalue = ConvertTo-SecureString $x5c -AsPlainText -Force
PS C:\> $secret = Set-AzKeyVaultSecret -VaultName my-keyvault -Name 'MyLittleSecret' -SecretValue $secretvalue

而且我可以在 Key Vault 中看到秘密:

然而,当我尝试设置定时 Azure 函数时,当我单击 "Run":

时,没有任何反应

我想作为一个功能新手,我在错误的地方寻找日志......但即使我找到了它们,这是否是完成任务的正确方法?

  1. Azure PowerShell 是否在函数中工作?
  2. 是否需要先 Login-AzAccount
Does Azure PowerShell work in a Function?

是的,你可以使用Powershell to create Azure function. And this应该对你有帮助

Does it require a Login-AzAccount first?

是的,如果您需要一些与 Azure 资源相关的逻辑,您需要它。

当涉及到实际问题时,我认为您需要将函数压缩并上传到 azure 函数应用程序,

压缩文件夹以上传 Azure 函数

Compress-Archive -Path * -DestinationPath Function1.zip

Does Azure PowerShell work in a Function?

是的,它会起作用。

Does it require a Login-AzAccount first?

不,你不需要那样做。


更多详情,请按照以下步骤操作。

1.Make确定您使用如下设置创建了函数应用程序。

2.After 创建功能应用程序,导航到门户中应用程序的 Identity,启用系统分配的 MSI,如下所示。

3.Navigate 到门户中的密钥库 -> Access policies -> Add Access Policy -> 搜索你的函数名称(MSI 与你的函数同名)并添加它具有正确的秘密权限。

4.In这个功能,不需要手动登录,会自动用MSI登录,只需要使用下面的命令,我这边没问题。

param($Timer)

$x5c = (Invoke-WebRequest https://login.microsoftonline.com/common/discovery/v2.0/keys | ConvertFrom-Json |Select-Object -expand keys |Where-Object -Property kid -Eq SsZsBNhZcF3Q9S4trpQBTByNRRI) | Select-Object -expand x5c
$secretvalue = ConvertTo-SecureString $x5c -AsPlainText -Force
$secret = Set-AzKeyVaultSecret -VaultName joykeyvault -Name 'MyLittleSecret' -SecretValue $secretvalue
Write-Host $secret.Name

检查密钥库:

另一种替代方法是在运行时从 keyvault 中获取它并将其存储在配置中,然后在代码中使用配置值。 参考:https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

配置将是这样的 用户名KV: @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931) 密码KV: @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)