Я пытаюсь создать 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();
}
}
}
Проверьте мою учетную запись хранения, там есть файл журнала:
Его содержание: