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