DEV Community

Cover image for Automatizando a Migração de Usuários e o Gerenciamento de IAM na AWS
Luis Cruz
Luis Cruz

Posted on

Automatizando a Migração de Usuários e o Gerenciamento de IAM na AWS

Migrar 100 usuários manualmente no console da AWS é lento, suscetível a erros e impossível de auditar com precisão. Neste artigo você vai ver como automatizar esse processo usando AWS CLI e Shell Script direto no AWS CloudShell — sem instalar nada localmente.

O resultado final: usuários criados, alocados nos grupos corretos e com MFA obrigatório, tudo em minutos.


O que é o IAM?

O AWS Identity and Access Management (IAM) é o serviço que controla quem pode acessar os recursos da sua conta AWS e o que cada pessoa ou serviço pode fazer.

Com o IAM você gerencia:

Conceito Descrição
Usuário Identidade individual com credenciais próprias
Grupo Conjunto de usuários que compartilham as mesmas permissões
Política Documento JSON que define o que é permitido ou negado
Role Identidade temporária assumida por serviços ou usuários

A boa prática é nunca conceder permissões diretamente a um usuário — sempre use grupos.


Visão geral da solução

O fluxo é simples:

  1. Criar os grupos IAM no console
  2. Montar um arquivo CSV com os dados dos usuários
  3. Rodar um shell script no CloudShell que lê o CSV e cria tudo automaticamente
  4. Aplicar a política de MFA obrigatório nos grupos

Passo 1 — Criar os Grupos IAM

Antes de importar os usuários, os grupos precisam existir.

No AWS Console, acesse IAM → User groups → Create group e crie um grupo para cada perfil do seu ambiente. Neste exemplo usaremos:

  • RedesAdmin — administradores de rede
  • LinuxAdmin — administradores de servidores Linux
  • DBA — administradores de banco de dados
  • Estagiarios — acesso limitado para estagiários

Nomes de grupos suportam até 128 caracteres (letras, números e + = , . @ _ -), são únicos por conta e não diferenciam maiúsculas de minúsculas.


Passo 2 — Montar o arquivo CSV

Crie uma planilha com os dados dos usuários e salve como CSV separado por vírgula (UTF-8). O arquivo deve ter exatamente três colunas: Username, Group e Password.

Username,Group,Password
joao.silva,LinuxAdmin,Senha@2024!
maria.souza,DBA,Senha@2024!
pedro.lima,Estagiarios,Senha@2024!
ana.costa,RedesAdmin,Senha@2024!
carlos.melo,LinuxAdmin,Senha@2024!
Enter fullscreen mode Exit fullscreen mode

Algumas observações importantes:

  • O valor em Group deve corresponder exatamente ao nome do grupo criado no Passo 1
  • Use senhas que atendam à política da conta AWS (mínimo 8 caracteres, maiúsculas, minúsculas, números e símbolos)
  • Se o arquivo foi criado no Excel (Windows), salve como CSV UTF-8 — o script vai precisar do dos2unix para converter os caracteres de fim de linha

Passo 3 — O script de criação de usuários

Este é o script que lê o CSV e cria cada usuário no IAM. Salve-o como criar-usuarios-iam.sh:

#!/bin/bash

# Valida se o arquivo CSV foi informado
if [ -z "$1" ]; then
  echo "Uso: $0 <arquivo.csv>"
  exit 1
fi

CSV_FILE="$1"

# Ignora o cabeçalho e lê linha por linha
tail -n +2 "$CSV_FILE" | while IFS=',' read -r USERNAME GROUP PASSWORD; do

  # Remove espaços e caracteres de retorno de carro (Windows)
  USERNAME=$(echo "$USERNAME" | tr -d '[:space:]\r')
  GROUP=$(echo "$GROUP"       | tr -d '[:space:]\r')
  PASSWORD=$(echo "$PASSWORD" | tr -d '\r')

  echo "──────────────────────────────────────"
  echo "Criando usuário: $USERNAME | Grupo: $GROUP"

  # Cria o usuário com acesso ao console
  aws iam create-user --user-name "$USERNAME"

  # Define a senha inicial e exige troca no primeiro login
  aws iam create-login-profile \
    --user-name "$USERNAME" \
    --password "$PASSWORD" \
    --password-reset-required

  # Adiciona ao grupo
  aws iam add-user-to-group \
    --user-name "$USERNAME" \
    --group-name "$GROUP"

  echo "✓ $USERNAME criado e adicionado ao grupo $GROUP"

