【问题标题】:AzureDevops Connection Permission for Cycling Service Principal Secret自行车服务主体机密的 Azure Devops 连接权限
【发布时间】:2020-01-09 22:39:43
【问题描述】:

我正在尝试在 AzureDevops 中创建一个版本来检查 SP 机密的到期情况,然后在必要时对其进行更新。我有做检查的部分:

 param (
    [string]$SpId  
)
$SpSecret 
$SpEndDate = az ad sp credential list --id $SpId --query "[].{Key:endDate}" -o tsv

((Get-Date $SpEndDate).AddDays(-30) -lt (Get-Date)) {
    #Set a new secret value if it is about to expire
    $SpSecret = az ad sp credential reset --name $SpId --query password -o tsv   
}

Write-Host "##vso[task.setvariable variable=var01;Secret=true]$SpSecret"

Write-Host $env:Secret

现在的问题是服务连接没有运行“z ad sp credential reset”的权限。我查看了连接,但没有看到有效的权限。有什么建议吗?

【问题讨论】:

  • 运行管道的服务主体的权限是什么?您可以从您的 azure activie 目录中进行检查。它需要此 api 权限:`Application.ReadWrite.All` 或至少 Application.ReadWrite.OwnedBy 如果服务主体已由其他服务主体创建
  • OwnedBy 可能会更好 + 将 SP 添加为所有者
  • az ad sp credential list 是否在您的脚本中工作?你得到了什么确切的错误?
  • 我不在办公室,明天会查看您的回复。看起来像我需要的,如果需要,我将标记为答案。谢谢!

标签: azure azure-devops azure-active-directory devops


【解决方案1】:

当你创建Azure资源管理器服务连接使用AzureCLI时,系统会自动为你创建一个AD App,勾选这个link。 如果您将此服务连接与 AzureCLI 一起使用,它将使用您租户中 AD 应用程序的服务主体的凭据。有关服务主体和 AD App 的概念,请参阅此link

要解决此问题,请导航到门户中的Azure Active Directory -> App registrations -> All applications -> 找到与服务连接对应的应用程序,其名称应为organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1。然后点击它->像截图一样添加权限(注意:您的用户帐户需要管理员角色才能点击Grant admin consent按钮,例如Global admin)。

授予权限后,稍等片刻,服务连接的服务主体就能创建 AD App,Azure CLI 任务应该可以正常工作了。


Application.ReadWrite.All 权限将允许服务主体创建、读取、更新和删除所有应用程序和服务主体。如果要避免安全问题,还可以使用 powershell 将服务连接的服务主体作为Owner 添加到要重置凭据的服务主体中。然后只需要在上面的截图中添加Application.ReadWrite.OwnedBy权限即可。

导航到门户中的organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1 应用程序-> 点击Managed application in local directory,如下所示。

然后复制截图中的Object ID

然后使用下面的powershell(至少你需要是目标App的Owner才能运行命令)。

Add-AzureADApplicationOwner -ObjectId <ObjectId of the app which corresponding to the service principal> -RefObjectId <ObjectId of the service connection corresponding service principal>

另外:一开始我觉得Add-AzureADServicePrincipalOwner够用了,但是根据我的测试,它不起作用,看起来可能是Application.ReadWrite.OwnedBy不允许对对应的服务主体进行操作AD 应用程序。

【讨论】:

  • 一旦我有管理员运行权限,顶部部分将起作用。由于安全隐患,他们可能会犹豫不决。当我尝试运行您建议的 powershell 时,我收到此错误:消息:资源 不存在或其查询的引用属性对象之一不存在。我尝试改用 CLI 命令az ad app owner add --id --owner-object-id,得到了相同的结果。有什么想法吗?
  • @AaronL。在Add-AzureADApplicationOwner中,确保-ObjectId是服务主体对应的AD App(应用注册)的objectId,而不是服务主体本身的objectId,-RefObjectId是服务连接服务主体的objectId ,而不是它的广告应用程序。它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
相关资源
最近更新 更多