如何找到与服务主体关联的资源组?

How can I find resource group associated with service principal?

问题

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

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

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

示例解决方案

对于订阅,这很容易。我可以在管道内调用的 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>,但这正是我要获取的名称。)

再次明确,我在运行内部一个特定的资源组和订阅,它是那些与服务连接相关联的资源组和订阅。现在我只希望该信息可用于管道。

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

获取角色分配

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

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

使用 Azure DevOps API

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

如果您发现直接使用 API 有点困难,您可以尝试使用 PSDevOps PowerShell module to interact with the Azure DevOps API. It has the Get-ADOServiceEndpoint 命令获取可用的服务端点。