我试图在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 spredential重置”的权限。我已经查看了该连接,但没有看到可以使用的权限。有什么建议吗?
答案 0 :(得分:1)
创建Azure资源管理器服务连接以使用AzureCLI
时,系统将自动为您创建一个AD App,选中此link。
如果将此服务连接与AzureCLI
一起使用,它将在租户中使用AD App的服务主体的凭据。有关服务主体和AD App的概念,请参阅此link。
要解决此问题,请在门户中导航至Azure Active Directory
-> App registrations
-> All applications
->查找与服务连接相对应的应用程序,其名称应类似于{ {1}}。然后单击它->添加类似于屏幕截图的权限(注意:您的用户帐户需要管理员角色才能单击 organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1
按钮,例如{{1} })。
授予权限后,请稍等片刻,服务连接的服务主体将能够创建AD App,Azure CLI任务应该可以正常工作。
Grant admin consent
权限将允许服务主体创建,读取,更新和删除所有应用程序和服务主体。如果要避免安全问题,还可以使用Powershell将服务连接的服务主体作为Global admin
添加到要重置凭据的服务主体。然后只需在上面的屏幕快照中添加Application.ReadWrite.All
权限。
导航到门户网站中的Owner
应用->单击Application.ReadWrite.OwnedBy
,如下所示。
然后在屏幕截图中复制organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1
。
然后使用下面的Powershell(至少您需要成为目标应用的Managed application in local directory
才能运行命令)。
Object ID
此外:起初,我认为Owner
就足够了,但是根据我的测试,它不起作用,看起来Add-AzureADApplicationOwner -ObjectId <ObjectId of the app which corresponding to the service principal> -RefObjectId <ObjectId of the service connection corresponding service principal>
不允许在与AD App对应的服务主体。