如何使用New-AzADSpCredential添加证书凭据

时间:2019-12-12 13:47:37

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

我正在使用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

1 个答案:

答案 0 :(得分:2)

如果您的用户帐户是服务主体( Owner )的Enterprise application,则命令New-AzADSpCredential将起作用。

我与服务主体为Owner的普通用户进行了测试,效果很好。

enter image description here

enter image description here


  

我不了解如何解决该问题。我是服务负责人的所有者。我的同事是老板。

在您的情况下,我想您可能会误解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

然后您可以在“应用程序注册”页面上找到它,如下所示。

enter image description here

  

服务负责人应该能够自行管理(我认为)。

是的,有可能。但是您需要将enter image description here / Application Administrator目录角色赋予服务主体,类似的问题Global Administrator