使用PowerShell获取Azure账户中的用户权限分配情况-创新互联

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

我们提供的服务有:成都做网站、成都网站建设、微信公众号开发、网站优化、网站认证、盖州ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的盖州网站制作公司

   

   RBAC概念

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

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

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

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

    安全主体

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

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

  • 用户 - 在 Azure Active Directory 中具有配置文件的人员。 也可以将角色分配到其他租户中的用户。 有关其他组织中的用户的信息,请参阅 Azure Active Directory B2B。

  • 组 - 在 Azure Active Directory 中创建的一组用户。 将某个角色分配到某个组时,该组中的所有用户都拥有该角色。

  • 服务主体 - 应用程序或服务用来访问特定 Azure 资源的安全标识。 可将服务主体视为应用程序的用户标识(用户名和密码或证书)。

  • 托管标识 - Azure Active Directory 中由 Azure 自动托管的标识。 在开发云应用程序时,通常使用托管标识来管理用于向 Azure 服务进行身份验证的凭据。

    角色

    

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

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

  • 所有者 - 拥有对所有资源的完全访问权限,包括将访问权限委派给其他用户的权限。

  • 参与者 - 可以创建和管理所有类型的 Azure 资源,但无法将访问权限授予其他用户。

  • 读取者 - 可以查看现有的 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账户中的用户权限分配情况

  

    

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:使用PowerShell获取Azure账户中的用户权限分配情况-创新互联
文章位置:http://myzitong.com/article/disegj.html