首页 > 解决方案 > 为什么我的服务主体无权访问我的密钥保管库?

问题描述

我们有一个现有的密钥库,比如 kv1,以及一个现有的广告安全组,比如 adg1。

adg1 已经设置了一个访问策略,为组成员提供获取和列表访问权限。

使用 azure devops 管道和 arm 模板,我们正在部署多个资源,包括一个 vm 规模集,比如 vmss1

最后,我们调用具有广告管理员访问权限的 azure 自动化作业将 vmss1 添加到 adg1

vmss1 无法访问 kv1 中的机密。

如果我们直接将 vmss1 服务主体添加到 adg1,它将获得访问权限,如果我们删除直接添加,它将失去访问权限。

我们的 AD 结构不是很复杂,我们等待了 2-3 个小时的传播,但仍然没有。

这是处理添加的powershell:

$vmssid = (Get-AzureRMADServicePrincipal -DisplayName "$_scaleSetName").Id

if(!$vmssid){
    Write-Error 'Scale set did not exiset or was not a scale set'
    return 1
}

$groupId = (Get-AzureRMAdGroup -AzureRmContext $AzureContext -DisplayName "$webAppGroupName" ).Id 
if(!$groupId){
    Write-Error 'Group not found'
    return 1
}

$shouldAddMember = !(Get-AzureRMAdGroupMember -AzureRmContext $AzureContext -GroupObjectId $groupId | ?{$_.Id-eq $vmssid}) 
if($shouldAddMember ){
 Add-AzureRmAdGroupMember -AzureRmContext $AzureContext -MemberObjectId $vmssId -TargetGroupObjectId $groupId 
}
else{
Write-Output 'Member existed in group'
exit 0
}

第一次运行会导致添加用户,后续运行会打印“成员存在”

标签: azureazure-active-directoryazure-keyvault

解决方案


看来 azure AD 的传播时间可能是极端的。一天后,它开始只使用分配给访问策略的 AD 组。所以我想答案是极度的耐心。


推荐阅读