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.

1.jpg

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

2.png

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.

3.png

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.

4.png

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

5.png

Access Control Architecture con architettura serverless in AWS

6.png

PAP (Policy Administration Point)

7.png

PDP (Policy Decision Point)

8.png

PEP(Policy Enforcement Point)

9.png

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.