在保留现有权限的同时添加密钥保管库访问权限
Adding key vault access permissions while preserving existing ones
我的管道中有一个 Azure PowerShell 任务,我需要在其中将证书导入密钥保管库。在此之前,我需要将 Import
证书权限分配给当前服务主体。但是,此服务主体可能已经拥有来自此管道或其他管道中其他任务的现有证书权限(例如 Get
、List
)。如果我使用 Set-AzKeyVaultAccessPolicy
,它将删除这些其他权限。有没有办法保留这些权限,只添加一些新权限?
$spId = (Get-AzContext).Account.Id;
Set-AzKeyVaultAccessPolicy -VaultName $kv -ServicePrincipalName $spId -PermissionsToCertificates Import
Import-AzKeyVaultCertificate -VaultName $kv …
没有直接添加新权限的方法,您的选择是获取旧权限列表,向其中添加新权限,然后重新设置所有权限。
示例对我有用:
$spId = (Get-AzContext).Account.Id
$objectid = (Get-AzADServicePrincipal -ApplicationId $spId).Id
$kv = Get-AzKeyVault -ResourceGroupName <group-name> -VaultName joykeyvault
$cerpermission = ($kv.AccessPolicies | Where-Object {$_.ObjectId -eq $objectid}).PermissionsToCertificates
$cerpermission += "Import"
Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ObjectId $objectid -BypassObjectIdValidation -PermissionsToCertificates $cerpermission
注意:最后一行的参数很重要,如果你在devops服务连接中使用的服务主体没有权限在你的AAD租户中列出服务主体,请使用 -ObjectId $objectid -BypassObjectIdValidation
而不是 -ServicePrincipalName $spId
,否则会出现错误。
我的管道中有一个 Azure PowerShell 任务,我需要在其中将证书导入密钥保管库。在此之前,我需要将 Import
证书权限分配给当前服务主体。但是,此服务主体可能已经拥有来自此管道或其他管道中其他任务的现有证书权限(例如 Get
、List
)。如果我使用 Set-AzKeyVaultAccessPolicy
,它将删除这些其他权限。有没有办法保留这些权限,只添加一些新权限?
$spId = (Get-AzContext).Account.Id;
Set-AzKeyVaultAccessPolicy -VaultName $kv -ServicePrincipalName $spId -PermissionsToCertificates Import
Import-AzKeyVaultCertificate -VaultName $kv …
没有直接添加新权限的方法,您的选择是获取旧权限列表,向其中添加新权限,然后重新设置所有权限。
示例对我有用:
$spId = (Get-AzContext).Account.Id
$objectid = (Get-AzADServicePrincipal -ApplicationId $spId).Id
$kv = Get-AzKeyVault -ResourceGroupName <group-name> -VaultName joykeyvault
$cerpermission = ($kv.AccessPolicies | Where-Object {$_.ObjectId -eq $objectid}).PermissionsToCertificates
$cerpermission += "Import"
Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ObjectId $objectid -BypassObjectIdValidation -PermissionsToCertificates $cerpermission
注意:最后一行的参数很重要,如果你在devops服务连接中使用的服务主体没有权限在你的AAD租户中列出服务主体,请使用 -ObjectId $objectid -BypassObjectIdValidation
而不是 -ServicePrincipalName $spId
,否则会出现错误。