done

echo ""
echo "Migração concluída."
Enter fullscreen mode Exit fullscreen mode

Passo 4 — Executar no AWS CloudShell

O AWS CloudShell é um terminal no próprio console da AWS com AWS CLI já configurada e autenticada. Não é necessário instalar nada localmente.

4.1 Instalar o dos2unix

sudo yum install dos2unix -y
Enter fullscreen mode Exit fullscreen mode

4.2 Fazer upload dos arquivos

No CloudShell, clique em Actions → Upload file e envie:

  • criar-usuarios-iam.sh
  • ListaDeUsuarios.csv

4.3 Preparar e executar

# converter o CSV (necessário se o arquivo foi criado no Windows)
dos2unix ListaDeUsuarios.csv

# tornar o script executável
chmod +x criar-usuarios-iam.sh

# executar
./criar-usuarios-iam.sh ListaDeUsuarios.csv
Enter fullscreen mode Exit fullscreen mode

A saída esperada é uma linha de confirmação para cada usuário criado.


Passo 5 — Validar os usuários criados

Verifique os usuários no console em IAM → Users, ou via CLI:

# listar todos os usuários da conta
aws iam list-users --output table

# verificar os grupos de um usuário específico
aws iam list-groups-for-user --user-name joao.silva

# verificar todos os usuários de um grupo
aws iam get-group --group-name LinuxAdmin --output table
Enter fullscreen mode Exit fullscreen mode

Passo 6 — Aplicar política de MFA obrigatório

Sem essa etapa, os usuários conseguem acessar recursos da AWS sem configurar autenticação multifator. A política abaixo bloqueia qualquer ação enquanto o MFA não estiver ativo.

6.1 Criar a política

Acesse IAM → Policies → Create policy → JSON e cole o conteúdo abaixo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowViewAccountInfo",
      "Effect": "Allow",
      "Action": [
        "iam:GetAccountPasswordPolicy",
        "iam:ListVirtualMFADevices"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowManageOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice"
      ],
      "Resource": "arn:aws:iam::*:mfa/*"
    },
    {
      "Sid": "AllowManageOwnUserMFA",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ResyncMFADevice"
      ],
      "Resource": "arn:aws:iam::*:user/${aws:username}"
    },
    {
      "Sid": "DenyAllExceptListedIfNoMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Dê o nome EnforceMFAPolicy e salve.

6.2 Anexar as políticas aos grupos

Para cada grupo, adicione as duas políticas abaixo:

  • IAMUserChangePassword — permite que o usuário troque sua própria senha no primeiro acesso
  • EnforceMFAPolicy — bloqueia acesso a qualquer recurso enquanto o MFA não estiver configurado

Acesse IAM → User groups → [nome do grupo] → Permissions → Add permissions → Attach policies.

Para aplicar em todos os grupos de uma vez, use a política diretamente:

IAM → Policies → EnforceMFAPolicy → Entities attached → Attach → selecione todos os grupos → Attach


Boas práticas aplicadas

  • Mínimo privilégio — cada grupo tem apenas as permissões necessárias para sua função
  • MFA obrigatório — nenhum usuário acessa recursos sem segundo fator ativo
  • Troca de senha no primeiro acesso — o parâmetro --password-reset-required garante que o usuário defina sua própria senha
  • Automação auditável — o script e o CSV podem ser versionados e revisados
  • Nunca usar o usuário root — toda operação deve ser feita com usuários IAM com permissões adequadas

Considerações finais

O mesmo processo funciona para qualquer escala — 10 ou 10.000 usuários. Para ambientes maiores, o próximo passo natural é evoluir para AWS SSO (IAM Identity Center) com integração a um provedor de identidade como Azure AD ou Okta, eliminando a necessidade de gerenciar senhas individuais no IAM.


Referências

See you later 🤘🏻

Top comments (0)