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

How to update Key Vault Secrets with function app default key and service bus connection string using PowerShell script

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

所以,有人可以帮我解决这个问题吗?

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

脚本将使用这些键值在相应的密钥库中创建机密。

这是 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 在 keyvault 中创建了一个秘密。建议您使用相应的 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