Создание Azure CloudStorageAccount из TokenCredential с использованием токена, полученного через Azure MSI - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь создать 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 Ответ

0 голосов
/ 15 января 2020

Если эта проблема возникает в вашей среде разработчика с использованием ваших собственных учетных данных, у которых нет роли «Участник хранилища больших двоичных данных» используемой учетной записи хранения, просьба добавить эту роль в свою учетную запись 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();
        }
    }
}

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

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

enter image description here

...