如何使用自动化帐户 PowerShell 运行手册重置 Azure 服务主体的凭据?

How to reset credentials of an Azure service principal using an automation account PowerShell runbook?

我正在尝试通过以下 PowerShell 命令重置服务主体(我们称之为 SP1)的密码凭据:

Remove-AzADSpCredential -ObjectId  <SP1_objectId> -Force
$Password = New-AzADSpCredential -ObjectId <SP1_objectId> 

当我使用我自己的用户帐户通过 PowerShell 运行 它时,这很有效,该帐户具有分配给 SP1 的所有者角色。

我在自动化帐户的 运行 书中也有此代码,该帐户具有“运行 作为帐户”服务主体(我们称之为 SP2)。

我也通过命令Add-AzureADServicePrincipalOwner将SP1的所有权分配给了SP2,并通过Get-AzureADServicePrincipalOwner确认了。

我希望 运行 这本书能够在将其服务主体设为 SP1 的所有者后 运行 在 SP1 上执行 Remove-AzADSpCredential 命令。但是我收到以下错误:

Remove-AzADSpCredential : Insufficient privileges to complete the operation. At line:43 char:9 + Remove-AzADSpCredential -ObjectId $key.Name -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Remove-AzADSpCredential], Exception + FullyQualifiedErrorId : Microsoft.Azure.Commands.ActiveDirectory.RemoveAzureADSpCredentialCommand

New-AzADSpCredential 命令也出现同样的错误。

我想也许 SP1 的所有权应该分配给 运行 作为帐户的应用程序,而不是其服务主体。
所以我也 运行 以下内容:

Add-AzureADServicePrincipalOwner -ObjectId <SP1_ObjectId> -RefObjectId <runasaccount_app_ObjectId>

但这是不可能的,因为我得到了错误:

Code: Request_BadRequest Message: The reference target 'Application_xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx' of type 'Application' is invalid for the 'owners' reference.

所以我认为所有权应该只分配给 SP2,而不是应用程序。

我查看了 ,但接受的答案是

If your user accounts are the Owner of the service principal(Enterprise application), the command New-AzADSpCredential will work.

这对我来说是正确的,但是,当 运行阅读 运行这本书时,它不起作用。

我也查看了 ,看来我需要做 OP 描述的容易做到的 #1。

任何有关如何执行此操作的意见将不胜感激。

如果您想使用一个服务主体 add/remove 另一个服务主体的凭据,这与使用用户帐户执行此操作不同。

I assigned the ownership of SP1 to SP2 as well through the command Add-AzureADServicePrincipalOwner and confirmed it through Get-AzureADServicePrincipalOwner.

这种方式是正确的,但不仅是Owner,还需要在Azure Active Directory Graph中给予Application.ReadWrite.OwnedBy申请权限(之后不是Microsoft Graph)API。

在门户中导航到您的自动化帐户对应的 AD 应用程序的 API permissions -> 添加如下权限,不要忘记最后单击 Grant admin consent for xxx 按钮。

然后在runbook中测试一下,没问题。

New-AzADSpCredential -ObjectId xxxxxxxxxxxxx

OwnerApplication.ReadWrite.OwnedBy的组合是本例中的最小权限,也有其他的方式,你也可以给Application Administrator目录角色,如你所见Application.ReadWrite.All Azure Active Directory Graph 中的应用程序权限 ,两者都可以。