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.
12345678910
{ "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 comTeam=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/Teamretorna vazio e a condition falha. Use SCPs que obriguem tagging noCreateResource. - Permitir
iam:TagUsersem restrição — o próprio user pode alterar sua tag e escalar privilégios. Sempre restrinja comaws:PrincipalTagou negueiam: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.