gpt4 book ai didi

Azure ArmClient 未找到我的帐户之一的订阅

转载 作者:行者123 更新时间:2023-12-02 07:42:36 27 4
gpt4 key购买 nike

我正在构建一个应用程序来管理 Azure 中的一些资源。我正在使用 .NET SDK 来完成此任务。在工作流程的一开始,我需要允许用户选择要在其中进行操作的订阅。以下内容适用于我的主要工作帐户:

var authOptions = new DefaultAzureCredentialOptions
{ // Force an interactive login to make the experience as explicit as possible - no surprises!
ExcludeEnvironmentCredential = true,
ExcludeAzureCliCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeManagedIdentityCredential = true,
ExcludeSharedTokenCacheCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeVisualStudioCredential = true,

ExcludeInteractiveBrowserCredential = false
};

var armClient = new ArmClient(new DefaultAzureCredential(authOptions));

var subs = armClient.GetSubscriptions().ToList();

当我运行此命令时,系统会提示我进行基于浏览器的交互式登录(如预期),如果我选择我的工作帐户,则会获得列表中的所有订阅。太棒了!

当我不小心在交互式身份验证屏幕上选择了我的个人 Azure 帐户时,我注意到一个问题。尽管(当时)我的帐户上有一个即用即付订阅(在门户中可见),但通过上述代码我得到的费用为零。

在玩的时候,我将最后一行更改为:

var defSub = armClient.GetDefaultSubscription();

这再次适用于我的工作帐户。然而,对于我的个人帐户,我现在收到一个异常(exception),内容如下:

No subscriptions found for the given credentials

搜索此消息将我带到 a likely looking question ,其中得票最高的答案(遗憾的是没有被接受)似乎表明这可能与我在订阅中的 RBAC 角色有关。一方面,这似乎是可能的,因为我看到两个帐户之间存在差异行为。另一方面,我认为我的个人帐户还不够老,不能在 RBAC 出现之前创建。

尽管如此,我已在我的个人 Azure 帐户上尝试了以下操作:

  1. 摆弄我的角色/权限 - 我现在是服务管理员和订阅所有者。
  2. 在同一帐户中创建了全新的 PAYG 订阅
  3. 已验证我只有一个目录
  4. 多次退出并再次登录

我开始撕扯我的头发了!到底是什么原因造成的?

<小时/>

更新 1DeepDave-MT 链接到 bug report这似乎符合我的经验。为了更深入地挖掘,我运行了链接线程中建议的以下代码:

using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();
var options = new InteractiveBrowserCredentialOptions();
options.Diagnostics.IsAccountIdentifierLoggingEnabled = true;
var armClient = new ArmClient(new InteractiveBrowserCredential(options));

这表明 ARM 客户端使用的租户 ID 与我的订阅的租户 ID 不匹配。后者可以通过运行来确认:

az account list --all

我想现在最大的问题是如何控制正在使用哪个租户......

最佳答案

我找到了解决方法!完全归功于 DeepDave-MT 将我推向正确的方向。我会将其发布在这里,但暂时不接受它,以防出现更好的方法......

这里的中心问题是我的个人用户是我的普通 MS 帐户,它对于租户来说是“外部”的。为了让事情按预期工作,我必须在我的默认 AD 目录中创建一个新用户。

我采取的步骤:

  1. 转到 Azure 门户并导航到 Active Directory 边栏选项卡
  2. 在域内添加新用户
  3. 在隐身窗口中,使用新凭据登录门户并更改密码
  4. 返回主窗口(以原始用户身份登录),导航至感兴趣的订阅
  5. 转至 IAM 页面并
    • 按“添加”按钮将新用户添加为共同管理员
    • 再次按“添加”按钮,为新用户添加“所有者”角色
  6. 再次尝试交互式身份验证,但这次使用新用户

当我查看 AD 用户表时,一切都明白了:

enter image description here

请注意,最上面的行是新创建的行,“身份”列中的值与租户匹配。下面的那个是我的原始用户,用户名中有“EXT”,身份有“MicrosoftAccount”。单击此标识将打开一个包含更多详细信息的 Pane :

enter image description here

这清楚地表明这是联合登录而不是“第一方”用户。

这不是理想的用户体验,但在休假时我现在有一个解决方法。

关于Azure ArmClient 未找到我的帐户之一的订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72698461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com