Exchange Online e o Role Based Access Control (RBAC) parte II

By: Caio Ribeiro César

O intuito deste post é clarificar customizações em cenários de RBAC em ambientes Exchange Online (EXO).

Anteriormente, discutimos as funcionalidades disponíveis em RBAC. Vamos entrar em mais detalhes nas questões de customizações e RBAC vs. cmdlets específicos.

Da última vez, explicamos que o RBAC funciona em camadas:

1) Expandimos o RoleGroup “Compliance Management”;
2) Listamos as roles atribuídas ao RoleGroup;
3) Expandimos os RoleAssignments de uma role em questão (Data Loss Prevention).

Vamos então um pouco além dos RoleAssignments. Como podemos ver, a última camada de permissionamento em RBAC é a de permissões individuais ou “cmdlets/parameters” específicos:

RBAC1

RoleGroup

Expandindo os membros do RoleGroup “Discovery Management” e também seus RoleAssignments:

 Get-RoleGroup "Discovery Management" | Select-Object -ExpandProperty RoleAssignments
Legal Hold-Discovery Management
Mailbox Search-Discovery Management

Get-RoleGroupMember "Discovery Management"

Name  RecipientType
----  -------------
caioc UserMailbox

Conclusão: o RoleGroup "Discovery Management" possui dois RoleAssignments: Legal Hold-Discovery Management & Mailbox Search-Discovery Management. O usuário “caioc” é membro deste RoleGroup, logo possui as permissões atribuídas.

ManagementRoleAssignment

Expandindo o ManagementRoleAssignment “Legal Hold-Discovery Management”:

 Get-ManagementRoleAssignment "Legal Hold-Discovery Management" | fl
RunspaceId                   : 
DataObject                   : Legal Hold-Discovery Management
User                         : Discovery Management
AssignmentMethod             : Direct
Identity                     : Legal Hold-Discovery Management
EffectiveUserName            : All Group Members
AssignmentChain              :
RoleAssigneeType             : RoleGroup
RoleAssignee                 : Discovery Management
Role                         : Legal Hold
RoleAssignmentDelegationType : Regular
CustomRecipientWriteScope    :
CustomConfigWriteScope       :
RecipientReadScope           : Organization
ConfigReadScope              : OrganizationConfig
RecipientWriteScope          : Organization
ConfigWriteScope             : None
Enabled                      : True
RoleAssigneeName             : Discovery Management
IsValid                      : True
ExchangeVersion              : 0.11 (14.0.550.0)
Name                         : Legal Hold-Discovery Management
ObjectClass                  : {top, msExchRoleAssignment}

Conclusão: O ManagementRoleAssignment possui uma única role atribuída: Legal Hold.

ManagementRole

Expandindo o ManagementRole “Legal Hold”:

 Get-ManagementRole "Legal Hold" | fl


RoleEntries                 : {(Microsoft.Exchange.Management.PowerShell.E2010) Set-Mailbox -AccountDisabled -Confirm -ElcProcessingDisabled -Force
                              -Identity -InactiveMailbox -LitigationHoldDate -LitigationHoldDuration -LitigationHoldEnabled -LitigationHoldOwner
                              -RecalculateInactiveMailbox -RetentionComment -RetentionPolicy -RetentionUrl -SingleItemRecoveryEnabled
                              -StsRefreshTokensValidFrom, (Microsoft.Exchange.Management.PowerShell.E2010) Get-MailboxPreferredLocation -Identity,
                              (Microsoft.Exchange.Management.PowerShell.E2010) Start-AuditAssistant -Identity,
                              (Microsoft.Exchange.Management.PowerShell.E2010) Get-Mailbox -Anr -ErrorAction -ErrorVariable -Filter -Identity -MailboxPlan
                              -OrganizationalUnit -OutBuffer -OutVariable -PublicFolder -RecipientTypeDetails -ResultSize -SortBy -WarningAction
                              -WarningVariable...}
RoleType                    : LegalHold
ImplicitRecipientReadScope  : Organization
ImplicitRecipientWriteScope : Organization
ImplicitConfigReadScope     : OrganizationConfig
ImplicitConfigWriteScope    : None
IsRootRole                  : True
IsEndUserRole               : False
MailboxPlanIndex            :
Description                 : This role enables administrators to configure whether data within a mailbox should be retained for litigation purposes in an organization.
Parent                      :
IsDeprecated                : False
AdminDisplayName            :
ExchangeVersion             : 0.12 (14.0.451.0)
Name                        : Legal Hold
Identity                    : Legal Hold

