【问题标题】:Azure storage account rejects the issuer of a managed service identityAzure 存储帐户拒绝托管服务标识的颁发者
【发布时间】:2018-12-10 23:12:50
【问题描述】:

我是 using the Microsoft.Azure.Services.AppAuthentication library (v1.0.3) for .NET,使用托管服务标识从 Azure Function 应用连接到 Blob 存储。授权码:

var tokenProvider = new AzureServiceTokenProvider();
string accessToken = await tokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
var tokenCredential = new TokenCredential(accessToken);
var credentials = new StorageCredentials(tokenCredential);
var storageUri = new Uri($"https://{accountName}.blob.core.windows.net");
var client = new CloudBlobClient(storageUri, credentials);

无论给定 RBAC 角色如何,一个现有存储帐户都拒绝接受 MSI:

Microsoft.WindowsAzure.Storage.StorageException: Server failed to authenticate the request.
Make sure the value of Authorization header is formed correctly including the signature.
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteAsyncInternal[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
   at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExistsAsync(BlobContainerPublicAccessType accessType, BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)

storageException.RequestInformation.ExtendedErrorInformation.AdditionalDetails 的其他异常详细信息抱怨AuthenticationErrorDetail: Issuer validation failed. Issuer did not match.

解码失败的 jwt 令牌时,颁发者似乎没问题:

{
  "aud": "https://storage.azure.com/",
  "iss": "https://sts.windows.net/<my directory guid>/",
  ...
}

当我创建新的相同设置的存储帐户时,相同的功能应用程序 MSI 和身份验证代码工作,甚至令牌中的颁发者也完全相同。所以客户端功能应用程序和它的 MSI 身份不是这里的罪魁祸首。

为什么这个存储帐户无法授权以及如何让它接受 MSI?

更新: Cross posted to MS forum 在验证这是否是天蓝色错误时引起 MS 的注意。

【问题讨论】:

  • 你有 blob 存储容器的访问策略吗?
  • 如果颁发者包含连接存储帐户订阅的 AAD 的 ID,那么这听起来像是存储端的错误。记住这是一个预览;)
  • @JoyWang,不,测试容器没有设置访问策略。
  • @juunas 有一个很好的问题:您确定存储帐户位于与 MSI 所在的同一 Azure AD 租户关联的 Azure 订阅中吗?
  • @PhilippeSignoret 是的,它们位于同一个 Azure 目录中。并且存储帐户门户 GUI 可以毫无问题地检测到用于 RBAC 角色分配的 MSI 帐户。

标签: azure azure-active-directory azure-functions azure-blob-storage azure-managed-identity


【解决方案1】:

我使用您的身份验证代码进行测试,并且现有和新创建的存储帐户都接受 MSI。所以我同意 juunas 所说的,这可能是 Azure 存储上的一个错误。

您可以到here 提供反馈,让开发人员修复它。

【讨论】:

  • 我同意这可能是一个错误。尽管提供的链接用于功能请求和投票,而不是错误报告。您是否碰巧知道更好的错误报告渠道(此订阅没有付费支持计划)?
  • 好吧,您可以在Github 中打开一个问题。
  • @ImrePühvel,现在有什么流程吗?
  • Azure 存储服务器端似乎在 github 上没有 repo。
【解决方案2】:

即使在与 MS 核实后,仍不清楚是什么原因,但将受影响的订阅移动到另一个 Azure AD 目录似乎已经解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2021-04-07
    • 1970-01-01
    • 2018-10-26
    • 2021-11-08
    相关资源
    最近更新 更多