如何通过PowerShell脚本将函数应用默认密钥和服务总线连接串更新到Key Vault Secrets
前置要求
- 已安装对应工具:Azure CLI 2.37.0及以上版本,或者 Azure Az PowerShell 模块 6.0及以上版本
- 运行脚本的身份已完成Azure账号登录,且具备以下权限:
- Function App的密钥读取权限
- Service Bus的授权规则密钥读取权限
- Key Vault的Secret写入权限(对应Key Vault Secrets Officer角色,或者访问策略中配置Secret的Set权限)
实现方案
方法1:使用Azure CLI脚本
首先完成Azure账号登录:az login
如果是自动化非交互场景,可使用服务主体身份登录。
然后执行以下脚本:
# 自定义配置变量 resourceGroup="替换为你的资源组名称" functionAppName="替换为你的Function App名称" serviceBusNamespace="替换为你的Service Bus命名空间名称" serviceBusAuthRule="替换为你的Service Bus授权规则名称,默认通常为RootManageSharedAccessKey" keyVaultName="替换为你的Key Vault名称" # 定义Key Vault中存储对应值的Secret名称 funcKeySecretName="FunctionAppDefaultKey" sbConnStrSecretName="ServiceBusConnectionString" # 1. 获取Function App默认主机密钥 functionDefaultKey=$(az functionapp keys list --name $functionAppName --resource-group $resourceGroup --query "functionKeys.default" -o tsv) # 2. 获取Service Bus命名空间连接字符串 serviceBusConnStr=$(az servicebus namespace authorization-rule keys list --resource-group $resourceGroup --namespace-name $serviceBusNamespace --name $serviceBusAuthRule --query "primaryConnectionString" -o tsv) # 3. 将两个值写入Key Vault对应Secret az keyvault secret set --vault-name $keyVaultName --name $funcKeySecretName --value $functionDefaultKey az keyvault secret set --vault-name $keyVaultName --name $sbConnStrSecretName --value $serviceBusConnStr
说明:如果需要获取Service Bus队列/主题的专属连接字符串,只需将第二步的命令替换为对应队列/主题的授权规则密钥查询命令即可。
方法2:使用Azure PowerShell脚本
首先完成Azure账号登录:Connect-AzAccount
然后执行以下脚本:
# 自定义配置变量 $resourceGroup = "替换为你的资源组名称" $functionAppName = "替换为你的Function App名称" $serviceBusNamespace = "替换为你的Service Bus命名空间名称" $serviceBusAuthRule = "替换为你的Service Bus授权规则名称,默认通常为RootManageSharedAccessKey" $keyVaultName = "替换为你的Key Vault名称" $funcKeySecretName = "FunctionAppDefaultKey" $sbConnStrSecretName = "ServiceBusConnectionString" # 1. 获取Function App默认主机密钥 $functionKeys = Get-AzFunctionAppKey -ResourceGroupName $resourceGroup -Name $functionAppName $functionDefaultKey = $functionKeys.FunctionKeys['default'] # 2. 获取Service Bus命名空间连接字符串 $sbAuthKeys = Get-AzServiceBusNamespaceKey -ResourceGroupName $resourceGroup -Namespace $serviceBusNamespace -AuthorizationRuleName $serviceBusAuthRule $serviceBusConnStr = $sbAuthKeys.PrimaryConnectionString # 3. 将两个值写入Key Vault对应Secret Set-AzKeyVaultSecret -VaultName $keyVaultName -Name $funcKeySecretName -SecretValue (ConvertTo-SecureString $functionDefaultKey -AsPlainText -Force) Set-AzKeyVaultSecret -VaultName $keyVaultName -Name $sbConnStrSecretName -SecretValue (ConvertTo-SecureString $serviceBusConnStr -AsPlainText -Force)
说明:如果在Azure资源内部运行脚本(比如Function、VM),可开启资源的系统分配托管身份,无需手动输入账号密码登录,只需给托管身份分配对应权限即可实现自动化运行。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

