为什么我的服务主体无权访问我的密钥保管库?

Why does my service principal not have access to my key vault?

我们有一个现有的密钥保管库,比如 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
}

第一个 运行 它导致用户被添加,随后 运行s 打印 "Member existed"

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