AzureDevOps - 将订阅移动到不同的 AD 后无法获取访问令牌

AzureDevOps - Failed to fetch access token after moving subscription to different AD

已将 Azure 订阅从活动目录 AD1 移动到活动目录 AD2。现在任务开始失败,因为以前的 ARM 端点(通过自动 SPN)是使用旧的端点详细信息创建的。因此任务无法生成正确的访问令牌。

错误信息

The access token is from the wrong issuer 'https://sts.windows.net/***/'. It must match the tenant 'https://sts.windows.net/<TenantIdNew>/' associated with this subscription.
Please use the authority (URL) 'https://login.windows.net/<TenantIdNew>' to get the token. 
Note, if the subscription is transferred to another tenant there is no impact to the services, but information about new tenant could take time to propagate (up to an hour). If you just transferred your subscription and see this error message, please try back later. (CODE: 401)

其他问题

  1. 如何找到我的 VSTS 支持的租户?我在哪里可以找到它?
  2. 如何找到支持我的订阅的租户?我在哪里可以找到它?
  3. 是否可以在移动到 AD2 后重新使用之前创建的服务端点(使用 AD1)?
  4. 是否可以在移动到 AD2 后更新现有服务端点中的租户 ID(通过 REST API)?
  5. 基于 MSI 的服务端点是否会被破坏或在移动到 AD2 后它们是否可用?

有以下可能的解决方案:

  1. 将 AzureDevOps 帐户支持的活动目录从 AD1 更改为 AD2
  2. 建立信任关系b/w活动目录AD1AD2
  3. 首先,通过 script 创建 SPN,然后使用脚本提供的详细信息创建手动终结点。

其他问题的答案

  1. 如何找到我的 VSTS 支持的租户?我在哪里可以找到它?

    转到 AzureDevOps 帐户 > 组织 > Azure Active Directory

  2. 如何找到支持我的订阅的租户?我在哪里可以找到它?

    转到 Azure 门户 > 订阅 > select 你的订阅 > 概述

  3. 在移动到 AD2 后,是否可以re-use 服务之前创建的端点(使用 AD1)?

    是的。

    首先让我们了解服务端点在内部做什么。

    1. 在 AD 中创建应用程序。
    2. 通过订阅为其分配权限。


    现在让我们回顾一下我们的案例,

    1. 您创建了与 AD1 的服务连接,意味着正在活动目录 AD1 中创建 AD 应用程序 app1 并分配订阅权限 S
    2. 您将订阅 S 移至另一个活动目录 AD2,但 AD 应用程序 app1 仍驻留在先前的活动目录 AD1


    对于 re-use 现有服务端点,您必须更新服务端点中的 SPN IdSPN keytenant Id

    在手动服务连接的情况下,可以通过 UI 轻松更新,但在自动 SPN 流的情况下,您必须通过 REST API.[=33= 更新上述字段]

  4. 是否可以在移动到 AD2 后更新现有服务端点中的租户 ID(通过 REST API)?

    是的。

    获取所有端点

    请求类型 - 获取

    https://<accountName>.visualstudio.com/<ProjectName>/_apis/distributedtask/serviceendpoints?api-version=3.2-preview.1
    

    获取特定端点

    请求类型 - 获取

    https://<accountName>.visualstudio.com/<ProjectID>/_apis/distributedtask/serviceendpoints/<SERVICE_ENDPOINT_ID>?api-version=3.2-preview.1
    

    现在更新 tenant Id 作为响应并将其用作更新端点 REST 中的正文 API。

    更新端点

    请求类型 - PUT

    https://<accountName>.visualstudio.com/<ProjectID>/_apis/distributedtask/serviceendpoints/<SERVICE_ENDPOINT_ID>?api-version=3.2-preview.1
    
  5. 基于 MSI 的服务端点是否会被破坏或在移动到 AD2 后它们是否可用?

    是的,您只需要更新服务连接中的tenant Id