我们在密钥保险库中设置备份管理服务(262044b1-e2ce-469f-a196-69ab7ada62d3)的权限时遇到问题。
我们在自动帐户中运行以下代码,该帐户的服务主体无权访问Windows Azure目录和Microsoft图形。
Set-AzureRmKeyVaultAccessPolicy -VaultName MAHSEN-KEY-00010-DEV -ResourceGroupName MAHSBC-RGP-DEV-ARM-TEMPLATE-008 -AzureRmContext $context -PermissionsToSecrets backup,get,list -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
我们收到错误“没有足够的权限来完成操作”。
当我们运行自动化帐户具有“读取目录数据”权限的Windows Azure Active Directory权限的相同代码时,我们能够成功运行命令,如下面的屏幕截图所示。
如果使用Set-AzureRmKeyVaultAccessPolicy
命令需要Windows Azure Active Directory权限,请确认吗?
答案 0 :(得分:4)
密钥保管库访问策略基于AAD对象ID。在调用Set-AzureRmKeyVaultAccessPolicy并指定ServicePrincipal或ObjectId以外的任何内容时,cmdlet需要通过直接查询AAD将ServicePrincipal转换为AAD对象ID。这是在使用更新的策略调用Key Vault之前完成的。
为了防止需要AAD查询,请提前查找服务主体的对象ID。然后将对象ID传递给'ObjectId'参数。您还应传递“BypassObjectIdValidation”参数,以指示cmdlet不应尝试使用AAD验证ObjectID参数的值,
您可以在以AAD中具有查询权限的用户身份登录时运行以下命令来查找服务主体的对象ID。
Get-AzureRmADServicePrincipal -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
使用Set-AzureRmKeyVaultAccessPolicy命令中返回的'Id:'字段,如下所示:
Set-AzureRmKeyVaultAccessPolicy -VaultName VNAME -ResourceGroupName RGROUP -AzureRmContext $context -PermissionsToSecrets backup,get,list -ObjectID 00000000-0000-0000-0000-000000000000 -BypassObjectIdValidation
00000000-0000-0000-0000-000000000000应替换为服务主体的实际对象ID。