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.