Azure的DnsManagementClient如何与MSI一起工作?(AzureServiceTokenProvider)



我正在尝试更新 Azure 中的 TXT 记录。 我在本地VS2017调试环境中执行此操作,但MSI似乎无论如何都可以"工作",因为它知道我是谁。 但是"GetAsync"调用失败,告诉我我没有权限。

我做错了什么?

var tokenprovider = new AzureServiceTokenProvider();
var tok = await tokenprovider.GetAccessTokenAsync("https://management.azure.com/");
client = new DnsManagementClient(new TokenCredentials(tok)) 
{ 
SubscriptionId = SubscriptionId 
};
var dnsRecord = await Client.RecordSets.GetAsync(ResourceGroup, zoneName, recordName, RecordType.TXT, cancellationToken);

GetAsync 调用引发:Microsoft.Rest.Azure.CloudException:"对象 ID"(我的对象 ID("的客户端'(我的电子邮件地址('无权对范围"/订阅/(我的订阅 ID(/resourceGroups/(我的资源组(/providers/Microsoft.Network/dnsZones/(my domain(/TXT/_acme-challenge"执行操作Microsoft。

知道为什么吗?

我已经为自己提供了对 TXT 记录的贡献者访问权限。 我什至作为订阅所有者做了整件事。 然而,我仍然得到例外告诉我我没有授权。

我还仔细检查了订阅/对象/域/txt 名称 - 它们是正确的。

帮助:)

编辑:经过一段时间的"等待期",呼叫突然开始成功。 所以要测试...我创建了一个新资源,尝试访问它(并失败(,授予自己访问权限,尝试再次访问它(再次失败(,然后等待一段时间,稍后尝试,它成功了。 知道为什么会这样吗?

编辑:(5个月后(。 找到正确答案,在这里:https://learn.microsoft.com/en-us/azure/role-based-access-control/troubleshooting#rbac-changes-are-not-being-detected

摆弄角色分配时,最多有 30 分钟的延迟才能生效。

好吧,对不起,但是您没有权限执行您正在做的事情:)检查你是谁的一种方法是做这样的事情:

Get-AzAdUser -ObjectId <id_from_error>

并验证您是否正在返回同一用户。 另一件值得检查的事情是权限;)也许您错误地将权利授予了另一个实体

相关内容

  • 没有找到相关文章

最新更新