如何使用 PowerShell 脚本使用函数应用默认密钥和服务总线连接字符串更新 Key Vault 机密

Posted

技术标签:

【中文标题】如何使用 PowerShell 脚本使用函数应用默认密钥和服务总线连接字符串更新 Key Vault 机密【英文标题】:How to update Key Vault Secrets with function app default key and service bus connection string using PowerShell script 【发布时间】:2022-01-07 08:42:33 【问题描述】:

我想通过使用 PowerShell/CLI 脚本获取函数应用默认密钥和服务总线连接字符串来更新密钥保管库机密值。

那么,谁能帮我解决这个问题。

【问题讨论】:

您的问题格式不正确。请查看并提供更多详细信息。 @Pradeep - 您想通过函数应用访问密钥保管库机密,还是使用 PowerShell 更新密钥保管库机密、服务总线连接字符串? 您是否尝试过查看文档docs.microsoft.com/en-us/azure/key-vault/secrets/… @HariKrishnaRajoli-MT,我想读取函数应用默认密钥和服务连接字符串值,然后使用 PowerShell 脚本更新 azure key vault 中的机密。 【参考方案1】:

基于上述需求,我们编写了以下PowerShell脚本来拉取函数应用键值(默认和MasterKey),函数应用程序设置(Azure webjob storage)值。

使用这些密钥值,脚本将在相应的密钥保管库中创建一个秘密。

这是 PowerShell 脚本:

$accountInfo = az account show
$accountInfoObject = $accountInfo | ConvertFrom-Json
$subscriptionId  = $accountInfoObject.id

$resourceGroup = <ResourceGroupName>
$functionName = <functionName>
$vaultname=<vaultName>

$functionkeylist = az rest --method post --uri "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$functionName/host/default/listKeys?api-version=2018-11-01"
$keylistobject = $functionkeylist | ConvertFrom-Json

##To pull the functionapp specific setting 

$appsetting=az functionapp config appsettings list --name $functionName --resource-group $resourceGroup --query "[?name=='AzureWebJobsStorage'].Value:value" -o tsv ##pulling specific functionappsetting

##This block will create the secrets for specific app setting & functionapp key

az keyvault secret set --name $functionName'defaultkey' --vault-name $vaultname --value $keylistobject.functionKeys.default 
az keyvault secret set --name $functionName'masterkey' --vault-name $vaultname --value $keylistobject.masterKey 
az keyvault secret set --name $functionName'webappstorage' --vault-name $vaultname --value $appsetting

注意:

在上面的 PowerShell 中,我们提取了现有的应用程序设置 AzureWebJobStorage 在密钥库中创建了一个秘密。建议您使用相应的 functionapp appsetting 更改 $appsettings 块,以在 keyvault 中创建一个秘密。

这是供参考的示例输出:

更新答案:

将以下代码添加到上面的 PowerShell 脚本中,这将拉取 functionapp 的服务总线连接字符串应用程序设置,并将连接字符串值作为机密存储在密钥库中。

$servucebusappsetting=az functionapp config appsettings list --name $functionName --resource-group $resourceGroup --query "[?name=='azfapsb_RootManageSharedAccessKey_SERVICEBUS'].Value:value" -o tsv ##app setting of  service connection string will be in the format (<servicebusName>_RootManageSharedAccessKey_SERVICEBUS)

az keyvault secret set --name $functionName'ServiceBusConnectionString' --vault-name $vaultname --value $servucebusappsetting

【讨论】:

感谢 Venkatesh,如果可能,通过获取服务总线连接字符串更新上述脚本,然后更新 azure key vault 中的秘密值。 @Pradeep - 请找到上面更新的答案块,它将提取服务总线连接字符串并在密钥库中创建一个秘密 我想从 azure 服务总线命名空间读取主连接字符串。但不是来自功能应用设置。然后将其更新到密钥保管库中。 @Pradeep - 使用以下 cmdlet 提取 SB 连接字符串并将其更新为密钥库作为机密。 ***** $sbContStr=az servicebus namespace authorization-rule keys list --namespace-name --resource-group --name RootManageSharedAccessKey --query primaryConnectionString -o tsv ## 这里 RootManageSharedAccessKey 是默认授权规则在我们提供服务总线时创建) az keyvault secret set --name 'sbcontStr' --vault-name $vaultname --value $sbContStr ****** 参考文档列出service bus connection strings

以上是关于如何使用 PowerShell 脚本使用函数应用默认密钥和服务总线连接字符串更新 Key Vault 机密的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 中的参数运行 PowerShell 脚本

从 C# 应用程序的脚本中调用 PowerShell 函数

如何更改 Azure 函数中的 PowerShell 文化

如何使用c#winforms将参数传递到Powershell脚本?

powershell 远程执行bat脚本,去启动一个应用,如何让应用一直运行,powershell能正常退出?

如何在不同的运行空间中运行函数,PowerShell