如何在同一资源组中设置来自 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":
时,没有任何反应
我想作为一个功能新手,我在错误的地方寻找日志......但即使我找到了它们,这是否是完成任务的正确方法?
- Azure PowerShell 是否在函数中工作?
- 是否需要先
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)
我想设置一个 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":
时,没有任何反应我想作为一个功能新手,我在错误的地方寻找日志......但即使我找到了它们,这是否是完成任务的正确方法?
- Azure PowerShell 是否在函数中工作?
- 是否需要先
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)