您好,登錄后才能下訂單哦!
今天再來分享一篇關于PowerShell的文章,這次分享的腳本主要是用來獲取Azure中用戶權限分配的情況,原始的需求是因為公司Azure賬戶因為權限分配混亂,導致了一些不該發生的事情,所以需要重新整理所有的用戶權限分配情況,重新進行梳理和規整,這種情況下,了解當前的權限分配情況就非常重要了。一般情況下,Azure可以根據RBAC的方式進行權限分配,這個是很方便的,簡單介紹下RBAC的概念吧
RBAC概念
使用 RBAC,可以在團隊中實現職責分離,僅向用戶授予執行作業所需的訪問權限。 無需向每個人授予 Azure 訂閱或資源的無限制權限,可以僅允許在特定的范圍執行某些操作。
規劃訪問控制策略時,最佳做法是授予用戶完成工作所需的最低權限。 下圖顯示了與 RBAC 使用有關的建議模式。
使用 RBAC 控制資源訪問權限的方式是創建角色分配。 這是一個需要理解的重要概念 — 它涉及到如何強制實施權限。 角色分配包含三個要素:安全主體、角色訂閱和范圍。
安全主體
安全主體是一個對象,表示請求訪問 Azure 資源的用戶、組、服務主體或托管標識。
用戶 - 在 Azure Active Directory 中具有配置文件的人員。 也可以將角色分配到其他租戶中的用戶。 有關其他組織中的用戶的信息,請參閱 Azure Active Directory B2B。
組 - 在 Azure Active Directory 中創建的一組用戶。 將某個角色分配到某個組時,該組中的所有用戶都擁有該角色。
服務主體 - 應用程序或服務用來訪問特定 Azure 資源的安全標識。 可將服務主體視為應用程序的用戶標識(用戶名和密碼或證書)。
托管標識 - Azure Active Directory 中由 Azure 自動托管的標識。 在開發云應用程序時,通常使用托管標識來管理用于向 Azure 服務進行身份驗證的憑據。
角色
Azure 包含多個可用的內置角色。 下面列出了四個基本的內置角色。 前三個角色適用于所有資源類型。
所有者 - 擁有對所有資源的完全訪問權限,包括將訪問權限委派給其他用戶的權限。
參與者 - 可以創建和管理所有類型的 Azure 資源,但無法將訪問權限授予其他用戶。
讀取者 - 可以查看現有的 Azure 資源。
用戶訪問管理員 - 允許你管理用戶對 Azure 資源的訪問。
范圍
范圍是訪問權限適用于的資源集。 分配角色時,可以通過定義范圍來進一步限制允許的操作。 如果你想要將某人分配為網站參與者,但只針對一個資源組執行此分配,則使用范圍就很有幫助。
在 Azure 中,可在多個級別指定范圍:管理組、訂閱、資源組或資源。 范圍采用父子關系結構。
在父范圍授予訪問權限時,這些權限會繼承到子范圍。 例如:
如果將所有者角色分配給管理組范圍的用戶,則該用戶可以在管理組中管理所有訂閱中的一切內容。
如果在訂閱范圍向某個組分配了讀取者角色,則該組的成員可以查看訂閱中的每個資源組和資源。
如果在資源組范圍向某個應用程序分配了參與者角色,則該應用程序可以管理該資源組中所有類型的資源,但不能管理訂閱中的其他資源組資源。
角色分配是出于授予訪問權限的目的,將角色定義附加到特定范圍內的用戶、組、服務主體或托管標識的過程。 通過創建角色分配來授予訪問權限,通過刪除角色分配來撤銷訪問權限。
下圖顯示了角色分配的示例。 在此示例中,為“營銷”組分配了醫藥銷售資源組的參與者角色。 這意味著,“營銷”組中的用戶可以在醫藥銷售資源組中創建或管理任何 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 }
腳本沒有任何的參數,直接運行即可,運行的效果大概如下
運行完成后,會在你的桌面生成一個csv文件,里邊會記錄這些信息
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。