Azure RBAC #

什么是 Azure RBAC? #

Azure 基于角色的访问控制 (RBAC) 是 Azure 资源的权限管理系统。

text
┌─────────────────────────────────────────────────────────────┐
│                    RBAC 概览                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  核心概念                                                    │
│  ├── 安全主体:用户、组、服务主体                           │
│  ├── 角色定义:权限集合                                     │
│  ├── 范围:订阅、资源组、资源                               │
│  └── 角色分配:主体 + 角色 + 范围                           │
│                                                             │
│  权限模型                                                    │
│  ├── 允许权限:允许执行操作                                 │
│  ├── 拒绝权限:阻止执行操作                                 │
│  └── 继承:子范围继承父范围权限                             │
│                                                             │
│  优势                                                        │
│  ├── 细粒度访问控制                                         │
│  ├── 最小权限原则                                           │
│  ├── 集中权限管理                                           │
│  └── 审计追踪                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

角色分配结构 #

角色分配组成 #

text
┌─────────────────────────────────────────────────────────────┐
│                    角色分配                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  安全主体                                                    │
│  ├── 用户                                                   │
│  ├── 组                                                     │
│  ├── 服务主体                                               │
│  └── 托管身份                                               │
│                                                             │
│  角色定义                                                    │
│  ├── 内置角色                                               │
│  └── 自定义角色                                             │
│                                                             │
│  范围                                                        │
│  ├── 管理组                                                 │
│  ├── 订阅                                                   │
│  ├── 资源组                                                 │
│  └── 资源                                                   │
│                                                             │
│  示例:                                                      │
│  用户 John + 虚拟机参与者 + 资源组 Production               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

内置角色 #

常用内置角色 #

text
┌─────────────────────────────────────────────────────────────┐
│                    常用内置角色                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  通用角色                                                    │
│  ├── 所有者: 完全访问,可授权                               │
│  ├── 参与者: 完全访问,不可授权                             │
│  ├── 读者: 只读访问                                         │
│  └── 用户访问管理员: 管理用户访问                           │
│                                                             │
│  计算角色                                                    │
│  ├── 虚拟机参与者: 管理 VM                                  │
│  ├── 虚拟机管理员登录: 登录 VM                              │
│  └── 虚拟机用户登录: 用户登录 VM                            │
│                                                             │
│  网络角色                                                    │
│  ├── 网络参与者: 管理网络资源                               │
│  └── DNS 区域参与者: 管理 DNS                               │
│                                                             │
│  存储角色                                                    │
│  ├── 存储账户参与者: 管理存储账户                           │
│  ├── 存储 Blob 数据所有者: 完全访问 Blob                    │
│  └── 存储 Blob 数据读取者: 读取 Blob                        │
│                                                             │
│  安全角色                                                    │
│  ├── 安全管理员: 管理安全组件                               │
│  ├── 安全读取者: 查看安全信息                               │
│  └── Key Vault 参与者: 管理 Key Vault                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

查看角色定义 #

bash
# 列出所有内置角色
az role definition list --output table

# 查看特定角色详情
az role definition show --name "Virtual Machine Contributor"

# 查看角色权限
az role definition list --name "Reader" --query "[].permissions"

角色分配 #

分配角色 #

bash
# 为用户分配角色
az role assignment create \
  --assignee <user-object-id> \
  --role "Virtual Machine Contributor" \
  --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup

# 为组分配角色
az role assignment create \
  --assignee <group-object-id> \
  --role "Reader" \
  --scope /subscriptions/<subscription-id>

# 为服务主体分配角色
az role assignment create \
  --assignee <service-principal-id> \
  --role "Contributor" \
  --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup

查看角色分配 #

bash
# 列出订阅级别的角色分配
az role assignment list --output table

# 列出资源组的角色分配
az role assignment list \
  --resource-group myResourceGroup \
  --output table

# 查看用户的角色分配
az role assignment list --assignee <user-object-id> --output table

# 查看特定角色的分配
az role assignment list --role "Owner" --output table

删除角色分配 #

bash
# 删除角色分配
az role assignment delete \
  --assignee <user-object-id> \
  --role "Reader" \
  --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup

# 按 ID 删除
az role assignment delete --ids <assignment-id>

自定义角色 #

创建自定义角色 #

bash
# 创建自定义角色定义文件
cat <<EOF > custom-role.json
{
  "Name": "Virtual Machine Operator",
  "Description": "Can start and stop virtual machines",
  "Actions": [
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/powerOff/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Compute/virtualMachines/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/<subscription-id>"
  ]
}
EOF

# 创建自定义角色
az role definition create --role-definition custom-role.json

更新和删除自定义角色 #

bash
# 更新自定义角色
az role definition update --role-definition custom-role.json

# 删除自定义角色
az role definition delete --name "Virtual Machine Operator"

范围和继承 #

范围层次 #

text
┌─────────────────────────────────────────────────────────────┐
│                    范围层次                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  管理组                                                      │
│  └── 权限继承到所有订阅                                     │
│      │                                                       │
│      ├── 订阅                                                │
│      │   └── 权限继承到所有资源组                           │
│      │       │                                               │
│      │       ├── 资源组                                      │
│      │       │   └── 权限继承到所有资源                     │
│      │       │       │                                       │
│      │       │       └── 资源                                │
│      │       │           └── 最细粒度                       │
│      │       │                                               │
│      │       └── ...                                         │
│      │                                                       │
│      └── ...                                                 │
│                                                             │
│  继承规则:                                                  │
│  ├── 子范围继承父范围权限                                   │
│  ├── 拒绝权限优先于允许权限                                 │
│  └── 多个分配权限叠加                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

拒绝分配 #

拒绝分配概念 #

text
┌─────────────────────────────────────────────────────────────┐
│                    拒绝分配                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点                                                        │
│  ├── 优先于角色分配                                         │
│  ├── 阻止特定权限                                           │
│  └── 用于保护关键资源                                       │
│                                                             │
│  示例:                                                      │
│  ├── 用户有"所有者"角色                                     │
│  ├── 但拒绝分配阻止删除资源                                 │
│  └── 结果:用户无法删除该资源                               │
│                                                             │
│  注意事项                                                    │
│  ├── 谨慎使用                                               │
│  ├── 难以调试                                               │
│  └── 主要用于蓝图和保护资源                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

权限检查 #

检查用户权限 #

bash
# 检查用户对资源的权限
az role assignment list \
  --assignee <user-object-id> \
  --include-inherited \
  --output table

# 使用"检查访问"功能
# Azure 门户 → 资源 → 访问控制(IAM) → 检查访问

最佳实践 #

权限设计原则 #

text
┌─────────────────────────────────────────────────────────────┐
│                    RBAC 最佳实践                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 最小权限原则                                             │
│     └── 只授予必要的权限                                    │
│                                                             │
│  2. 使用组管理权限                                           │
│     └── 而非直接分配给用户                                  │
│                                                             │
│  3. 使用内置角色                                             │
│     └── 优先使用内置角色                                    │
│                                                             │
│  4. 避免过多所有者                                           │
│     └── 限制所有者角色数量                                  │
│                                                             │
│  5. 定期审查权限                                             │
│     └── 使用访问评审                                        │
│                                                             │
│  6. 使用 PIM                                                 │
│     └── 管理特权角色                                        │
│                                                             │
│  7. 使用管理组                                               │
│     └── 集中管理订阅权限                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

下一步 #

现在你已经掌握了 RBAC 的使用,接下来学习 Key Vault 了解密钥管理服务!

最后更新:2026-03-29