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
.