如何在 Azure 函数存储帐户连接字符串中使用 ManagedIdentity

Posted

技术标签:

【中文标题】如何在 Azure 函数存储帐户连接字符串中使用 ManagedIdentity【英文标题】:How to use ManagedIdentity in Azure Function storage account connection string 【发布时间】:2021-11-01 20:09:21 【问题描述】:

我有一个Azure Function 正在使用durable functions

local.settings.json

"Values": 
  "AzureWebJobsStorage": "UseDevelopmentStorage=true",
  "DurableFunctionsStorageConnectionString": "UseDevelopmentStorage=true"

host.json

"extensions": 
        "durableTask": 
            "storageProvider": 
                "connectionStringName": "DurableFunctionsStorageConnectionString"
            
        
    

我不想在 Azure 环境中使用带有访问密钥的连接字符串,而是想使用托管标识并为其授予访问权限。是否有支持可使用托管标识的连接字符串版本?

这是 SignalR 连接字符串的类似访问示例:

Endpoint=signalr_service_endpoint;AuthType=aad;Version=1.0;

如果DefaultAzureCredential 可以从Azure.Identity 中使用就更好了,但我“打开”托管身份就足够了。

附:我不是在研究如何在我的代码中连接到存储帐户,而是如何使 Azure Function 基础架构为它需要的帐户执行此操作。

【问题讨论】:

你看到了吗:docs.microsoft.com/en-us/samples/azure-samples/…? 是的,事实上就在写问题之前:) 这里讨论的是如何连接到函数代码内部的存储。他们确实使用普通的连接字符串来存储 Function 基础设施连接到的存储。他们确实在那里使用DefaultAzureCredential。我自己花了一段时间才弄清楚。我会更改问题以使其更清楚 它看起来不支持持久功能:docs.microsoft.com/en-us/azure/azure-functions/…. 是的,它仍处于预览阶段,不支持持久功能。您可以关注这个未解决的问题以获得 durabe 功能github.com/Azure/azure-functions-durable-extension/issues/1793 我已经根据您的 cmets @Thomas 发布了一个答案,您可以发布自己的答案,如果您愿意,我会接受 :) 非常感谢您的帮助 【参考方案1】:

我来自 Azure SignalR 服务团队。

不建议在配置 AAD Auth 时使用ConnectionString

甚至我们也在更新我们的文档以推荐我们的客户在代码中配置 AAD Auth。

我不确定您使用的是什么 Azure 存储功能。对于Blobs,您可以通过以下代码配置BlobClient

var client = new BlobClient(new Uri("<your endpoint>"), new DefaultAzureCredential(), new BlobClientOptions());

BlobClient Class

要了解有关其他派生TokenCredential 类的更多信息,请参阅TokenCredential class

【讨论】:

感谢您的回答。我没有直接使用任何 blob 存储功能,而是将其用作 Azure Function 的一部分。您能否提供更多关于不推荐连接字符串的详细信息,我不太明白?我使用的是我发布的托管身份,它似乎工作正常【参考方案2】:

感谢@Thomas 提供的有用的 cmets,我发现:

    普通存储账户可以通过提供这个变量来实现:

    AzureWebJobsStorage__accountName:该值就是存储帐户的名称。文档here。

    目前还不能使用 Durable 功能。看到这个issue。

【讨论】:

以上是关于如何在 Azure 函数存储帐户连接字符串中使用 ManagedIdentity的主要内容,如果未能解决你的问题,请参考以下文章

Azure 门户中的 Azure 存储帐户连接字符串在哪里?

无法使用 Azure Fluent 获取存储帐户密钥

Python Azure 函数:blobclient.upload_blob 授权失败

是否可以使用托管标识从 C# 控制台代码连接 Azure 文件共享(存储帐户)

如何在 Azure Function 代码中使用访问密钥(由 Azure Vault 管理)连接存储

Azure 存储帐户:Blob 服务 (SAS) 连接检查失败