Azure:如何限制Contributor通过Azure Bastion访问VM并保留资源?
如何限制Azure Contributor角色通过Azure Bastion访问VM(保留Bastion资源)
针对你的需求,完全可以实现限制Contributor通过Azure Bastion访问VM且保留Bastion资源的目标,Deployment Stack的deny-settings-mode确实只有预设的三种模式,无法直接实现只读限制,你可以通过以下几种更灵活的方案解决:
方案1:针对Azure Bastion资源创建自定义拒绝分配
直接通过Azure RBAC的拒绝分配功能,精准拒绝Contributor角色对Bastion的核心操作权限:
- 拒绝
Microsoft.Network/bastionHosts/connect/action:阻止Contributor发起VM连接请求 - 可选拒绝
Microsoft.Network/bastionHosts/write:防止Contributor修改Bastion配置 - 操作方式:在目标Bastion资源的「访问控制(IAM)」中添加拒绝分配,选择Contributor角色,指定上述要拒绝的权限,作用范围限定为该Bastion资源。紧急情况时,可临时删除该拒绝分配,恢复访问权限。
方案2:通过NSG限制Bastion的网络访问
给Azure Bastion关联的子网配置网络安全组(NSG),只允许特定紧急运维IP段访问Bastion的管理端口(如443):
- 这样即使Contributor拥有Bastion的操作权限,也无法从非授权IP发起连接
- 紧急场景下,只需修改NSG规则放行对应IP即可恢复使用
方案3:用ARM/Bicep模板定义自定义拒绝分配
绕过Deployment Stack的预设模式,直接编写模板创建拒绝分配,精准控制权限:
- 在模板中明确指定要拒绝的权限(如
Microsoft.Network/bastionHosts/connect/action、Microsoft.Network/bastionHosts/write),保留读取权限 - 示例Bicep片段:
resource denyAssignment 'Microsoft.Authorization/denyAssignments@2022-04-01' = { name: guid(resourceGroup().id, 'deny-bastion-access') properties: { denyAssignmentName: 'DenyContributorBastionAccess' permissions: [ { actions: [ 'Microsoft.Network/bastionHosts/connect/action' 'Microsoft.Network/bastionHosts/write' ] notActions: [] } ] principals: [ { id: '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' // Contributor角色ID type: 'RoleDefinition' } ] scope: resourceGroup().id doNotApplyToChildScopes: true } }
以上方案都无需删除Azure Bastion资源,既能满足日常限制Contributor访问的需求,又能在紧急场景下快速恢复使用。
内容的提问来源于stack exchange,提问作者xaoc2nd
相关产品推荐
相关产品推荐

