我正在使用App Registrations部署资源,并且证书即将到期。我正在尝试编写脚本以添加新证书以延长该服务主体的寿命,但是无论我以谁身份登录(我自己,同事,服务主体本身),我都会遇到以下错误:
New-AzADSpCredential : Insufficient privileges to complete the operation. At X:\XXX\XXXX\XXXXX\Add-NewDmfCertificate.ps1:496 char:63
+ ... cipalName | New-AzADSpCredential -CertValue $credValue -StartDate $ce ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-AzADSpCredential], Exception
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ActiveDirectory.NewAzureADSpCredentialCommand
编辑:
一些评论使我对我的问题进行了阐述,因为我不确定自己是否清楚。
英语是我的第一语言,我确实了解该消息的基本含义。我不明白该如何解决这个问题。我是服务负责人的所有者。我的同事是老板。服务负责人应该能够自行管理(我认为)。我已经在我创建的服务主体上对此进行了测试,并且可以正常工作。所以我想知道:我这样做正确吗?如果没有,如何将证书凭据添加到SP?如果我做得正确,该在哪里设置权限以允许SP(最好是SP)或AD用户进行此更改?
EDIT2:
我是一个糟糕的用户。感谢您指出我忽略了一个代码示例。不确定它有多大帮助,但无论我怎么想,我都知道可以包含它。
param (
[string] $ServicePrincipalName
)
$cert = New-SelfSignedCertificateEx (you'll forgive me for leaving this part out :) )
$rawCert = $cert.RawData
$credValue = [System.Convert]::ToBase64String($rawCert)
Get-AzADServicePrincipal -DisplayName $ServicePrincipalName | New-AzADSpCredential -CertValue $credValue -StartDate $cert.NotBefore -EndDate $cert.NotAfter
答案 0 :(得分:2)
如果您的用户帐户是服务主体( Owner
)的Enterprise application
,则命令New-AzADSpCredential
将起作用。
我与服务主体为Owner
的普通用户进行了测试,效果很好。
我不了解如何解决该问题。我是服务负责人的所有者。我的同事是老板。
在您的情况下,我想您可能会误解AD App(App registration)
和service principal(Enterprise application)
的概念,它们是不同的,详细信息here。您可能是AD App的Owner
而不是服务主体(只是一个猜测:-),如果是这样,您将无法以普通用户身份运行命令New-AzADSpCredential
。>
还请注意,当成功使用New-AzADSpCredential
创建证书凭证(密钥凭证)时,您将不会在App registration -> your AD App -> Certificates & secrets
页面中找到它,因为服务主体的证书凭证不是AD。应用。您可以通过Get-AzADServicePrincipalCredential
来获取它。
如果您发现自己是AD App(应用程序注册)的Owner
,则实际上您可以使用New-AzADAppCredential
,选中Example 2或此AzureAD
模块命令{ {3}}。
示例:
Connect-AzureAD
$cer = New-SelfSignedCertificate -Subject "CN=TodoListDaemonWithCert" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature
$bin = $cer.GetRawCertData()
$base64Value = [System.Convert]::ToBase64String($bin)
$bin = $cer.GetCertHash()
$base64Thumbprint = [System.Convert]::ToBase64String($bin)
$keyid = [System.Guid]::NewGuid().ToString()
New-AzureADApplicationKeyCredential -ObjectId "<object-id of the AD App>" -CustomKeyIdentifier $base64Thumbprint -Type AsymmetricX509Cert -Usage Verify -Value $base64Value -StartDate $cer.NotBefore -EndDate $cer.NotAfter
New-AzureADApplicationKeyCredential
然后您可以在“应用程序注册”页面上找到它,如下所示。
服务负责人应该能够自行管理(我认为)。
是的,有可能。但是您需要将 / Application Administrator
目录角色赋予服务主体,类似的问题Global Administrator
。