tf/groups/
No Ćŗltimo mĆ³dulo que vimos, construimos a criaĆ§Ć£o de usuĆ”rios com restriƧƵes especĆficas Ć cada um deles. Mas caso esse usuĆ”rio participe de um time de desenvolvimento, ele terĆ” acesso a todos os recursos que o time tem acesso. Por isso Ć© necessĆ”rio criar grupos de usuĆ”rios e atribuir os usuĆ”rios a esses grupos.
Aqui de novo para lembrar do uso do atributo for_each
para permitir a criaĆ§Ć£o de multiplos
grupos de usuĆ”rios com um Ćŗnico bloco de cĆ³digo.
Esse mĆ³dulo Ć© muito parecido com o mĆ³dulo de criaĆ§Ć£o de usuĆ”rios, pelo fato da criaĆ§Ć£o de polĆticas serem muito parecidas, a diferenƧa Ć© que aqui nĆ£o precisamos criar um usuĆ”rio, mas sim um grupo de usuĆ”rios e adicionar qualquer usuĆ”rio que precisar de acesso a esse grupo.
CriaĆ§Ć£o de restriƧƵes
Aqui a criaĆ§Ć£o das polĆticas de restriĆ§Ć£o sao praticamente iguais as do mĆ³dulo de criaĆ§Ć£o de usuĆ”rios, a diferenƧa Ć© que por simplicidade decidi retirar os campos name e description de cada restriĆ§Ć£o.
data "aws_iam_policy_document" "ec2_policy" { for_each = { for group in var.user_groups : group.name => group } 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 group in var.user_groups : group.name => group } policy = data.aws_iam_policy_document.ec2_policy[each.value.name].json}
CriaĆ§Ć£o de grupos
Para essa aĆ§Ć£o teremos que usar um recurso de criaĆ§Ć£o de grupo e outro de anexaĆ§Ć£o de polĆticas ao grupo.
resource "aws_iam_group" "group" { for_each = { for group in var.user_groups : group.name => group } name = each.value.name}resource "aws_iam_group_policy_attachment" "group_policy_attachment" { for_each = { for group in var.user_groups : group.name => group } group = aws_iam_group.group[each.value.name].name policy_arn = aws_iam_policy.ec2_policy[each.value.name].arn}
InclusĆ£o de usuĆ”rios aos grupos
Aqui Ć© bem simples, basta usar o recurso de anexaĆ§Ć£o de usuĆ”rios aos grupos com o nome do grupo e o nome do usuĆ”rio.
resource "aws_iam_group_membership" "group_membership" { for_each = { for group in var.user_groups : group.name => group } name = each.value.name users = [for user in var.users : user.name if contains(user.groups_ids, each.value.id)] group = aws_iam_group.group[each.value.name].name}