ARM模板获取Function App指定函数密钥的报错及实现咨询
问题1:优先使用host密钥的原因
- 兼容性更高:host密钥的拉取API适配所有密钥存储类型(无论是默认的Blob存储还是Files存储),不会出现你遇到的存储类型不支持的报错,部署成功率更高。
- 运维成本更低:单个host密钥可以访问同一个Function App下的所有函数,不需要为每个函数单独获取、分发、维护密钥,新增函数时也不需要调整密钥配置。
- 适配多数场景安全需求:只有当你需要为不同函数配置独立的访问权限、做细粒度权限隔离的时候,才需要用到单函数专属密钥,普通业务场景下host密钥的安全等级完全够用。
问题2:获取指定函数专属密钥的实现方案
方案1:修改密钥存储类型适配ARM直接拉取
你遇到的报错是因为当前Function App默认把密钥存在Blob存储中,单函数密钥的listSecretsAPI不支持该存储类型,按如下步骤调整即可:
- 在ARM模板中Function App的
siteConfig.appSettings配置段新增如下配置:
{ "name": "AzureWebJobsSecretStorageType", "value": "Files" }
- 等Function App部署完成、配置生效后,使用你测试的第二种写法即可正常获取密钥:
"outputs": { "function_key": { "type": "string", "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions', parameters('functionAppName'), variables('theFunction_Name')),'2020-06-01').default]" } }
方案2:不修改存储类型,通过部署后脚本拉取
如果不想更改默认的Blob存储密钥配置,可以在ARM部署完成后,通过Azure CLI或PowerShell命令拉取对应函数的专属密钥:
- Azure CLI 示例:
az functionapp function keys list -g <资源组名> -n <Function App名> --function-name <函数名> --query default - PowerShell 示例:
Get-AzFunctionAppKey -ResourceGroupName <资源组名> -Name <Function App名> -FunctionName <函数名> -KeyName default
内容的提问来源于stack exchange,提问作者ibda
相关产品推荐
相关产品推荐

