Создание Azure CloudStorageAccount из TokenCredential с использованием токена, полученного через Azure MSI

Я пытаюсь создать CloudStorageAccount с помощью токена доступа, созданного с помощью MSI в Azure, для использования в приемнике хранилища BLOB-объектов Serilog Azure. Я получаю токен и создаю учетную запись, используя следующие

var tokenProvider = new AzureTokenProvider();
var token = await tokenProvider.GetAccessTokenAsync("https://storage.azure.com");
var tokenCredential = new TokenCredential(token);
var storageCredential = new StorageCredential(tokenCredential);
var account = new CloudStorageAccount(storageCredential, "accountnamehere", "core.windows.net", true);

Затем я передаю эту учетную запись в Serilog `LoggerConfiguration 'как таковую

Log.Logger = new LoggerConfiguration()
    //other stuff
    .WriteTo.AzureBlobStorage(new JsonFormatter(), account, //other settings)
    .CreateLogger()

Тем не менее, это никогда не напишет в блоб. Моя учетная запись Azure напрямую имеет Contributor и наследует Contributor данных BLOB-объектов хранилища из группы. Виртуальная машина Azure, над которой я работаю, также имеет автора данных хранилища BLOB-объектов для этой учетной записи хранения. Однако в dev он использует мои учетные данные.

Когда я использую ключ учетной записи, в которую записывается большой двоичный объект без проблем, поэтому что-то не правильно с тем, как я генерирую CloudStorageAccount или неправильно настроены разрешения в Azure, я просто не уверен, какие именно.

Всего 1 ответ


Если эта проблема возникает в вашей среде разработчика с использованием ваших собственных учетных данных, у которых нет роли «Участник хранилища больших двоичных данных» используемой учетной записи хранения, просьба добавить эту роль в свою учетную запись Azure и повторить попытку. Судя по моему тесту, унаследованная роль здесь не работает.

Я проверил на моей стороне, это мой код:

using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Auth;
using Serilog;
using Serilog.Formatting.Json;
using System;

namespace AzureStorageTest
{
    class Program
    {
        static void Main(string[] args)
        {

            var tokenCredential = new TokenCredential("<access token get from my account 
 whcih has the data contributor role of the stroage account that I am using now>");
            var storageCredential = new StorageCredentials(tokenCredential);

            var account = new CloudStorageAccount(storageCredential, "<my storage account name>", "core.windows.net", true);


            Log.Logger = new LoggerConfiguration().WriteTo.AzureBlobStorage(account).CreateLogger();
            Log.Logger.Error("aaaaa");
            Console.ReadKey();
        }
    }
}

Проверьте мою учетную запись хранения, там есть файл журнала: введите описание изображения здесь

Его содержание:

введите описание изображения здесь


Есть идеи?

10000