Importância dos Proprietários de Grupos
Os proprietários de grupos Microsoft 365 têm responsabilidades significativas:
- Gerir membros do grupo
- Configurar definições do grupo
- Renovar grupos durante revisões de acesso
- Aprovar solicitações de acesso
- Gerir recursos associados (Teams, SharePoint, etc.)
A falta de proprietários adequados pode levar a problemas de governança e segurança, como:
- Grupos órfãos sem gestão apropriada
- Riscos de conformidade devido à falta de supervisão
- Acumulação de grupos desnecessários
- Dificuldade em encontrar o responsável pelo conteúdo
Identificação via Microsoft Graph
Para listar todos os grupos e seus proprietários:
# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "Group.Read.All", "User.Read.All"
# Obter todos os grupos Microsoft 365
$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All
# Criar array para armazenar resultados
$groupsWithOwners = @()
foreach ($group in $groups) {
# Obter proprietários do grupo
$owners = Get-MgGroupOwner -GroupId $group.Id
$ownerCount = $owners.Count
# Obter detalhes dos proprietários
$ownerDetails = @()
foreach ($owner in $owners) {
$ownerObject = Get-MgUser -UserId $owner.Id -ErrorAction SilentlyContinue
if ($ownerObject) {
$ownerDetails += "$($ownerObject.DisplayName) ($($ownerObject.UserPrincipalName))"
} else {
# Pode ser um proprietário que é um service principal
$spOwner = Get-MgServicePrincipal -ServicePrincipalId $owner.Id -ErrorAction SilentlyContinue
if ($spOwner) {
$ownerDetails += "$($spOwner.DisplayName) (Aplicação)"
} else {
$ownerDetails += "Desconhecido ($($owner.Id))"
}
}
}
# Adicionar informações ao array de resultados
$groupsWithOwners += [PSCustomObject]@{
DisplayName = $group.DisplayName
Description = $group.Description
Id = $group.Id
OwnerCount = $ownerCount
Owners = $ownerDetails -join ", "
HasOwners = $ownerCount -gt 0
CreatedDateTime = $group.CreatedDateTime
MemberCount = if ($group.MemberCount) { $group.MemberCount } else { "N/A" }
IsTeam = $null -ne ($group.ProxyAddresses | Where-Object { $_ -like "SPO:*" })
}
}
# Exibir grupos sem proprietários (problema crítico de governança)
$groupsWithoutOwners = $groupsWithOwners | Where-Object { -not $_.HasOwners }
Write-Output "Grupos sem proprietários ($($groupsWithoutOwners.Count)):"
$groupsWithoutOwners | Format-Table DisplayName, CreatedDateTime, MemberCount, IsTeam -AutoSize
# Exibir todos os grupos com seus proprietários
Write-Output "`nTodos os grupos com proprietários:"
$groupsWithOwners | Format-Table DisplayName, OwnerCount, Owners -AutoSize
Análise de Proprietários por Distribuição
Para analisar a distribuição de propriedade:
# Agrupar por número de proprietários
$ownerDistribution = $groupsWithOwners | Group-Object -Property OwnerCount | Sort-Object -Property Name
# Calcular estatísticas
$totalGroups = $groupsWithOwners.Count
$groupsWithMultipleOwners = ($groupsWithOwners | Where-Object { $_.OwnerCount -ge 2 }).Count
$percentWithMultipleOwners = [math]::Round(($groupsWithMultipleOwners / $totalGroups) * 100, 2)
# Identificar utilizadores com maior número de propriedades de grupo
$allOwners = @()
foreach ($group in $groupsWithOwners) {
$ownersList = $group.Owners -split ", "
foreach ($owner in $ownersList) {
if (-not [string]::IsNullOrEmpty($owner)) {
$allOwners += $owner
}
}
}
$topOwners = $allOwners | Group-Object | Sort-Object -Property Count -Descending | Select-Object -First 10
# Exibir estatísticas
Write-Output "=== Análise de Proprietários de Grupos ==="
Write-Output "Total de grupos Microsoft 365: $totalGroups"
Write-Output "Distribuição de proprietários:"
foreach ($item in $ownerDistribution) {
$percentage = [math]::Round(($item.Count / $totalGroups) * 100, 2)
Write-Output "- Grupos com $($item.Name) proprietário(s): $($item.Count) ($percentage%)"
}
Write-Output "`nGrupos com múltiplos proprietários: $groupsWithMultipleOwners ($percentWithMultipleOwners%)"
Write-Output "`nTop 10 proprietários de grupos:"
foreach ($owner in $topOwners) {
Write-Output "- $($owner.Name): $($owner.Count) grupos"
}
Recomendações para Boa Governança
# Gerar recomendações com base na análise
Write-Output "=== Recomendações de Governança ==="
# Tratar grupos sem proprietários
if ($groupsWithoutOwners.Count -gt 0) {
Write-Output "1. Atribuir pelo menos um proprietário para os $($groupsWithoutOwners.Count) grupos órfãos."
# Sugerir proprietários com base nos membros mais ativos
Write-Output " Grupos órfãos prioritários para ação:"
$groupsWithoutOwners |
Sort-Object -Property MemberCount -Descending |
Select-Object -First 5 |
Format-Table DisplayName, MemberCount, CreatedDateTime -AutoSize
}
# Garantir múltiplos proprietários
$singleOwnerPercentage = ($ownerDistribution | Where-Object { $_.Name -eq "1" }).Count / $totalGroups * 100
if ($singleOwnerPercentage -gt 50) {
Write-Output "2. Aumentar o número de grupos com múltiplos proprietários (atualmente apenas $percentWithMultipleOwners%)."
Write-Output " Considerar a atribuição de um segundo proprietário para grupos críticos com apenas um proprietário."
}
# Evitar concentração excessiva
$maxOwnershipCount = ($topOwners | Select-Object -First 1).Count
if ($maxOwnershipCount -gt 20) {
Write-Output "3. Redistribuir propriedade de grupos do utilizador '$($topOwners[0].Name)' que possui $maxOwnershipCount grupos."
Write-Output " Considerar a delegação para reduzir o risco de único ponto de falha."
}
# Recomendação geral
Write-Output "4. Implementar revisões periódicas de proprietários de grupos (trimestrais)."
Write-Output "5. Configurar políticas de expiração de grupos para grupos sem atividade."
Write-Output "6. Documentar processo para transferência de propriedade quando utilizadores saem da organização."
Boas Práticas para Proprietários de Grupos
- Mantenha pelo menos 2 proprietários para cada grupo
- Evite que um único utilizador seja proprietário de muitos grupos
- Implemente um processo para revisão periódica de propriedade
- Estabeleça nomenclatura padronizada que identifique o propósito do grupo
- Configure expiração automática para grupos sem proprietários ativos
- Utilize etiquetas de sensibilidade para grupos com conteúdo crítico
- Documente responsabilidades dos proprietários de grupos
- Ofereça formação para proprietários sobre gestão eficaz de grupos