0

问题

我有一个天蓝色管道 YAML 文件。它能够通过服务连接运行,该服务连接以所有适当的权限访问服务主体等。

但我现在正在尝试清理代码;我们有多个服务主体在多个订阅和资源组上运行。他们需要创建存储帐户,这些帐户必须是唯一的。

因此,我正在尝试创建一个存储帐户,该帐户部分从创建存储帐户的服务主体的关联订阅和资源组构建。

示例解决方案

对于订阅,这相当容易。我可以在管道内调用的 PowerShell 脚本中执行类似的操作:

$subscriptionId = $(az account show --query 'id' -o tsv)
Write-Output "##vso[task.setvariable variable=AZURE_SUBSCRIPTION_ID;isoutput=true;issecret=true]$subscriptionId"

现在我有了变量$subscription IDAZURE_SUBSCRIPTION_ID设置,并且可以访问管道本身内的订阅信息。

问题

但是我怎样才能对资源组做类似的事情呢?

az account show在不知道资源组名称本身的情况下,没有与资源组等效。(例如,我必须输入az group show -name <RG-name>,但这正是我想要获得的名称。)

同样,需要明确的是,我特定资源组和订阅中运行,它是与服务连接相关联的那些。现在我只希望管道可以使用这些信息。

4

1 回答 1

2

我不确定我是否完全理解您要完成的工作。但我怀疑以下选项可能会有所帮助。

获取角色分配

如果您为每个单独的资源组创建了单独的服务连接,您可以简单地检查 SPN 的角色分配并确定服务连接的范围。

例如,如果您使用 Azure PowerShell 任务,则您已使用服务连接对其进行了配置。因此,当任务启动时,它具有服务主体的上下文。然后,您可以执行Get-AzRoleAssignment应输出其授权的资源组的操作。同样,这仅在您使用每个 RG 的服务连接时才有用,否则您将获得多个 RG 的结果。(或者对于订阅和管理组,如果您还为这些脚本分配了角色)

使用 Azure DevOps API

您可以使用 Azure DevOps API 的Get Service Endpoint请求来获取服务连接。JSON 输出将包含有关服务连接范围的信息。

如果您发现直接使用 API 有点困难,可以尝试使用PSDevOps PowerShell 模块与 Azure DevOps API 进行交互。它具有Get-ADOServiceEndpoint命令,可让您获取可用的服务端点。

于 2021-01-18T14:00:57.630 回答