Conclusão: O ManagementRole “Legal Hold” possui diversas entradas (ManagementRoleEntries). Temos também a descrição do permissionamento da role – admins com tais permissões podem configurar litigation na organização.

ManagementRoleEntry

Expandindo ManagementRoleEntries do ManagementRole “Legal Hold”:

 Get-ManagementRoleEntry "Legal Hold\*"
Name                           Role                      Parameters
----                           ----                      ----------
Set-Mailbox                    Legal Hold                {AccountDisabled, Confirm, ElcProcessingDisabled, Force...}
Get-MailboxPreferredLocation   Legal Hold                {Identity}
Start-AuditAssistant           Legal Hold                {Identity}
Get-Mailbox                    Legal Hold                {Anr, ErrorAction, ErrorVariable, Filter...}
Get-MailboxSearch              Legal Hold                {ErrorAction, ErrorVariable, Identity, InPlaceHoldIdentity...}
Get-Recipient                  Legal Hold                {Anr, AuthenticationType, BookmarkDisplayName, ErrorAction...}
Get-User                       Legal Hold                {Anr, ErrorAction, ErrorVariable, Filter...}
New-MailboxSearch              Legal Hold                {Confirm, Description, ErrorAction, ErrorVariable...}
Remove-MailboxSearch           Legal Hold                {Confirm, ErrorAction, ErrorVariable, Identity...}
Set-MailboxSearch              Legal Hold                {Confirm, Description, ErrorAction, ErrorVariable...}
Write-AdminAuditLog            Legal Hold                {Comment, Confirm, ErrorAction, ErrorVariable...}
GetDiscoverySearchConfigura... Legal Hold                {}
GetHoldOnMailboxes             Legal Hold                {}
SetHoldOnMailboxes             Legal Hold                {}
Get-UnifiedAuditSetting        Legal Hold                {ErrorAction, ErrorVariable, Identity, OutBuffer...}
Set-UnifiedAuditSetting        Legal Hold                {ErrorAction, ErrorVariable, Identity, OutBuffer...}

Conclusão: Os comandos exportados (e seus respectivos parâmetros) são disponibilizados para o ManagementRole “Legal Hold”. Consequentemente, o usuário “caioc” possui a permissão de executar os comandos.

Agora que as camadas foram explicadas, vamos customizar a criação de um novo grupo e suas respectivas permissões.

1) Criação do ManagementRole customizado com os cmdlets que os admins irão executar:

 New-ManagementRole -Name "Message Trace Somente Pshell" -Parent "Transport Hygiene"
Name                         RoleType
----                         --------
Message Trace Somente Pshell TransportHygiene

2) Customização da ManagementRole, editando os comandos disponibilizados em “ManagementRoleEntry”:

 Get-ManagementRoleEntry "Message Trace Somente Pshell\*" | Where { $_.Name -NotLike "Get*" } | Remove-ManagementRoleEntry

3) Criação do grupo com a role customizada seus respectivos membros:

 New-RoleGroup -Name "Message Tracer Simples" -ManagedBy "caioc" -Members "olavo" -Roles "Message Trace Somente Pshell"

Name                    AssignedRoles                  RoleAssignments                                                                  ManagedBy
----                    -------------                  ---------------                                                                  ---------
Message Tracer Simples {Message Trace Somente Pshell} {c4iocesar.onmicrosoft.com\Message Trace Somente Pshell-Message Tracer Simples} {caioc}

As customizações também existem para usuários finais (non-admin permissions). Neste exemplo, bloqueamos o usuário final (Olavo) para bloquear a criação de uma “Fwd Rule”:

 New-ManagementRole -Parent MyBaseOptions -Name "Block Forward Emails"
Set-ManagementRoleEntry "Block Forward Emails\set-mailbox” -parameters DeliverToMailboxAndForward,ForwardingAddress,ForwardingSmtpAddress -RemoveParameter
Set-ManagementRoleEntry "Block Forward Emails\New-InboxRule" -Parameters ForwardAsAttachmentTo,ForwardTo,RedirectTo –RemoveParameter
New-ManagementRoleAssignment -Role "Block Forward Emails" -User Olavo

Get-ManagementRoleAssignment block* | fl User,Identity

User     : olavo
Identity : Block Forward Emails-olavo

Resultado:

RBAC2 RBAC3
Mais informações
Para coletar informações de Roles atribuídas aos usuários da organização:

Get-ManagementRoleAssignment -GetEffectiveUsers | Export-Csv Users.csv

Para coletar informações de Roles atribuídas a usuários específicos:

Get-ManagementRoleAssignment -GetEffectiveUsers | Where { $_.EffectiveUserName -Eq "admin" }