从C#访问和管理Azure资源



我正在编写一个二进制cmdlet,将记录添加到CosmosDb集合中。我需要用户登录Azure(用户凭据(,我可以使用PS命令来获取其余信息。我可以在Powershell中使用Get-AzCosmosDbAccount来实现这一点,前提是此人在Azure中具有查看资源的权限。

我在C#代码中找不到这样的方法。我发现了几个非常接近但实际不起作用的例子。例如,我在Azure SDK For.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

关键是使用new DefaultAzureCredential(true)-true还将启用用户凭据的交互式身份验证。您还可以查看此文档以了解有关身份验证的一般信息。

以下示例使用nuget包Azure.Identity和Azure.ResourceManager.CosmsDB。后者目前仅作为预发布版本提供。您也可以尝试Microsoft.Azure.Management.CosmsDB。

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环境变量。

您需要的是一个Microsoft.Azure.Cosmos包。有了它,您可以使用CosmosClient类连接到Cosmos DB:

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

你可以在这里看到更详细的教程。

最新更新