【问题标题】:Azure Storage Account authenticate using Managed Identity and C#Azure 存储帐户使用托管标识和 C# 进行身份验证
【发布时间】:2021-11-30 20:44:47
【问题描述】:

我正在尝试使用用户分配的托管标识对 Azure 存储帐户进行身份验证,但出现以下错误:

无法使用用户分配的托管标识对 Azure 存储进行身份验证 ...

之前,在 Azure 门户中,我提供了对存储帐户中托管标识的参与者访问权限。所有其他参数(AccountURL、容器名称和托管标识)都是正确的。我在await blobClient.UploadAsync 中收到错误

请在下面找到代码,

public class BlobStorageManager
{
    private BlobContainerClient blobContainerClient = null;

    public BlobStorageManager()
    {
        var accountURL = ConfigurationManager.AppSettings["AccountURL"].ToString();
        var containerName = ConfigurationManager.AppSettings["ContainerName"].ToString();
        var managedIdentity = ConfigurationManager.AppSettings["ManagedIdentity"].ToString();       

        var blobServiceClient = new BlobServiceClient(new Uri(accountURL), new ManagedIdentityCredential(managedIdentity));

        blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
    }

    public async Task<string> UploadFileToBlobAsync(string fileName, Stream fileData, string contentType)
    {
        try
        {
            BlobClient blobClient = blobContainerClient.GetBlobClient(fileName);

            var blobHttpHeaders = new BlobHttpHeaders()
            {
                ContentType = contentType
            };

            var blobUploadOptions = new BlobUploadOptions()
            {
                HttpHeaders = blobHttpHeaders
            };

            await blobClient.UploadAsync(fileData, blobUploadOptions).ConfigureAwait(false);

            return blobClient.Uri.AbsoluteUri;
        }
        catch (Exception ex)
        {
            throw (ex);
        }
    }

我正在使用 Azure.Identity 1.4.0 和 Azure.Storage.Blobs 12.10.0

我是否缺少任何步骤?请指教。

【问题讨论】:

    标签: c# asp.net-mvc azure azure-blob-storage azure-managed-identity


    【解决方案1】:

    贡献者角色不授予数据平面访问权限。 它仅授予管理存储帐户资源本身的访问权限。

    您需要将存储 Blob 数据参与者角色授予托管标识。 这将为其提供数据访问权限。

    【讨论】:

    • 感谢您的回复。我尝试提供以下 3 个访问权限 a) Contributor b) Storage Account Contributor c) Storage Blob Data Contributor 但是,仍然面临同样的问题。
    • 这很奇怪。我在这里制作了一个使用新 blob 库的示例:github.com/juunas11/Joonasw.ManagedIdentityDemos。它将 Blob 数据参与者角色分配给存储容器级别的托管标识,并允许上传和下载 Blob。
    • @junnas,你是对的。我错过了在我的 Azure VM 中分配托管标识。完成此步骤后,我就可以连接了。非常感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2019-09-08
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多