我正在使用应用程序注册来部署资源,但证书即将过期。我正在尝试编写一个脚本来添加新证书以延长此服务主体的生命周期,但无论我以谁身份登录(我自己、同事、服务主体本身),我都会收到以下错误:
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
编辑:
一些评论促使我阐述我的问题,因为我不确定我是否清楚。
英语是我的母语,我确实理解该消息的基本含义。我不明白的是如何解决这个问题。我是服务主体的所有者。我的同事是一位业主。服务主体应该能够 self 管理(我认为)。我已经在我创建的服务主体上对此进行了测试,并且它有效。所以我不得不想:我这样做正确吗?如果没有,如何将证书凭据添加到 SP?如果我做得正确,我在哪里设置权限以允许 SP(最好)或 AD 用户进行此更改?
编辑2:
我是一个糟糕的用户。感谢您指出我忽略了包含代码示例。不确定它有多大帮助,但无论我的想法如何,我都足够了解它。
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
最佳答案
如果您的用户帐户是服务主体(企业应用程序
)的所有者
,则命令 New-AzADSpCredential
会起作用。
我使用作为服务主体的所有者
的普通用户进行测试,它工作正常。
What I don't understand is how to address the issue. I am an owner of the Service Principal. My colleague is an owner.
就您而言,我想您可能误解了AD App(应用程序注册)
和服务主体(企业应用程序)
的概念,它们是不同的,详细信息here 。您可能是 AD 应用程序的所有者
,而不是服务主体(只是猜测:-)),如果是这样,您将无法运行命令 New-AzADSpCredential
> 作为普通用户。
另请注意,当使用New-AzADSpCredential
成功创建证书凭证( key 凭证)时,您将不会在应用程序注册 -> 您的 AD 应用程序 -> 证书和Secrets
页面,因为服务主体的证书凭证不是 AD 应用程序的。您可以通过 Get-AzADServicePrincipalCredential
获取它。
如果你发现你是AD应用程序(应用程序注册)的所有者
,实际上你可以使用 New-AzADAppCredential
,检查 Example 2 ,或这个 AzureAD
模块命令 New-AzureADApplicationKeyCredential
。
示例:
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
然后您可以在应用程序注册页面找到它,如下所示。
The Service Principal should be able to administer itself (I would think).
是的,这是可能的。但是您需要将 Application Administrator
/Global Administrator
目录角色授予您的服务主体,类似问题 here 。
关于azure - 如何使用 New-AzADSpCredential 添加证书凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59306069/