使用PowerShell 获取 Azure账户中的用户权限分配情况

发布时间:2020-07-10 02:56:28 作者:mxy00000
来源:网络 阅读:3557

    今天再来分享一篇关于PowerShell的文章,这次分享的脚本主要是用来获取Azure中用户权限分配的情况,原始的需求是因为公司Azure账户因为权限分配混乱,导致了一些不该发生的事情,所以需要重新整理所有的用户权限分配情况,重新进行梳理和规整,这种情况下,了解当前的权限分配情况就非常重要了。一般情况下,Azure可以根据RBAC的方式进行权限分配,这个是很方便的,简单介绍下RBAC的概念吧

    

     RBAC概念

     使用 RBAC,可以在团队中实现职责分离,仅向用户授予执行作业所需的访问权限。 无需向每个人授予 Azure 订阅或资源的无限制权限,可以仅允许在特定的范围执行某些操作。

规划访问控制策略时,最佳做法是授予用户完成工作所需的最低权限。 下图显示了与 RBAC 使用有关的建议模式。




    使用PowerShell 获取 Azure账户中的用户权限分配情况



    使用 RBAC 控制资源访问权限的方式是创建角色分配。 这是一个需要理解的重要概念 — 它涉及到如何强制实施权限。 角色分配包含三个要素:安全主体、角色订阅和范围。



    安全主体

    安全主体是一个对象,表示请求访问 Azure 资源的用户、组、服务主体或托管标识。


    使用PowerShell 获取 Azure账户中的用户权限分配情况





    角色

    

    

    使用PowerShell 获取 Azure账户中的用户权限分配情况




    

Azure 包含多个可用的内置角色。 下面列出了四个基本的内置角色。 前三个角色适用于所有资源类型。



    范围


    范围是访问权限适用于的资源集。 分配角色时,可以通过定义范围来进一步限制允许的操作。 如果你想要将某人分配为网站参与者,但只针对一个资源组执行此分配,则使用范围就很有帮助。

在 Azure 中,可在多个级别指定范围:管理组、订阅、资源组或资源。 范围采用父子关系结构。

使用PowerShell 获取 Azure账户中的用户权限分配情况



在父范围授予访问权限时,这些权限会继承到子范围。 例如:

  角色分配是出于授予访问权限的目的,将角色定义附加到特定范围内的用户、组、服务主体或托管标识的过程。 通过创建角色分配来授予访问权限,通过删除角色分配来撤销访问权限。 

  下图显示了角色分配的示例。 在此示例中,为“营销”组分配了医药销售资源组的参与者角色。 这意味着,“营销”组中的用户可以在医药销售资源组中创建或管理任何 Azure 资源。 “营销”用户无权访问医药销售资源组外部的资源,除非他们属于另一个角色分配。

使用PowerShell 获取 Azure账户中的用户权限分配情况


 基本上RBAC的概念已经简单介绍过了,我们也是通过RBAC的方式进行权限分配的,如果想了解权限分配的情况,可以运行以下的脚本

      

function Write-DateTimeMessage {
    param (
        [parameter(Mandatory = $false)]
        [switch]$Warning,
        [parameter(Mandatory = $true)]
        [string]$Message,
        [parameter(Mandatory = $false)]
        [string]$ForegroundColor
        
    )
    
    
    if ($Warning) {
        Write-Warning ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message)
    }
    else {
        if ($ForegroundColor) {
            Write-Host ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message) -ForegroundColor $ForegroundColor
        }
        else {
            Write-Host ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message)
        }
    }
    
}


[pscustomobject[]]$UserObjects = $null
    
Get-AzureRmADUser | % {
    $User = $_
    Write-DateTimeMessage -Message "Checking User $($User.UserPrincipalName)"
    


    $RoleAssignments = Get-AzureRmRoleAssignment -SignInName $User.UserPrincipalName
        
    if ($null -ne $RoleAssignments) {
            
        $RoleAssignments | % {
            $RoleAssignment = $_
             
            $UserObject = New-Object -TypeName psobject
            $UserObject | Add-Member -MemberType NoteProperty -Name DisplayName -Value $RoleAssignment.DisplayName
            $UserObject | Add-Member -MemberType NoteProperty -Name SignInName -Value $RoleAssignment.SignInName
            $UserObject | Add-Member -MemberType NoteProperty -Name Scope -Value $RoleAssignment.Scope
            $UserObject | Add-Member -MemberType NoteProperty -Name RoleDefinitionName -Value $RoleAssignment.RoleDefinitionName
            $UserObject | Add-Member -MemberType NoteProperty -Name ObjectType -Value $RoleAssignment.ObjectType
            $UserObject | Add-Member -MemberType NoteProperty -Name CanDelegate -Value $RoleAssignment.CanDelegate
            $UserObject | Add-Member -MemberType NoteProperty -Name RoleDefinitionId -Value $RoleAssignment.RoleDefinitionId
            $UserObject | Add-Member -MemberType NoteProperty -Name ObjectId -Value $RoleAssignment.ObjectId
            $UserObjects += $UserObject
            
                
        }
    }else{

        Write-DateTimeMessage "No role assignment for user $($User.DisplayName)" -Warning

    }
        
        
}
    


$OutputPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ("AzureUserPermission-" + $(Get-Date -Format "yyyyMMdd-HHmmss") + ".csv")

if ($null -ne $UserObjects) {
    
    $UserObjects | Export-Csv -NoTypeInformation -LiteralPath $OutputPath
    Write-DateTimeMessage -Message "Please check $OutputPath" -Warning
}
else {
    Write-DateTimeMessage  "Maybe no user in the environment or didn't get information, please check" -warning
}

脚本没有任何的参数,直接运行即可,运行的效果大概如下

使用PowerShell 获取 Azure账户中的用户权限分配情况

运行完成后,会在你的桌面生成一个csv文件,里边会记录这些信息

使用PowerShell 获取 Azure账户中的用户权限分配情况


  


    



推荐阅读:
  1. 使用SendGrid发送电子邮件
  2. 如何使用PowerShell命令批量初始化OneDrive for Business

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

azure script 云平台

上一篇:Active Directory用户和计算机

下一篇:NVisionXR_iOS教程二 —— 创建控制器和Vuforia对象

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》