Matteo Granzotto - 24 Ottobre, 2025
Gestisci le tue policy con Open Policy Agent (OPA)
La gestione delle policy di autorizzazione può diventare complessa in architetture moderne basate su microservizi, API Gateway e sistemi serverless. Open Policy Agent (OPA) è un motore open source che permette di definire, centralizzare e applicare regole di accesso in modo sicuro e consistente, separando la logica di autorizzazione dal codice applicativo.
Cos’è Open Policy Agent (OPA)
OPA è un motore di policy-as-code che valuta regole in tempo reale basandosi su dati e input runtime. Può essere integrato sia come servizio standalone sia come sidecar, rendendo semplice l’adozione in microservizi, Kubernetes, API Gateway e architetture serverless.

Vantaggi principali:
- Consistenza: le stesse regole applicate in tutti i microservizi, pipeline CI/CD e ambienti.
- Centralizzazione: gestione semplificata delle policy in un unico punto.
- Flessibilità: grazie a Rego, linguaggio dichiarativo potente basato su Datalog.
- Performance: valutazione delle policy in millisecondi, adatta anche ad applicazioni ad alta frequenza di richieste.
Tra gli utilizzatori principali ci sono Netflix, Apple e Cloudflare.
Risorse utili:
Architettura tipo

Rego: il linguaggio per le policy OPA
Rego è il linguaggio dichiarativo di OPA, basato su Datalog. Permette di definire regole, insiemi e funzioni per modellare la logica di autorizzazione in modo chiaro e leggibile.

Esempio di policy Rego
Consentire l’accesso alla rotta HTTP /admin solo agli utenti con ruolo admin:
// policy.rego
package api.auth
default allow := false
allow if {
input.method == "GET"
input.path == ["admin"]
input.user.role == "admin"
}
// input.json
{
"method": "GET",
"path": ["admin"],
"user": {
"name": "alice",
"role": "admin"
}
}
Valutazione della policy con OPA:
opa eval --input input.json --data policy.rego "data.api.auth.allow"
Restituirà TRUE se il ruolo è admin, altrimenti FALSE.
Casi d’uso delle policy OPA
Le policy possono essere applicate per:
- Controllo accessi (ACL): True/False per Lambda Authorizer o API Gateway.
- Gestione funzionalità UI: mostrare o nascondere elementi in base al ruolo.
- Filtraggio dati: trasformazioni e query SQL dinamiche basate sui dati dell’utente.

Architettura di controllo accessi con OPA
L’architettura tipica include:
- PEP (Policy Enforcement Point): intercetta le richieste e invia richieste al PDP.
- PDP (Policy Decision Point): OPA valuta le richieste rispetto alle policy e restituisce decisioni.
- PIP (Policy Information Point): fornisce dati esterni al PDP (es. database utenti).
- PAP (Policy Administration Point): gestisce creazione, aggiornamento e rimozione delle policy.
Access Control Architecture

Access Control Architecture con architettura serverless in AWS

PAP (Policy Administration Point)

PDP (Policy Decision Point)

PEP(Policy Enforcement Point)

Come si salvano le policy
Le policy possono essere dei singoli file .rego e possono essere caricate direttamente nell’agente OPA con una PUT:
curl -X PUT --data-binary @policy.rego localhost:8181/v1/policies/my_policy
Oppure OPA permette di caricare le policy in modo più strutturato con dei bundles (dei file .tar.gz). Archivi strutturati contenenti policy e dati opzionali:
bundle.tar.gz
├── data.json
├── .manifest
└── policies
└── policy.rego
I bundle possono essere scaricati all’avvio di OPA e aggiornati periodicamente tramite polling da servizi come Amazon S3, Google Cloud Storage, Azure Blob Storage, Nginx o OCI Registry.
services:
my-service:
url: https://my-bundle-server.com
bundles:
my-bundle:
service: my-service
resource: /bundles/my-bundle.tar.gz
OPA in AWS Lambda con Docker
OPA può essere integrato in container Docker, consentendo l’esecuzione in ambienti serverless. Un server Fastify all’interno del container può gestire richieste di autorizzazione dinamiche.
Alternative a OPA
Policy engine open source: AWS Cedar, Google Zanzibar.
SaaS per gestione policy: Permit.io, Styra.
Conclusione
Open Policy Agent è una soluzione scalabile, centralizzata e performante per la gestione delle policy di autorizzazione in microservizi, Kubernetes e architetture serverless. La combinazione OPA + Rego garantisce coerenza, sicurezza e flessibilità, semplificando la manutenzione delle regole di accesso e riducendo il rischio di errori nel codice applicativo.