可以通过 Azure 基于角色的访问控制 (Azure RBAC) 管理对 Azure 资源的访问权限。 在本教程中,请授予用户访问权限,以便通过 Azure PowerShell 查看订阅中的所有内容并管理资源组中的一切。
在本教程中,你将了解如何执行以下操作:
- 在不同范围授予用户访问权限
- 列出访问权限
- 删除访问权限
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
先决条件
若要完成本教程,需要:
- 在 Microsoft Entra ID 中创建用户的权限(或具有现有用户)
- Microsoft Graph PowerShell SDK
角色分配
在 Azure RBAC 中,若要授予访问权限,请创建角色分配。 角色分配包含三个要素:安全主体、角色订阅和范围。 下面是两个将要在本教程中执行的角色分配:
| 安全主体 | 角色定义 | 作用域 | 
|---|---|---|
| 用户 (RBAC 教程用户) | 读者 | 订阅 | 
| 用户 (RBAC 教程用户) | 参与者 | 资源组 (rbac-tutorial-resource-group) | 
               
              
            
创建用户
若要分配角色,需要一个用户、组或服务主体。 如果还没有用户,可以创建一个。
- 在 Azure powershell 中创建一个符合密码复杂性要求的密码。 - $PasswordProfile = @{ Password = "<Password>" }
- 使用 New-MgUser 命令为域创建新用户。 - New-MgUser -DisplayName "RBAC Tutorial User" -PasswordProfile $PasswordProfile ` -UserPrincipalName "rbacuser@example.com" -AccountEnabled:$true -MailNickName "rbacuser"- DisplayName Id Mail UserPrincipalName ----------- -- ---- ----------------- RBAC Tutorial User aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb rbacuser@example.com
创建资源组
请使用资源组来演示如何在资源组范围分配角色。
- 使用 Get-AzLocation 命令获取区域位置的列表。 - Get-AzLocation | select Location
- 选择附近的一个位置,将其分配给某个变量。 - $location = "chinanorth"
- 使用 New-AzResourceGroup 命令创建新的资源组。 - New-AzResourceGroup -Name "rbac-tutorial-resource-group" -Location $location- ResourceGroupName : rbac-tutorial-resource-group Location : chinanorth ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rbac-tutorial-resource-group
授予访问权限
若要为用户授予访问权限,请使用 New-AzRoleAssignment 命令分配一个角色。 必须指定安全主体、角色定义和范围。
- 使用 Get-AzSubscription 命令获取订阅的 ID。 - Get-AzSubscription- Name : 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 -SignInName rbacuser@example.com ` -RoleDefinitionName "Reader" ` -Scope $subScope- RoleAssignmentId : /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 User SignInName : rbacuser@example.com RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : User CanDelegate : False
- 将参与者角色分配给资源组范围内的用户。 - New-AzRoleAssignment -SignInName rbacuser@example.com ` -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 User SignInName : rbacuser@example.com RoleDefinitionName : Contributor RoleDefinitionId : b24988ac-6180-42a0-ab88-20f7382dd24c ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : User CanDelegate : False
列出访问权限
- 若要验证订阅的访问权限,请使用 Get-AzRoleAssignment 命令列出角色分配。 - Get-AzRoleAssignment -SignInName rbacuser@example.com -Scope $subScope- 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 User SignInName : rbacuser@example.com RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : User CanDelegate : False- 在输出中,可以看到“读者”角色已分配给订阅范围的“RBAC 教程用户”。 
- 若要验证资源组的访问权限,请使用 Get-AzRoleAssignment 命令列出角色分配。 - Get-AzRoleAssignment -SignInName rbacuser@example.com -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 User SignInName : rbacuser@example.com RoleDefinitionName : Contributor RoleDefinitionId : b24988ac-6180-42a0-ab88-20f7382dd24c ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : User 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 User SignInName : rbacuser@example.com RoleDefinitionName : Reader RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7 ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb ObjectType : User CanDelegate : False- 在输出中,可以看到“参与者”角色和“读者”角色已分配给“RBAC 教程用户”。 “参与者”角色处于 rbac-tutorial-resource-group 范围,“读者”角色在订阅范围继承。 
(可选)使用 Azure 门户列出访问权限
- 若要查看角色分配在 Azure 门户中的显示情况,请查看“访问控制(IAM)”边栏选项卡,以了解相关订阅。   
- 查看“访问控制(IAM)”边栏选项卡,了解相关资源组。   
删除访问权限
若要删除用户、组和应用程序的访问权限,请使用 Remove-AzRoleAssignment 删除角色分配。
- 使用以下命令,删除用户在资源组范围的“参与者”角色分配。 - Remove-AzRoleAssignment -SignInName rbacuser@example.com ` -RoleDefinitionName "Contributor" ` -ResourceGroupName "rbac-tutorial-resource-group"
- 使用以下命令,删除用户在订阅范围的“读者”角色分配。 - Remove-AzRoleAssignment -SignInName rbacuser@example.com ` -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-MgUser 命令删除用户。 - $User = Get-MgUser -Filter "DisplayName eq 'RBAC Tutorial User'" Remove-MgUser -UserId $User.Id