Avançado

ABAC com tags

Lição 15 · Módulo 4 — Permissões em escala

RBAC vs ABAC

Até agora você viu RBAC (Role-Based Access Control): defino uma role DevS3 que permite X no bucket Y. Para cada combinação de acesso, uma role.

ABAC (Attribute-Based Access Control) substitui N roles por uma única policy que compara atributos (tags) do principal com atributos do recurso. Escala muito melhor em ambientes grandes.

O padrão ABAC

Ideia: taggear o principal com atributos (ex.: Team=alpha, CostCenter=12345) e taggear os recursos com os mesmos atributos. A policy compara os dois.

JSON
1
2
3
4
5
6
7
8
9
10
{
"Effect": "Allow",
"Action": ["ec2:StartInstances","ec2:StopInstances","ec2:RebootInstances"],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Team": "${aws:PrincipalTag/Team}"
}
}
}

Isso significa: "Quem faz a request pode operar a instância, mas só se a tag Team do recurso for igual à tag Team do principal".

Uma única policy serve para N times. Quando um time novo é criado, basta taggear as pessoas e os recursos. Nenhuma policy nova precisa ser escrita.

Onde as tags vivem

  • No principal — tags do IAM User ou role, ou atributos do SAML/OIDC assertion (sts:TagSession).
  • No recurso — tags aplicadas ao recurso no momento da criação ou depois.
  • No contexto da request — tags sendo passadas (aws:RequestTag/<key>), usadas para controlar criação de recursos com tags específicas.

Condition keys de ABAC

  • aws:PrincipalTag/<key> — tag da identidade que faz a request.
  • aws:ResourceTag/<key> — tag do recurso alvo.
  • aws:RequestTag/<key> — tag sendo aplicada nesta request (ex.: criar EC2 com Team=alpha).
  • aws:TagKeys — lista de keys de tag presentes na request (útil para exigir determinada tag).

Passando tags em sessão federada

Em federação (SAML/OIDC), você mapeia atributos do IdP para tags da sessão STS via session tags. Assim, o time Team=alpha do Entra ID automaticamente vira tag Team=alpha no principal STS — sem nenhum passo manual por dev.

Armadilhas comuns

  • Recursos sem tag — o aws:ResourceTag/Team retorna vazio e a condition falha. Use SCPs que obriguem tagging no CreateResource.
  • Permitir iam:TagUser sem restrição — o próprio user pode alterar sua tag e escalar privilégios. Sempre restrinja com aws:PrincipalTag ou negue iam:TagRole/iam:TagUser.
  • Muitas dimensões — ABAC funciona com 2–3 dimensões (Team, Env, Project). Com 10, vira labirinto.

Teste rápido

Sua empresa tem 40 times, cada um com 10 desenvolvedores. Cada time tem seu conjunto de instâncias EC2. Qual abordagem escala melhor?

Resumo

ABAC é a forma mais escalável de gestão de permissões em ambientes grandes. Exige disciplina de tagging (SCPs que forçam tags obrigatórias) e cuidado com auto-modificação de tags. Quando bem feito, reduz drasticamente o número de policies.

Referência Well-Architected

Esta lição está alinhada com a boa prática Employ user groups and attributes do Well-Architected Framework.

Referências

Terminou esta lição?

Seu progresso fica salvo apenas neste navegador.