#.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, чтобы получить ключи для учетной записи. Затем я могу использовать ключи для доступа к коллекции.