Bicep - 从应用程序 ID 获取服务主体 ID

问题描述 投票:0回答:2

我想使用 ADO 管道中所用服务连接的主体 ID 在二头肌中创建一个 roleAssignment。
由于 bicep 中没有 terraform 中的

self
方法,因此我尝试获取所使用的 ARM 服务连接的服务主体 ID。我找到的唯一解决方案是 ADO 管道的以下任务:

- task: AzureCLI@2
  displayName: Retrieve principal ID of service connection
  continueOnError: false
  inputs:
    azureSubscription: $(armServiceConnectionName)
    scriptType: bash
    scriptLocation: inlineScript
    addSpnToEnvironment: true
    inlineScript: echo "##vso[task.setvariable variable=servicePrincipalId]$servicePrincipalId"

这将返回服务连接的服务主体的应用程序 ID。

是否可以从该应用程序ID中获取主体ID?

我在二头肌中尝试了以下方法,如下所示这里

armPrincipalId = split(extensionResourceId(armConnectionPrincipalAppId, 'Microsoft.ManagedIdentity/userAssignedIdentities', armServiceConnectionName), '/')[8]

但这会导致以下错误:

DeploymentOutputEvaluationFailed: The template output 'armPrincipalId' is not valid: Unable to evaluate template language function 'extensionResourceId': the provided parent resource id '***' is not a valid uri

这显然不起作用,因为它需要二头肌资源生成的 uri 形状的 ID。但我只有一个UID。

azure-pipelines azure-resource-manager azure-rm-template azure-bicep
2个回答
3
投票

我通过扩展ADO管道任务的inlineScript找到了解决方案:

- task: AzureCLI@2
  displayName: Retrieve principal ID of service connection
  continueOnError: false
  inputs:
    azureSubscription: $(armServiceConnectionName)
    scriptType: bash
    scriptLocation: inlineScript
    addSpnToEnvironment: true
    inlineScript: echo "##vso[task.setvariable variable=armConnectionPrincipalId]$(az ad sp show --id $servicePrincipalId --query id --out tsv)"

我现在使用 az ad sp show 搜索主体 ID:

az ad sp show --id $servicePrincipalId --query id --out tsv

这仍然是一个很棘手的解决方案。如果有可能在二头肌中使用当前用户主体(无需任何额外的 ADO 任务),请随时在此处发布另一个解决方案。


0
投票

从 Bicep v0.32.4 开始,您现在可以使用

deployer()
函数来获取运行部署的主体的 objectId:

deployer().objectId
© www.soinside.com 2019 - 2024. All rights reserved.