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.