通过Azure Key Vault上的组访问策略似乎不起作用。
如果我创建一个新的密钥库
New-AzureRmKeyVault -VaultName $vaultName
并检查键(当前没有任何键)
Get-AzureKeyVaultKey -VaultName $vaultName
有效。
如果我添加对当前用户是
成员的组的访问权限$group = (Get-AzureRmADGroup -SearchString 'All Developers')[0].Id
Set-AzureRmKeyVaultAccessPolicy -VaultName $vaultName -ResourceGroupName $resourceGroupName -ObjectId $group -PermissionsToKeys all -PermissionsToSecrets all
并删除直接访问
Remove-AzureRmKeyVaultAccessPolicy -VaultName $vaultName -ResourceGroupName $resourceGroupName -UserPrincipalName $upn
列表操作现在失败
Get-AzureRmKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroupName
Get-AzureKeyVaultKey : Operation "list" is not allowed
我如何获得团体许可?
答案 0 :(得分:2)
我今天发现它适用于权限组对象中的用户。不适用于这些组中的服务主体。
换句话说,如果我使用客户端ID和客户端密钥进行身份验证,则关联的服务主体必须在密钥保管库上直接设置访问策略。如果我允许安全组,则该组中的用户实际上可以访问密钥保管库。我想这与JWT如何在用户中包含安全组而不是服务主体有关...
答案 1 :(得分:1)
向组添加访问策略的原因是它不受支持。如果您查看Set-AzureRmKeyVaultAccessPolicy
的帮助,就会有ObjectId
-ObjectId <Guid>
Specifies the object ID of the user or service principal in Azure Active Directory for which to grant permissions.
Required? true
Position? named
Default value none
Accept pipeline input? true(ByPropertyName)
Accept wildcard characters? false
如您所见,ObjectId仅支持服务主体或用户。
这反映在Set-AzureRmKeyVaultAccessPolicy
的{{3}}的参数中,并在发布到
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{vault-name}?api-version={api-version}
有效负载包含objectId
参数,该参数定义为
指定Vault的Azure Active Directory租户中的用户或服务主体的对象ID。必须将ID指定为GUID。
我认为将来会在某个时候添加此功能,但目前还不可能。
答案 2 :(得分:0)
当应用在添加到 Azure Active Directory 组之前向 Key Vault 发出请求时,也可能发生此 Access Denied
/ 403 Forbidden
错误。
也许这与缓存应用服务实例上的服务主体信息有关?我找不到这方面的文档。
解决方案:重启应用服务。