azure - 为什么我的服务主体无权访问我的密钥保管库?
问题描述
我们有一个现有的密钥库,比如 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
}
第一次运行会导致添加用户,后续运行会打印“成员存在”
解决方案
看来 azure AD 的传播时间可能是极端的。一天后,它开始只使用分配给访问策略的 AD 组。所以我想答案是极度的耐心。
推荐阅读
- lambda - lisp 错误:“应该是 lambda 表达式”
- ios - 使用电容器在iOS应用构建中滚动时如何防止内容显示在安全区域上方?
- android - 如何在布局android中匹配高度和宽度1:1
- python - 多个进程是否可以同时仅从 Python 中的文件读取(而不是写入)?
- javascript - 使用JS将对象数组转换为包含具有相同值的对象的数组数组?
- java - 从 HTML 中查找 JSON 字符串
- excel - 将字典键与工作表单元格值匹配
- sql - COUNT DISTINCT WITH CONDITION 和 GROUP BY
- json - spring boot返回转义的json
- database - 如何在现有 MongoDB 文档中插入对象数组/列表?