Azure的DnsManagementClient如何与MSI一起使用? (AzureServiceTokenProvider)

时间:2018-10-21 22:49:28

标签: c# azure azure-management-api azure-msi

我正在尝试更新天蓝色的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)”的客户端“(我的电子邮件地址)”无权执行操作“ Microsoft.Network/dnsZones/TXT/read”范围'/ subscriptions /(我的订阅ID)/ resourceGroups /(我的资源组)/providers/Microsoft.Network/dnsZones/(我的域)/ TXT / _acme-challenge'。”

知道为什么吗?

我已使自己的贡献者可以访问TXT记录。作为订阅所有者,我什至完成了整个工作。但是我仍然得到一个例外,告诉我我没有被授权。

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

帮助:)

编辑:经过一段时间的“等待时间”,呼叫突然开始成功。因此要进行测试...我制作了一个新资源,尝试访问它(失败),授予自己访问权限,尝试再次访问它(然后再次失败),然后等待一会儿,稍后再尝试,然后成功。知道为什么会这样吗?

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

摆弄角色分配之前,最多延迟30分钟。

1 个答案:

答案 0 :(得分:0)

对不起,对不起,但是您没有权限做您正在做的事情:)一种检查自己是谁的方法是:

Get-AzAdUser -ObjectId <id_from_error>

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