Exchange Online – criando rotinas administrativas utilizando o Azure Automation

By: Caio Ribeiro César

Com o amadurecimento da Cloud, diversas necessidades são criadas para melhorar a utilização e automatização de serviços. Uma destas demandas, criada por administradores de Exchange, é a gerência rotineira de objetos da nuvem.

Os administradores agora podem integrar o Exchange Online com o Azure Automation. Este serviço, que é executado do próprio Azure, elimina a necessidade de um servidor para a execução do task scheduler.

Outras vantagens da utilização do Azure Automation são:

High Availability: caso ocorra uma indisponibilidade no servidor que possui os scripts, o job não é executado;
Automation as a Service: history dos batches, logs de execução, stdout de powershell entre outras funcionalidades;
Integração de batches: que podem ser utilizados até para outros produtos ou servidores específicos;
Segurança: informações de autenticação, como os usuários que executam o batch são armazenadas no próprio serviço da cloud (SSL). Os administradores não precisam efetuar hardcode destas informações no próprio servidor.

Alguns clientes optam por este serviço, pois a arquitetura da organização já foi migrada (100% Cloud). Outros estão migrando para este serviço e removendo o servidor on-premises responsável pelos tasks.

Cenários já utilizados pelos clientes O365 podem ser visualizados no gallery, scripts customizados pelo administrador são adicionados no schedule do Azure Automation para que sejam executados em um período de tempo pré-determinado.

Utilizando o Serviço
A interface gráfica do serviço é muito simples de ser gerenciada. Inicialmente, criamos uma conta de Automação no Azure:

1 2 3

Após a conta de automação ter sido criada, vamos adicionar a autenticação do usuário O365 que irá efetuar o job dos trabalhos. Na opção “Ativos”, selecione a opção “Adicionar Configuração”:

4 5

Então, adicione as informações da conta de O365:

6 7 8 9 10

Agora que temos a credencial do usuário que irá efetuar o runbook (job), iremos demonstrar alguns cenários da utilização do Azure Automation com o O365. Caso sua organização utilize outro método ou tenha interesse em uma rotina específica, compartilhe nos comentários para que outros administradores possam criar o mesmo procedimento.

  • Runbook Semanal: Habilitar Mailbox Audit para novos usuários

Este job será executado semanalmente - o workflow irá validar se existem novas contas na organização sem a auditoria de mailboxes (novas contas criadas por administradores).

Caso a mailbox não possua auditing habilitado, o runbook irá habilitar.

1)     Criação do runbook:

11

2)     Edição do runbook. Neste passo, iremos criar o script para consumir as credenciais anteriormente adicionadas na conta de automação e também colocar o código do script em rascunho.

12 13

 workflow EXO-MailboxAudit{
(Inlinescript
{$Credentials = Get-AutomationPSCredential -Name 'O365C4iocesar'
$Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credentials -Authentication Basic -AllowRedirection
$Commands = @("Get-Mailbox","Set-Mailbox")
Import-PSSession -Session $Session - CommandName $Commands
Get-mailbox -Filter {(AuditEnabled -eq 'False')} | Set-Mailbox -AuditEnabled $true}) 
}

Testando o runbook:

14 15

*Sempre valide o stoudt (Painel de Saída) para validar que está sendo executado da maneira correta.

3)      Publicação do Runbook em Produção

16 17

4)      Agendamento semanal

18 19 20

Resultado de Mailboxes sem auditoria antes da execução do runbook:

21

 $UserMailboxesWithNoAudit = Get-mailbox -Filter {(AuditEnabled -eq 'False')}
$UserMailboxesWithNoAudit

Resultado de Mailboxes sem auditoria após a execução do runbook:

Capture

Após a criação dos Runbooks abaixo, adicionamos no agendamento semanal do Azure Automation:

Habilitar Litigation para novos usuários 23

 $workflow EXO-Litigation{
(Inlinescript
{$Credentials = Get-AutomationPSCredential -Name 'O365C4iocesar'
$Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credentials -Authentication Basic -AllowRedirection
$Commands = @("Get-Mailbox","Set-Mailbox")
Import-PSSession -Session $Session - CommandName $Commands
Get-mailbox -Filter {(LitigationHoldEnabled -eq 'False')} | Set-Mailbox -LitigationHoldEnabled $true}) 
}

Relatório O365 de licenciamento e serviços customizado

Seguindo o procedimento discutido no post de licenciamento de usuários vs. serviços, criamos o relatório e agendar o runbook para ser executado semanalmente.

24

 workflow O365-Report
{
(Inlinescript
{$Credentials = Get-AutomationPSCredential -Name 'O365C4iocesar'
$Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credentials -Authentication Basic -AllowRedirection
$Commands = @("Get-Mailbox","Set-Mailbox")
Import-PSSession -Session $Session - CommandName $Commands
$Users = Get-MsolUser | Where-Object { $_.isLicensed -eq “true”}
foreach ($msolUser in $Users){$UserServiceStatus = $msolUser.Licenses.ServiceStatus
foreach($ServiceStatus in $UserServiceStatus){[PSCustomObject] @{UserPrincipalName = $msolUser.UserPrincipalName
ServiceType = $ServiceStatus.ServicePlan.ServiceName
Status = $ServiceStatus.ProvisioningStatus
             }
         }
     }
    })
}

Podemos então acessar as configurações de log e habilitar, para posterior análise semanal do admin (utilização de licenciamento).

25