我可以通过使用存储账户的访问密钥的连接字符串运行功能应用程序,并将其放入功能应用程序设置中。
但是,如果我从存储账户的共享访问签名菜单中生成SAS和连接字符串,并在我的函数应用设置中使用该连接字符串,我就不能让函数运行。
函数Json
{
"generatedBy": "Microsoft.NET.Sdk.Functions-3.0.1",
"configurationSource": "attributes",
"bindings": [
{
"type": "blobTrigger",
"connection": "StorageAccountName",
"path": "containerName/{name}",
"name": "myBlob"
}
],
"disabled": false,
"scriptFile": "../bin/FunctionDemoBlobTrigger.dll",
"entryPoint": "BlobTriggerFunctionName.BlobTrigger.Run"
}
点击函数URL会出现'函数主机未运行'的错误。
在测试模式下运行功能应用会出现'Status.500 Internal Server Error'错误。内部服务器错误500 "错误。
我不认为它是支持使用SAS连接字符串的。AzureWebJobsStorage
.
从文件中。此处 和 此处中的存储账户密钥,始终使用 AzureWebJobsStorage
.
如果你试图在门户中创建一个新的blob触发器,你会发现只有符合格式的应用程序设置为 DefaultEndpointsProtocol=https;AccountName=[name];AccountKey=[key]
会被找到,其他任何值都会显示不可用。对于现有的,如果你改变了应用程序的设置,你会得到500错误。
所以,如果你的情况下,你不想使用accout键,因为安全问题,有一个很好的变通方法是使用的 Azure钥匙库.
将账户密钥作为秘密存储在keyvault中,启用功能应用的系统分配身份(目前不支持用户分配身份,功能应用可以同时拥有两个身份),将其添加到keyvault的访问策略中,然后指定应用的设置,例如 @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
.
配置完成后,它将会像下面一样。
更多细节,请看参考资料 - 对 App 服务和 Azure 功能使用 Key Vault 引用
如果你在配置文件中的连接字符串中指定了一个SAS,你可能需要通过Html Encode对URL中的特殊字符进行编码。
<add name="AzureWebJobsStorage" connectionString="BlobEndpoint=https://xxx.blob.core.windows.net/;QueueEndpoint=https://brucechen01.queue.core.windows.net/;SharedAccessSignature=sv=2020-06-10&ss=bq&srt=sco&sp=rwdlacup&se=2020-06-30T18:39:25Z&st=2020-06-25T10:39:25Z&spr=https&sig={signature}" />