Compartilhe que você está se especializando

Você sabe o que é mokar dados na infraestrutura? Se você atua com infraestrutura de TI, com certeza já precisou testar funcionalidades no seu Active Directory (AD) e, para isso, ter um ambiente de testes é fundamental. Mas para ter um ambiente de teste é importante que ele possua dados (contas de usuários, preenchicas, com cargos, departamentos, etc.).

É aí que entra a importância de criar dados “mokados” (termo muito comum e amplamente usado no desenvolvimento de software) para simular um ambiente real. Isso permite validar funcionalidades sem comprometer dados de produção, além de agilizar testes e facilitar a automação.

Mas, justamente para quem é de infraestrutura, pode se perguntar: “Mas como usar esse conceito de “mokar” dados em cenários de testes, como no Active Directory (AD)?”. Vamos explicar isso de forma prática e objetiva.

O que Significa “Mokar Dados”?

“Mokar” (ou “mockar”, vindo do inglês mock) significa simular dados ou comportamentos de sistemas de forma controlada. Em termos simples, é criar dados fictícios que se comportam como dados reais, mas que não afetam o ambiente de produção.

Por Que Isso É Útil para Infra?

Imagine que você precisa testar, ou mesmo validar algo no seu Active Directory (como um script para desabilitar, ou até apagar, várias contas de usuários em determinados eventos externos). Fazer isso em um ambiente real pode ser muito arriscado. Ao poder simular um AD com dados de usuários, grupos e unidades organizacionais (OUs), você consegue montar rapidamente um ambiente de teste realista, mas sem riscos. As principais vantagens de ter um ambiente assim, são:

  • Segurança: não é necessário usar dados reais, evitando exposição de informações sensíveis.
  • Repetibilidade: você pode repetir o mesmo cenário de testes sempre que quiser.
  • Velocidade: automatiza a criação de ambientes de laboratório.
  • Qualidade de Testes: possibilita testes mais próximos da realidade do ambiente de produção.

O Que Vamos Mostrar?

Em resumo, iremos demonstrar aqui como executar duas coisas:

Etapa 1Etapa 2
Criar uma API para gerar dados aleatórios de usuários (com nome, cargo, setor, cpf, etc.)Usar o PowerShell para consultar essa API e criar uma estrutura (OU’s, grupos, usuários) em um AD de teste.

Para a primeira etapa, destamos várias ferramentas para criar dados, entre elas:

Neste post, vamos mostrar como gerar um script em PowerShell para utilizar uma dessas ferramentas e criar dados fictícios em um ambiente de Active Directory de testes. Você aprenderá a:

  • Criar unidades organizacionais (OUs);
  • Criar usuários fictícios com dados padronizados;
  • Criar grupos e adicionar usuários a esses grupos.

Esses dados mockados serão ideais para testes de scripts, validações de permissões, integrações com sistemas e mais.

Populando um Active Directory

Considerando que você já tem um servidor/ambiente de teste com AD montado (não iremos explicar isso aqui). Faça o seguinte:

Criando a sua lista randomíca

