tf/user/
Esse módulo Ć© responsĆ”vel pela criação de usuĆ”rios e associação de restriƧƵes especĆcias a eles.
Assim como no módulo tf/ec2, o módulo tf/user precisa ser capaz de criar multiplos usuÔrios por vez, por isso,
o atributo for_each Ć© utilizado.
Criação de restrições (se presentes)
Primeiramente é necessÔrio que seja criada a politica de restrição do usuÔrio, caso exista alguma restrição para o mesmo.
Para isso, os recursos aws_iam_policy_document e aws_iam_policy são utilizados.
data "aws_iam_policy_document" "ec2_policy" { for_each = { for user in var.users : user.name => user } policy_id = each.value.name statement { effect = "Allow" sid = "VisualEditor0" actions = each.value.restrictions.actions resources = each.value.restrictions.resources }}resource "aws_iam_policy" "ec2_policy" { for_each = { for user in var.users : user.name => user } name = each.value.restrictions.name description = each.value.restrictions.description policy = data.aws_iam_policy_document.ec2_policy[each.value.name].json}Criação de usuÔrios
Para a criação de usuÔrios, o recurso aws_iam_user é utilizado. e para a associação de restrições, o recurso aws_iam_user_policy_attachment é utilizado.
resource "aws_iam_user" "user" { for_each = { for user in var.users : user.name => user } name = each.value.name}resource "aws_iam_user_policy_attachment" "user_policy_attachment" { for_each = { for user in var.users : user.name => user } user = aws_iam_user.user[each.value.name].name policy_arn = aws_iam_policy.ec2_policy[each.value.name].arn}Criação de chaves de acesso
Por fim, para garantir que os usuÔrios criados terão acesso ao dashboard da AWS, é necessÔrio que sejam criadas chaves de acesso para cada um deles.
Para isso, os recursos aws_iam_access_key e aws_iam_user_login_profile são utilizados.
resource "aws_iam_access_key" "iam_access_key" { for_each = { for user in var.users : user.name => user } user = aws_iam_user.user[each.value.name].name}resource "aws_iam_user_login_profile" "profile" { for_each = { for user in var.users : user.name => user } user = aws_iam_user.user[each.value.name].name password_length = 13 password_reset_required = true}Todas as senhas geradas para os usuÔrios são guardadas no arquivo terraform.tfstate e podem ser acessadas
atravƩs do comando terraform state show aws_iam_user_login_profile.profile[<user_name>].password.