你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 基于角色的访问控制(Azure RBAC) 是管理对 Azure 资源的访问权限的方式。 在本教程中,你将授予组访问权限,以查看订阅中的所有内容,并使用 Azure PowerShell 管理资源组中的所有内容。
本教程中,您将学习如何:
- 在多个范围内为用户组授予访问权限
- 列出访问权限
- 删除访问权限
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
注释
建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
先决条件
若要完成本教程,需要:
- 在 Microsoft Entra ID 中创建组的权限(或者有现成的组)
- Azure Cloud Shell
- Microsoft Graph PowerShell SDK
角色分配
在 Azure RBAC 中,若要授予访问权限,请创建角色分配。 角色分配包含三个要素:安全主体、角色定义和范围。 下面是将在本教程中执行的两个角色分配:
| 安全主体 | 角色定义 | Scope |
|---|---|---|
| 组 (RBAC 教程组) |
Reader | Subscription |
| 组 (RBAC 教程组) |
Contributor | 资源组 (rbac-tutorial-resource-group) |
创建一个组
若要分配角色,需要用户、组或服务主体。 如果还没有组,可以创建一个组。
在 Azure Cloud Shell 中,使用 New-MgGroup 命令创建新组。
New-MgGroup -DisplayName "RBAC Tutorial Group" -MailEnabled:$false ` -SecurityEnabled:$true -MailNickName "NotSet"DisplayName Id MailNickname Description GroupTypes ----------- -- ------------ ----------- ---------- RBAC Tutorial Group aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb NotSet {}
如果没有创建组的权限,可以尝试 本教程:改为使用 Azure PowerShell 授予用户对 Azure 资源的访问权限 。
创建资源组
您可以使用资源组来演示如何在资源组范围内分配角色。
使用 Get-AzLocation 命令获取区域位置的列表。
Get-AzLocation | select Location选择你附近的位置,并将其分配给变量。
$location = "westus"使用 New-AzResourceGroup 命令创建新的资源组。
New-AzResourceGroup -Name "rbac-tutorial-resource-group" -Location $locationResourceGroupName : rbac-tutorial-resource-group Location : westus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group
授予访问权限
若要授予组的访问权限,请使用 New-AzRoleAssignment 命令分配角色。 必须指定安全主体、角色定义和作用域。
使用 Get-MgGroup 命令获取组的对象 ID。
Get-MgGroup -Filter "DisplayName eq 'RBAC Tutorial Group'"DisplayName Id MailNickname Description GroupTypes ----------- -- ------------ ----------- ---------- RBAC Tutorial Group aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb NotSet {}将组对象 ID 保存在变量中。
$groupId = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"使用 Get-AzSubscription 命令获取订阅的 ID。
Get-AzSubscriptionName : Pay-As-You-Go Id : 00000000-0000-0000-0000-000000000000 TenantId : aaaabbbb-0000-cccc-1111-dddd2222eeee State : Enabled将订阅范围保存在变量中。
$subScope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"将读者角色分配给订阅范围内的组。
New-AzRoleAssignment -ObjectId $groupId ` -RoleDefinitionName "Reader" ` -Scope $subScopeRoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e DisplayName : RBAC Tutorial Group SignInName : RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : Group CanDelegate : False将 “参与者” 角色分配给某资源组范围内的组。
New-AzRoleAssignment -ObjectId $groupId ` -RoleDefinitionName "Contributor" ` -ResourceGroupName "rbac-tutorial-resource-group"RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group DisplayName : RBAC Tutorial Group SignInName : RoleDefinitionName : Contributor RoleDefinitionId : b24988ac-6180-42a0-ab88-20f7382dd24c ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : Group CanDelegate : False
列出访问权限
若要验证订阅的访问权限,请使用 Get-AzRoleAssignment 命令列出角色分配。
Get-AzRoleAssignment -ObjectId $groupId -Scope $subScopeRoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e DisplayName : RBAC Tutorial Group SignInName : RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : Group CanDelegate : False在输出中,可以看到“读者”角色已分配给订阅范围的“RBAC 教程组”。
若要验证资源组的访问权限,请使用 Get-AzRoleAssignment 命令列出角色分配。
Get-AzRoleAssignment -ObjectId $groupId -ResourceGroupName "rbac-tutorial-resource-group"RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group DisplayName : RBAC Tutorial Group SignInName : RoleDefinitionName : Contributor RoleDefinitionId : b24988ac-6180-42a0-ab88-20f7382dd24c ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : Group CanDelegate : False RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e DisplayName : RBAC Tutorial Group SignInName : RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : Group CanDelegate : False在输出中,可以看到参与者角色和读者角色都已分配给 RBAC 教程组。 “参与者”角色处于 rbac-tutorial-resource-group 范围,“读者”角色在订阅范围继承。
(可选)使用 Azure 门户列出访问权限
若要查看角色分配在 Azure 门户中的显示情况,请查看“访问控制(IAM)”边栏选项卡,以了解相关订阅。
查看“访问控制(IAM)”边栏选项卡,了解相关资源组。
删除访问权限
若要删除用户、组和应用程序的访问权限,请使用 Remove-AzRoleAssignment 删除角色分配。
使用以下命令,删除组在资源组范围的“参与者”角色分配。
Remove-AzRoleAssignment -ObjectId $groupId ` -RoleDefinitionName "Contributor" ` -ResourceGroupName "rbac-tutorial-resource-group"使用以下命令,删除组在订阅范围的“读者”角色分配。
Remove-AzRoleAssignment -ObjectId $groupId ` -RoleDefinitionName "Reader" ` -Scope $subScope
清理资源
若要清理本教程创建的资源,请删除资源组和组。
使用 Remove-AzResourceGroup 命令删除资源组。
Remove-AzResourceGroup -Name "rbac-tutorial-resource-group"Confirm Are you sure you want to remove resource group 'rbac-tutorial-resource-group' [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):当系统要求确认时,请键入 Y。删除需要几秒钟时间。
使用 Remove-MgGroup 命令删除组。
Remove-MgGroup -GroupID $groupId如果在尝试删除组时收到错误,还可以在门户中删除该组。