Tom*_*lla 2 azure azure-active-directory azure-devops
我正在使用应用程序注册来部署资源,但证书即将过期。我正在尝试编写一个脚本来添加新证书以延长此服务主体的寿命,但无论我以谁身份登录(我自己、同事、服务主体本身),我都会收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
编辑:
一些评论促使我阐述我的问题,因为我不确定我是否清楚。
英语是我的母语,我确实理解该信息的基本含义。我不明白的是如何解决这个问题。我是服务主体的所有者。我的同事是一位业主。服务主体应该能够自我管理(我认为)。我已经在我创建的服务主体上对此进行了测试,并且它有效。所以我不得不想:我这样做正确吗?如果没有,如何将证书凭据添加到 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
Run Code Online (Sandbox Code Playgroud)
如果您的用户帐户是Owner
服务主体 ( Enterprise application
) 的用户帐户,则该命令New-AzADSpCredential
将起作用。
Owner
我与作为服务主体的普通用户进行了测试,它工作正常。
我不明白的是如何解决这个问题。我是服务主体的所有者。我的同事是一位业主。
AD App(App registration)
就您而言,我想您可能会误解和的概念service principal(Enterprise application)
,它们是不同的,详细信息请参见此处。您可能是Owner
AD 应用程序的成员而不是服务主体(只是猜测:-)),如果是这样,您将无法以New-AzADSpCredential
普通用户身份运行该命令。
另请注意,当使用New-AzADSpCredential
成功创建证书凭证(密钥凭证)时,您将不会在页面中找到它App registration -> your AD App -> Certificates & secrets
,因为服务主体的证书凭证不是AD应用程序的。你可以通过 得到它Get-AzADServicePrincipalCredential
。
如果你发现你是Owner
AD App(App注册)的,其实你可以使用New-AzADAppCredential
,查看示例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
Run Code Online (Sandbox Code Playgroud)
然后您可以在应用程序注册页面找到它,如下所示。
服务主体应该能够自我管理(我认为)。
对的,这是可能的。但是您需要将Application Administrator
/ Global Administrator
directory 角色授予您的服务主体,这里有类似的问题。
归档时间: |
|
查看次数: |
1840 次 |
最近记录: |