.net - 从 C# 访问和管理 Azure 资源
问题描述
我正在编写一个二进制 cmdlet 来将记录添加到 CosmosDb 集合。我需要用户登录到 Azure(用户凭据),我可以使用 PS 命令来获取其余信息。我可以通过使用Get-AzCosmosDbAccount在 Powershell 中执行此操作,因为此人在 Azure 中具有查看资源的权限。
我找不到的是在 C# 代码中执行此操作的方法。我发现了几个非常接近但实际上无法正常工作的示例。例如,我在 Azure SDK for .NET 中找到了这个示例,但我找不到对该Azure.ResourceManager.Resources
库的引用。
我找到了这个示例,但它使用应用程序注册凭据而不是用户凭据进行身份验证。我需要使用用户凭据。
我想用 C# 做这个 PS 脚本:
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.CosmosDB。后者目前仅作为预发布版本提供。您也可以改用Microsoft.Azure.Management.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
环境变量。
推荐阅读
- android - 使用 Android Studio 时发生错误“类型参数绑定为 C in”
- javascript - 通过手动输入的 ID 在 JSON 数组中查找
- amazon-web-services - PUT/POST/DELETE:403 错误禁止 + AWS SAM 的 CORS 错误
- php - 获取特定用户的主题标签帖子
- c# - 使用 Sharp7 将布尔值写入 PLC
- python - CSV 中 defaultdict / 元组的 Python 列表
- java - 即使同步块获得重复值
- antlr4 - 为基于 Antlr4 的自定义语言创建 Uber Jar
- kubernetes - 如何在 kubernetes 集群中再次添加耗尽的节点?
- drupal - 如何在区域模板中渲染或打印节点预处理