如何在 Azure 函数应用程序设置中使用来自存储帐户的 SAS 连接字符串
How to use SAS connection string from storage account in Azure function application setting
我可以运行通过使用来自存储帐户的访问密钥的连接字符串并将其放入功能应用程序设置来运行功能应用程序
但是,如果我从存储帐户中的共享访问签名菜单生成 SAS 和连接字符串,并在我的函数应用程序设置中使用该连接字符串,我无法获取函数 运行ning。
函数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 给出 'Function host is not running' 错误。
运行 功能应用程序在测试模式下出现 'Status: 500 Internal Server Error' 错误。
更新
对连接字符串的 SharedAccessSignature 部分进行编码后,出现错误
如果您在配置文件的连接字符串中指定 SAS,您可能需要通过 Html 编码对 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}" />
我认为 AzureWebJobsStorage
中不支持使用 SAS 连接字符串。
根据文档 here and here,始终使用 AzureWebJobsStorage
中的存储帐户密钥。
并且如果您尝试在门户中创建新的 blob 触发器,您会发现只有符合 DefaultEndpointsProtocol=https;AccountName=[name];AccountKey=[key]
格式的应用程序设置才会被找到,任何其他值都将不可用。对于现有的,如果您更改应用程序设置,您将收到 500 错误。
因此,如果在您的情况下,由于安全问题不想使用帐户密钥,有一个很好的解决方法是使用 Azure keyvault.
将账户密钥作为secret存储在keyvault中,启用函数应用的系统分配标识(目前不支持用户分配的标识,函数应用可以同时拥有两者),添加它到 keyvault 的访问策略,然后指定应用程序设置,如 @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
。
配置完成后如下图
有关详细信息,请参阅参考资料 - Use Key Vault references for App Service and Azure Functions
我可以运行通过使用来自存储帐户的访问密钥的连接字符串并将其放入功能应用程序设置来运行功能应用程序
但是,如果我从存储帐户中的共享访问签名菜单生成 SAS 和连接字符串,并在我的函数应用程序设置中使用该连接字符串,我无法获取函数 运行ning。
函数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 给出 'Function host is not running' 错误。
运行 功能应用程序在测试模式下出现 'Status: 500 Internal Server Error' 错误。
更新
对连接字符串的 SharedAccessSignature 部分进行编码后,出现错误
如果您在配置文件的连接字符串中指定 SAS,您可能需要通过 Html 编码对 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}" />
我认为 AzureWebJobsStorage
中不支持使用 SAS 连接字符串。
根据文档 here and here,始终使用 AzureWebJobsStorage
中的存储帐户密钥。
并且如果您尝试在门户中创建新的 blob 触发器,您会发现只有符合 DefaultEndpointsProtocol=https;AccountName=[name];AccountKey=[key]
格式的应用程序设置才会被找到,任何其他值都将不可用。对于现有的,如果您更改应用程序设置,您将收到 500 错误。
因此,如果在您的情况下,由于安全问题不想使用帐户密钥,有一个很好的解决方法是使用 Azure keyvault.
将账户密钥作为secret存储在keyvault中,启用函数应用的系统分配标识(目前不支持用户分配的标识,函数应用可以同时拥有两者),添加它到 keyvault 的访问策略,然后指定应用程序设置,如 @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
。
配置完成后如下图
有关详细信息,请参阅参考资料 - Use Key Vault references for App Service and Azure Functions