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}