Cedar em uma frase
Cedar é a policy language open-source da AWS (lançada em maio de 2023, Apache 2.0), implementada em Rust, com type system explícito e partes formalmente verificadas. É o motor por trás do serviço Amazon Verified Permissions. Foi desenhado para preencher um espaço específico: tipagem forte e analisabilidade estática — algo que Rego (dinâmico) e SpiceDB (data-centric) não oferecem do mesmo jeito.
Cedar não é "mais um" — é a primeira policy language mainstream com análise estática rigorosa: você pode provar que duas policies são equivalentes, encontrar policies inalcançáveis, verificar "esta mudança nega acesso a alguém que tinha antes?" via diferencial. Para fintech/govcloud/saúde, isso é o que torna Cedar relevante.
A sintaxe: legibilidade > densidade
// Permit explícito com scope e condições
permit (
principal in Group::"engineering",
action in [Action::"viewDocument", Action::"editDocument"],
resource in Folder::"engineering-docs"
)
when {
resource.owner == principal ||
principal in resource.collaborators
}
unless {
resource.classification == "secret" &&
!context.mfa_authenticated
};
// Forbid sempre vence — guard absoluto
forbid (
principal,
action,
resource
)
when {
context.ip_address.isInRange("0.0.0.0/0") &&
resource.classification in ["secret", "top-secret"]
};
// Policy template (parametrizada)
permit (
principal == ?principal,
action in [Action::"viewDocument"],
resource == ?resource
);Schema: o que distingue Cedar
{
"FFV": {
"entityTypes": {
"User": {
"memberOfTypes": ["Group", "Organization"],
"shape": {
"type": "Record",
"attributes": {
"department": { "type": "String" },
"level": { "type": "Long" }
}
}
},
"Group": { "memberOfTypes": ["Organization"] },
"Organization": {},
"Document": {
"memberOfTypes": ["Folder"],
"shape": {
"type": "Record",
"attributes": {
"owner": { "type": "Entity", "name": "User" },
"collaborators": { "type": "Set", "element": { "type": "Entity", "name": "User" } },
"classification": { "type": "String" }
}
}
}
},
"actions": {
"viewDocument": {
"appliesTo": {
"principalTypes": ["User"],
"resourceTypes": ["Document"],
"context": {
"type": "Record",
"attributes": {
"mfa_authenticated": { "type": "Boolean" },
"ip_address": { "type": "String" }
}
}
}
}
}
}
}O compiler Cedar valida cada policy contra esse schema: existe Action::"viewDocument"? Aceita principal do tipo Group? resource.classification é String? Erros saem antes de chegar em produção — ao contrário de Rego, onde campo inexistente vira e a policy passa silenciosamente.
Fluxo de avaliação
use cedar_policy::{Authorizer, Context, Entities, PolicySet, Request, Schema};
let schema: Schema = serde_json::from_str(SCHEMA_JSON)?.try_into()?;
let policies: PolicySet = POLICIES_TEXT.parse()?;
let entities: Entities = Entities::from_json_str(ENTITIES_JSON, Some(&schema))?;
let request = Request::new(
Some(r#"User::"alice""#.parse()?),
Some(r#"Action::"viewDocument""#.parse()?),
Some(r#"Document::"report-q1""#.parse()?),
Context::from_json_value(json!({
"mfa_authenticated": true,
"ip_address": "10.0.0.5"
}), Some((&schema, &"Action::\"viewDocument\"".parse()?)))?,
Some(&schema),
)?;
let authorizer = Authorizer::new();
let response = authorizer.is_authorized(&request, &policies, &entities);
match response.decision() {
Decision::Allow => println!("granted"),
Decision::Deny => println!("denied: {:?}", response.diagnostics().reason()),
}Amazon Verified Permissions (AVP): Cedar managed
AVP cobra por authorization request. Para SaaS B2B on AWS, é a maneira mais rápida de adicionar autorização fine-grained sem operar engine. Limitações: latência ~10-30ms (call AWS), tier máximo por policy store ~10k policies, sem multi-region active-active (replicação assíncrona).
Cedar vs Rego vs SpiceDB/OpenFGA
| Aspecto | Cedar | Rego (OPA) | SpiceDB / OpenFGA |
|---|---|---|---|
| Paradigma | Policy-as-code, tipado | Policy-as-code, dinâmico | Policy-as-data (tuplas) |
| Schema obrigatório | ✓ entities + actions | ✗ (qualquer JSON) | ✓ schema language |
| Type safety | Forte (compile-time) | Fraca (runtime) | Forte (schema) |
| Análise estática | Excelente (verified) | Boa (opa parse) | Boa (schema validation) |
| Reverse query | Limitada | Via partial eval | Nativa (LookupSubjects) |
| Linguagem | Rust | Go | Go |
| Managed cloud | AVP (AWS) | Styra DAS | Authzed / Auth0 FGA |
| Casos de uso fortes | SaaS, fintech, compliance | Infra/K8s, condições, ABAC | Sharing per-resource |
| Maturidade (2026) | Crescendo rápido | CNCF Graduated, padrão | Maduro, adoção alta |
Onde Cedar vence
📋 SaaS B2B fintech: compliance audit exige provar que policies estão corretas + multi-tenant + on AWS
Formal verification + type safety + schema validation + audit nativo no CloudTrail. Auditores aceitam policies analisáveis estaticamente. Managed AVP reduz ops. Integra com Cognito sem ginástica.
Alt: OPA —
Alt: SpiceDB —
Alt: IAM puro —
- Compliance regulada: govcloud, fintech, healthcare — auditor exige policies provadamente corretas.
- Time pequeno, app on AWS: AVP managed elimina ops.
- Stack Rust ou edge: Cedar é a única engine Rust mainstream — fácil embedar em Lambda@Edge, Cloudflare Workers (via WASM).
- Análise estática crítica: cedar-policy-cli faz validação completa antes de deploy; perfeita para CI.
Anti-patterns Cedar
- Schema-less "por enquanto": você perde 70% do valor do Cedar. Defina o schema desde o dia zero.
- Misturar regras de negócio em policies: policies devem expressar acesso, não lógica de domínio. Cálculo de preço não vai em Cedar.
- Forbid usado como "remove permission": forbid é guard absoluto. Para revogação granular, remova entity hierarchy (User out of Group) — não escreva forbid específico.
- Templates para tudo: templates instanciados crescem rápido; para sharing per-doc com 100k+ docs, considere ReBAC engine ao lado.
Resumo executivo
- Cedar = AWS, 2023, open-source Rust. Policy language tipada com análise estática rigorosa.
- Schema obrigatório (entities + actions) → policies validadas em compile-time.
- Sintaxe SQL-like:
- Cobre RBAC + ABAC + parte de ReBAC via entity hierarchy (parents transitivos).
- Amazon Verified Permissions = Cedar managed. Integra Cognito; pricing por authorization request.
- Formal verification (Lean/Dafny) — diferencial para compliance regulada.
- Vence em: fintech/govcloud, time pequeno on AWS, stack Rust/edge. Complementa: ReBAC engine para sharing per-resource em massa.