Acesse o site do Mockaroo e crie uma conta (ou faça login com sua conta do Gmail). No site inicial, edite sua lista (tenha cuidado, pois todos os campos são sensíveis a caracteres maíusculas e mínusculas), em nosso exemplo a lista deve ficar assim (altere como sua realidade:

  • Campo cpf (tipo Regular Expression), com valor \d{3}.\d{3}.\d{3}-\d{2}
  • Campo first_name (do tipo First Name)
  • Campo middle_name (do tipo Last Name)
  • Campo last_name (do tipo Last Name)
  • Campo full_name (do tipo Formula), com valor first_name + ” ” + middle_name + ” ” + last_name
  • Campo login (tipo Formula), com valor first_name[0].downcase + last_name.downcase

Como eu queria alguns campos personalizados (e em português), criei também os dois campos (com opções informadas), que são:

  • Campo department (do tipo Custom List), com valor Recursos Humanos, Auditoria, Tecnologia, Engenharia, Marketing, Financeiro, Compras
  • Campo title (do tipo Custom List), com valor Gerente, Assistente, Analista Junior, Analista Pleno, Analista Senior

Aproveite, ainda, e dê uma boa olhada nos outros tipos possíveis (nome de empresa, cidade, ou até fórmulas personalizadas) e adapte à sua necessidade.

Ainda no site (confirme), em Rows deixe o padrão 1000 e o Format também deixe o padrão em CSV. Também (em SHARING) sugerimos clicar em SHARE THIS SCHEMA PUBLICLY, para esse esquema se tornar público (permitindo qualquer IP de origem acessar).

Por fim, salve sua lista. Depois disso você verá que existe uma parte no site Generating data via cURL que possuí a sua url para obter os dados (caso queira usar a que criamos, é https://api.mockaroo.com/api/d4a18bc0?count=1000&key=2405eb00 ).

Script PowerShell

Para a criação, vamos eleger uma “pasta raiz”, uma OU base dentro do AD, onde será criado os objetos dentro dela. Conecte-se no seu AD de teste (para garantir que não vai executar no ambiente errado), com uma conta com permissão para criar os objetos, abra o PowerShell ISE como administrador e execute o seguinte código (altere as partes em cinza, conforme sua necessidade):

#Variaveis (altere conforme sua necessidade)
$OUBASE="TESTE"
$SEUID="d4a18bc0"
$SUAKEY="2405eb00"
$QTDUSERS="200"
$DefaultPassword = "S&nh@"
$DomainName = (Get-ADDomain).DNSRoot
#Obter dados da API
#---------------------------------------
Clear-Host
Write-Host "Obtendo dados da API"
$apiUrl = "https://api.mockaroo.com/api/"+ $SEUID +"?count="+ $QTDUSERS +"&key="+ $SUAKEY +"&format=csv"
$response = Invoke-RestMethod -Uri $apiUrl
$lista = $response | ConvertFrom-Csv
#Tratar possiveis duplicados (e manter APENAS UM Gerente por Departamento)
#---------------------------------------
Write-Host "Higienizando registros"
$lista = $lista | Group-Object cpf | ForEach-Object { $_.Group[0] }
$lista = $lista | Group-Object login | ForEach-Object { $_.Group[0] }
$nomanagers = $lista | Where-Object title -ne "Gerente" 
$managers = @($lista | Where-Object title -eq "Gerente" | Group-Object department | ForEach-Object { $_.Group[0] })
$lista = $nomanagers + $managers
#Criar as OU's de cada departamento dentro da OU Base
#---------------------------------------
Write-host "Criando OU's"
try {New-ADOrganizationalUnit -Name $OUBASE| Out-Null} catch {}
$OUBASE = (Get-ADOrganizationalUnit -Filter "Name -eq '$OUBASE'").DistinguishedName
($lista).department | Sort-Object -Unique | ForEach-Object { try {New-ADOrganizationalUnit -Name $_ -Path $OUBASE | Out-Null} catch {}}
#Criar GRUPOS de cada departamento dentro da OU Base
#---------------------------------------
($lista).department | Sort-Object -Unique | ForEach-Object { try {New-ADGroup -Name "Todos do Setor - $_" -Path $OUBASE -GroupScope Global | Out-Null} catch {}}
($lista).title | Sort-Object -Unique | ForEach-Object { try {New-ADGroup -Name "Todos do Cargo - $_" -Path $OUBASE -GroupScope Global | Out-Null} catch {}}
#Criar os usuários, colocando em cada OU e adicionando nos repesctivos grupos
#---------------------------------------
$lista | ForEach-Object {
    Write-Host ""
    $AccountPassword = $_.cpf -replace "[^0-9]" , ''
    $AccountPassword = $DefaultPassword + $AccountPassword
    $CPF = $_.cpf
    $Department = $_.department
    $GivenName = $_.first_name
    $Name = $_.full_name
    $SamAccountName = $_.login
    $Surname = $_.middle_name+" "+$_.last_name
    $Title = $_.title
    $UserPrincipalName = $SamAccountName + "@" + $DomainName
    Write-Host -NoNewline "Usuario $SamAccountName"
    try {New-ADUser -Name $Name -GivenName $GivenName -Surname $Surname -SamAccountName $SamAccountName -UserPrincipalName $UserPrincipalName -AccountPassword (ConvertTo-SecureString $AccountPassword -AsPlainText -Force) -ChangePasswordAtLogon $false -Title $Title -Department $Department -Description "Senha: $AccountPassword" -Enabled $true -Path "ou=$Department,$OUBASE" -EmployeeID $CPF | Out-Null} catch {}
    Write-Host -NoNewline " - criado o usuario (senha $AccountPassword)"
    try {Add-ADGroupMember -Identity "Todos do Setor - $Department" -Members $SamAccountName | Out-Null} catch {}
    Write-Host -NoNewline "${padding} - adicionado no grupo de $Department"
    try {Add-ADGroupMember -Identity "Todos do Cargo - $Title" -Members $SamAccountName | Out-Null} catch {}
    Write-Host -NoNewline "${padding} - adicionado no grupo de $Title"
}

O script acima é ilustrativo, altere de acordo com os dados que você precisa para testar em seu ambiente (por exemplo, telefone, e-mail, vincular chefia direta, etc.)

Conclusão

Mesmo que o conceito de “mokar dados” venha do mundo do desenvolvimento, ele pode e deve ser usado também na infraestrutura. A capacidade de simular ambientes de forma rápida e segura, como do Active Directory, é uma vantagem enorme.

Fontes/Referências

https://fakerapi.it
https://mockaroo.com
https://namefake.com
https://randomuser.me

Mais Informações

Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria