我正在尝试在 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)'的客户端'(我的电子邮件地址)'没有执行操作 '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 分钟的延迟。