Azure 托管标识 - 函数应用和存储帐户 - 默认Azure凭据失败,但托管标识凭据成功



我想使用用户分配的标识来管理资源之间的访问。我已经为我的存储帐户创建了一个可以访问以下角色的身份:

Storage Blob Data Owner
Storage Account Contributor
Storage Table Data Contributor
Storage Queue Data Contributor

我正在用C#编写此更改。当我使用时

var tableUri = new Uri(string.Format("https://{0}.table.core.windows.net/", storageAccountName));
var credential = new ManagedIdentityCredential(storageAccessClientId);
services.AddScoped(x => new TableServiceClient(tableUri, credential));

一切都很好,我可以毫无问题地访问我的桌子。

问题是我需要在用例中使用DefaultAzureCredential(),以避免传递storageAccessClientId环境变量。根据文档,这应该不会有任何问题,因为它应该经过一系列权限,直到找到合适的权限。事实并非如此。

很明显,我已经正确配置了身份,因为如果我明确告诉Azure要使用什么ID,我就可以访问它,但当它自己尝试时,它失败了,我花了几天时间试图理解原因。

我的一个想法是,对于某种蔚蓝的幕后魔法,它说我需要设置azure_CLIENT_ID、azure_CLIENT_SECRET和azure_TENNT_ID。它是否可能忽略了我的用户分配的托管标识,而只是获取AZURE_CLIENT_ID变量?

我想我找到了答案,如果2022年仍然如此,那么这确实表明Azure的状态很糟糕。这是github问题,Azure开发人员特别指出,他们的IAM系统不够复杂,无法找到用户分配的附加到现有资源的权限,除非您明确地说明您想要什么。来自AWS的这似乎是完全不可接受的,我希望这是";azure保存了很多旧文档,所以请继续寻找最新的真相;。。但从我所尝试的一切来看,它似乎就是这样运作的。

如果有人能以不同的方式向我展示,请告诉我,因为除非绝对必要,否则我不想使用系统管理标识。(另一张即将到来的SO门票…(

Azure不提供动态处理多个分配标识的功能。你需要帮助它,告诉它在每种情况下使用什么身份,你想使用附加在你的服务上的身份(功能应用程序、网络应用程序等(

这对我们的需求来说是不可接受的,因为我们想要动态身份访问,所以我们停止了这条路线,而是选择了连接字符串,遗憾的是

最新更新