
Em um ecossistema de microsserviços tão dinâmico e complexo como o do iFood, garantir que as pessoas e os sistemas tenham o acesso adequado aos recursos corretos é um desafio constante. Historicamente, na maioria dos casos, a lógica de autorização é implementada de forma descentralizada e inconsistente dentro de cada aplicação, tornando-se uma fonte de vulnerabilidades de segurança, débitos técnicos e dificuldades de auditoria. Para endereçar esses desafios, o time de Tecnologia do iFood desenvolveu o Yggdrasil, nossa plataforma de authorization-as-a-service.

O Yggdrasil centraliza e padroniza o controle de acesso, tornando a autorização mais escalável, auditável e reutilizável em toda a companhia. Inspirado no AWS Verified Permissions, um serviço de autorização totalmente gerenciado que permite armazenar, gerenciar e avaliar permissões de acesso granulares, o Yggdrasil utiliza a mesma linguagem de política open source, o AWS Cedar, para definir políticas. Porém, o Yggdrasil oferece integração nativa com o ecossistema do iFood, dando suporte a diversos provedores de identidade, auditoria e observabilidade.
Neste artigo, vamos explorar os conceitos por trás do Yggdrasil, desde o modelo de controle de acesso baseado em atributos, conhecido como ABAC, até a escolha por uma arquitetura stateless com Cedar, mas principalmente como essa plataforma está transformando a maneira como lidamos com autorização no iFood.
É comum que muitos sistemas de autorização utilizem o modelo RBAC (Role-Based Access Control), na qual as permissões são concedidas com base em papéis predefinidos, como “administrador” ou “visualizador”. Embora simples de entender, o RBAC pode se tornar rígido e levar a uma explosão de papéis à medida que as regras de negócio se tornam mais complexas.
O Yggdrasil adota uma abordagem mais flexível e granular: o ABAC (Attribute-Based Access Control). Em vez de papéis estáticos, o ABAC toma decisões de acesso com base em atributos. Esses atributos podem ser associados a qualquer elemento da requisição:
Essa flexibilidade permite a criação de políticas de acesso muito mais ricas e dinâmicas, que refletem com mais fidelidade as regras de negócio. Por exemplo, uma política ABAC poderia expressar uma regra como: “Permitir que gerentes do time de finanças aprovem despesas acima de R$5.000, somente durante o horário comercial”.
Uma das decisões arquiteturais mais importantes ao desenhar uma plataforma de autorização é optar por uma abordagem stateful (com estado) ou stateless (sem estado). A principal diferença entre elas é origem dos atributos das entidades (perfis do usuário, tags do recurso, dados do ambiente): no modelo stateful, a maioria desses atributos é armazenado pela plataforma de autorização, enquanto no modelo stateless essa responsabilidade é da aplicação cliente, que envia os atributos na chamada feita para o Yggdrasil.
Soluções stateful, como o Zanzibar do Google, mantém um banco de dados massivo e centralizado com todos os relacionamentos de acesso (ex: “usuário X é membro do grupo Y”) e diversos outros atributos. Essa abordagem é poderosa, mas introduz uma complexidade operacional significativa, exigindo ingestão de dados assíncrona, manutenção de ETLs e um potencial ponto único de falha.
O Yggdrasil optou por uma abordagem stateless com o AWS Cedar. O Cedar é uma linguagem e um motor de políticas de autorização open source que não depende de um estado centralizado. Em vez disso, a aplicação que solicita a autorização envia todos os dados relevantes, ou seja, as entidades e seus atributos, como parte da requisição. O motor do Cedar então avalia as políticas com base nesses dados para tomar uma decisão.

Essa arquitetura nos oferece um modelo operacional muito mais simples e resiliente, perfeitamente alinhado com a natureza distribuída dos nossos microsserviços.
A linguagem Cedar é projetada para ser segura, rápida e fácil de aprender. Uma política em Cedar possui três itens principais: o efeito (permit ou forbid), o escopo (principal, ação e recurso) e as condições (cláusulas when e unless).
Vamos imaginar uma política para um sistema de gerenciamento de documentos. A regra é: “Permitir que qualquer usuário que pertença ao grupo ‘Auditores’ possa visualizar um documento, desde que o documento não seja privado.”
Em Cedar, essa política seria escrita da seguinte forma:
@id("auditor_leitura")
@cacheTTL("20m")
permit (
principal in Group::"Auditores",
action == Action::"visualizar",
resource
)
when { !resource.private };
O Cedar opera com um princípio de deny-by-default. Se nenhuma política permit corresponder explicitamente à requisição, o acesso é negado. Isso torna o sistema inerentemente mais seguro e previsível.
Uma Policy Store é, essencialmente, um contêiner que agrupa um conjunto de políticas e configurações associadas a um serviço ou domínio específico. Cada requisição de autorização ao Yggdrasil deve especificar qual policy store utilizar, e não qual política.
Essa abordagem traz duas vantagens cruciais:
Para atender aos requisitos de alta performance e confiabilidade exigidos por um ambiente como o do iFood, o Yggdrasil foi projetado com uma arquitetura distribuída e resiliente. Em vez de um serviço centralizado que poderia se tornar um gargalo ou um ponto único de falha, o motor de autorização do Yggdrasil é distribuído e executado próximo às aplicações que o consomem.

Detalhes da arquitetura do Yggdrasil
Ao adotar o Cedar e uma arquitetura de serviço centralizado, o Yggdrasil traz benefícios tangíveis em três áreas principais:
Escalabilidade
Auditabilidade
Reutilização
O Yggdrasil representa um passo fundamental na maturidade da arquitetura de segurança do iFood. Ao externalizar e centralizar a autorização, estamos não apenas mitigando riscos de segurança, mas também empoderando nossos times de desenvolvimento para que possam focar no que fazem de melhor: criar produtos incríveis para nossos clientes, parceiros e entregadores.
A jornada está apenas começando. Temos planos para evoluir o Yggdrasil, adicionando mais fontes de identidade, refinando nossas ferramentas de desenvolvimento e explorando novos padrões de políticas. Acreditamos que, ao tratar a autorização como um serviço de primeira classe, estamos construindo uma base mais segura, escalável e resiliente para o futuro do iFood.
We are always looking for passionate developers, designers and data scientists to help us revolutionize the food delivery experience. Join iFood Tech and be part of building the future of food technology.
Discover our CareersEach article is the result of the vision and expertise of our authors. See who contributes to our blog: