Доступ к ресурсам Azure и управление ими с C#

#.net #azure #cmdlet

#.net #azure #powershell-командлет

Вопрос:

Я пишу двоичный командлет для добавления записей в коллекцию CosmosDB. Мне нужно, чтобы пользователь вошел в Azure (учетные данные пользователя), и я могу использовать команды PS для получения остальной информации. Я могу сделать это в Powershell, используя Get-AzCosmosDbAccount, учитывая, что у пользователя есть разрешения в Azure для просмотра ресурса.

Чего я не могу найти, так это способа сделать это в коде C #. Я нашел несколько примеров, которые очень близки, но на самом деле не работают. Например, я нашел этот пример в Azure SDK для .NET, но не могу найти ссылку на Azure.ResourceManager.Resources библиотеку.

Я нашел этот пример, но он использует учетные данные для регистрации приложений для проверки подлинности, а не учетные данные пользователя. Мне нужно использовать учетные данные пользователя.

Я хочу выполнить этот сценарий PS на C#:

 Login-AzAccount
Get-AzSubscription -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-cxxxxxxxxxxx | Select-AzSubscription
$cosmosKey = Get-AzCosmosDBAccountKey -ResourceGroupName 'rg-temp' -Name 'doctemp'
$cosmosKey.PrimaryMasterKey
  

К сожалению, это Login-AzAccount то, что я не могу понять.

Комментарии:

1. почему вы хотите преобразовать его в C #? как вы ожидаете подготовить свою базу данных и откуда? Вы создаете конвейер Azure DevOps? Это для предоставления основных записей или использования из веб-приложения / api для добавления новых данных в вашу CosmosDB?

2. Я не совсем уверен, что все эти вопросы имеют отношение к ответу, который я просил. Благодарим вас за проявленный интерес, и вы можете ознакомиться с ответом Алекса АЙТА ниже, если хотите попробовать это.

3. потому что этот вопрос не имеет смысла. Если вы пишете командлет, почему вы хотите преобразовать его в C #? 🙂

4. Почему это на C #, не имеет никакого отношения к ответу на вопрос. Если вы хотите попробовать ответ Алекса, он приведен ниже. Спасибо.

Ответ №1:

Ключ в том, чтобы использовать new DefaultAzureCredential(true) true также будет включена интерактивная проверка подлинности для учетных данных пользователя. Вы также можете ознакомиться с этим документом для получения общей информации об аутентификации.

В следующем примере используются пакеты nuget Azure.Идентификация и Azure.ResourceManager.CosmosDB. Последняя в настоящее время доступна только в качестве предварительной версии. Вы также можете попробовать Microsoft.Azure.Руководство.Вместо этого CosmosDB.

 var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var client = new Azure.ResourceManager.CosmosDB.CosmosDBManagementClient(
       subscriptionId, new DefaultAzureCredential(true));
var keys = client.DatabaseAccounts.ListKeys("resourcegroupName", "accountname");
  

Если вам нужно переключиться на другого клиента, вы можете установить переменную AZURE_TENANT_ID среды.

Комментарии:

1. Вы сделали это! У меня было три ссылки на конкретные версии, которые нужно было разрешить, но это работает! Спасибо!

Ответ №2:

Что вам нужно, так это Microsoft.Azure.Cosmos пакет. С его помощью вы можете подключиться к Cosmos DB с помощью CosmosClient class:

 this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey);
  

Вы можете увидеть более подробное руководство здесь.

Комментарии:

1. Это не то, о чем я спрашивал. У меня нет первичного ключа, поэтому я пока не могу его использовать. Мне нужно получить-AzCosmosDbAccount, чтобы получить ключи для учетной записи. Затем я могу использовать ключи для доступа к коллекции.