Как использовать AzureDefaultCredentials с Azure Fluent?

Я пытаюсь создать функцию Azure на C#, которая регенерирует ключи хранилища. Я изо всех сил пытаюсь найти правильную библиотеку .NET, где я могу аутентифицировать и повторно генерировать ключи.

Самый простой способ аутентификации, который я нашел, — это использовать DefaultAzureCredentials и передать их BlobClient. Но я не могу найти возможность перегенерировать ключи нигде на BlobClient.

Я нашел единственный способ повторно сгенерировать ключи в учетной записи хранения — использовать Microsoft.Azure.Management.Fluent, но Fluent API не поддерживает DefaultAzureCredentials. Вместо этого я думаю, что мне нужно использовать SdkContext.AzureCredentialsFactory, у которого нет автоматического резерва для Managed Identity и VS Code, который есть у DefaultCredentials.

  • Есть ли способ восстановить ключи с помощью BlobClient, чтобы я мог использовать DefaultAzureCredentials?
  • Или есть способ использовать DefaultAzureCredentials с Fluent API?

person Wouter de Kort♦    schedule 25.02.2021    source источник


Ответы (2)


Это еще один вариант, который я только что получил для работы с .NET 5.0. Он использует DefaultAzureCredential и преобразует его в экземпляр AzureCredentials. Затем в качестве теста он запрашивает список экземпляров ACR в подписке по умолчанию и печатает их имена. Этот вариант полезен, если вы используете одну или несколько других библиотек, которые уже поддерживают DefaultAzureCredential.

using System;
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Management.ResourceManager.Fluent;

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
            var defaultCredential = new DefaultAzureCredential();
            var defaultToken = defaultCredential.GetToken(new TokenRequestContext(new[] { "https://management.azure.com/.default" })).Token;
            var defaultTokenCredentials = new Microsoft.Rest.TokenCredentials(defaultToken);
            var azureCredentials = new Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials(defaultTokenCredentials, defaultTokenCredentials, null, AzureEnvironment.AzureGlobalCloud);
            var azure = Microsoft.Azure.Management.Fluent.Azure.Configure().Authenticate(azureCredentials).WithDefaultSubscription();
            var acrList = azure.ContainerRegistries.List();
            foreach (var acr in acrList)
            {
                Console.WriteLine(acr.Name);
            }
        }
    }
}

Источники и вдохновение:

person Michi Werner    schedule 07.06.2021

Прежде всего: да, BlobClient (и весь SDK вокруг него) предназначен только для операций с плоскостью данных учетной записи хранения. Однако смена ключей — это операция плоскости управления. Таким образом, вы правы, вам нужен Management SDK.

Я также искал это некоторое время назад, но не смог найти способ с помощью DefaultAzureCrendtials и Fluent SDK. Я вернулся к использованию AzureServiceTokenProvider, который также отлично работает для меня:

var tenantId = Environment.GetEnvironmentVariable("tenantId");
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var token = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com", tenantId);
var tokenCredentials = new TokenCredentials(token);
log.LogInformation("Got AAD token. Creating Azure client");
var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
    .Authenticate(new AzureCredentials(tokenCredentials, tokenCredentials, tenantId, AzureEnvironment.AzureGlobalCloud))
    .WithDefaultSubscription();

TenantId IIRC на самом деле является необязательным, если вы ориентируетесь на арендатора по умолчанию для пользователей.

person silent    schedule 25.02.2021
comment
К сожалению, в документации по AzureServiceTokenProvider упоминается, что этот класс устарел, и вам следует использовать Azure.Identity. - person Wouter de Kort♦; 01.03.2021