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