Playbook per configurare SP (NGINX+Shibboleth+Letsencrypt)

Ciao a tutti!
Per facilitare il più possibile l’integrazione con SPID, ho iniziato a scrivere un playbook per Ansible che configura automaticamente queste funzionalità:

  • Reverse proxy HTTP basato su NGINX e Let’s Encrypt
  • Reverse proxy Shibboleth configurato per esporre un server applicativo di backend e autenticare via SPID una parte dell’applicazione

Trovate il progetto qui: https://github.com/italia/spid-sp-playbook

Sto ancora finalizzando insieme ad Umberto la configurazione per Shibboleth ma al 99% dovrebbe essere tutto a posto!

Come sempre, contributi e feedback sono benvenuti!

3 Mi Piace

Prima cosa: ottima idea quella di utilizzare ansible come spacciatore di configurazioni e complimenti per il progetto.

L’unico dubbio è sull’accoppiata ansible/docker chiaramente facilita il deploy ma non sarebbe meglio rimanere astratti da uno strumento o l’altro?

Mi aspetterei che ansible abbia i ruoli per l’installazione fisica delle risorse, e le varie configurazioni come variabili.

O di contro un ecosistema docker o un solo container che contenga tutto, sono solo idee non so se possano trovare riscontro nel tuo progetto.

Ultima domanda: hai valutato di utilizzare Caddy? fornisce HTTPS automatico sempre su Lets’Encrypt potrebbe rimpiazzare NGINX nello stack.

In ogni caso appena ho un pò di tempo ti apro un PR.

Comunque complimenti per il progetto!

1 Mi Piace

Ciao Mattia!

Siamo sicuramente allineati sulla direzione, tant’è che ho già aperto una issue per integrare i due docker di frontend in uno solo: https://github.com/italia/spid-sp-playbook/issues/2

L’approccio che ho usato ora è stato quello di minimizzare nuovo codice per arrivare velocemente ad una soluzione funzionante.

Sono convinto anch’io che la soluzione debba essere la più flessibile possibile e non debba forzare l’uso di una particolare tecnologia (es Docker).

Quello che pensavo di fare successivamente è di scrivere un playbook docker che configuri tutto il necessario per avere Shibboleth+Letsencrypt e poi usare un tool tipo Packer per generare un immagine Docker. Per cui chi vuole una cosa più custom potrà usare il playbook, mentre chi preferisce una soluzione più plug&play potrà installare il container Docker.

Attendo la tua PR!

A presto :slight_smile:

federico

Ciao Andrea,

sarebbe utile avere sia il playbook che il container docker pre-fatto cosi’ copriamo due use-case (e tool come Packer ti permettono di non fare il lavoro due volte).

Conosco il modulo Ansible per letsencrypt, la scomodità è che i certificati letsencrypt hanno validità di 60 giorni, per cui ogni 2 mesi dovresti lanciare un playbook che ti fa il rinnovo.

Questo meccanismo di autorinnovo è stato implementato anche in svariati script, tra cui certbot che è lanciato da un cron che gira nel container nginx-letsencrypt, per cui potremmo riusare tranquillamente quella soluzione.

Ciao a tutti, vi aggiorno che con Federico abbiamo impostato e siamo in fase di rilascio dello Shibboleth già pronto per essere utilizzato sulla federazione SPID. Ancora qualche test e ci siamo!

Stay tuned!

2 Mi Piace

Ecco la PR con la configurazione funzionante, a breve la mergiamo nel master, feedback ben accetti:

2 Mi Piace

Posto qui il succo di una discussione avviata su Facebook, è decisamente il luogo più adatto:

"mi pare di capire, e mi sembra ragionevole, che l’interesse sia più nel migliorare e rendere più generico l’attuale setup via Ansible, piuttosto che riprodurre la stessa cosa con Puppet.
Se così il mio supporto potrebbe essere meno significativo e sicuramente meno informato.

Come suggerito da alcuni nella discussione e da te stesso qui sopra, ha senso disaccoppiare la parte di configurazione da quella di provisioning (docker vm o whatever) in modo da rendere la prima usabile da chiunque nei propri contesti e la seconda utile per testare e usare in tempi brevi l’applicazione.
La prima cosa che mi è venuta in mente, per questa seconda parte, è di aggiungerci un Vagrantifile per provisionare (su vm virtualbox) quello che è definito nel playbook, se poi devi buildare una immagine docker, ben venga farlo via packer o anche via ansible, ma come opzione separata."

A questo aggiungerei, che la medesima cosa (fornire il codice per la configurazione separata da implementazione per rapida PoC) la potrei fare con Puppet, basandomi su PSICK (https://github.com/example42/psick) il che permetterebbe di avere della code base Puppet (per provisionare Shibboleth, le integrazioni per SPID, e magari qualche stack applicativo classico, per questo use case) che può essere usata sia per configurare la soluzione su una infrastruttura reale, con Puppet, che testarlo rapidamente via Vagrant (o Docker) in locale.

In teoria sarebbe bello poter mettere a disposizione un control-repo Puppet (di fatto un unico repo git da cui è possibile gestire e magari provisionare l’intera infrastruttura IT) full-featured già orientato a use case comuni (ce ne sono?) di configuration management nella PA (ad esempio con security hardening di base per diversi OS, profili per stack applicativi e applicazioni (vedi SPID) ecc )

Il vantaggio di partire da PSICK (a parte il fatto che mi renderebbe le cose molto più comode e rapide) è che si parte da una struttura Puppet impostata secondo best practice, che permette, se si vuole, di fare le customizzazioni che si vogliono sfruttando, al contempo, le integrazioni esistenti (test in locale del codice su Puppet, CI pipeline, tools di supporto per la gestione del ciclo di vita del codice Puppet (da sviluppo a deploy) ecc).

Insomma, il punto di questo post, diventato clamorosamente OT è:

  • se credete utile fare cose con Puppet, sia per quanto riguarda SPID che per altri casi, io ci sono e posso dare un contributo “informato”. Al riguardo suggerirei di partire da una implementazione che potenzialmente può avere maggiore respiro, ma che può partire con riprodurre quanto viene fatto qui con ansible (con extra points dovuto al supporto multi OS, la separazione fra le componenti utili per il POC docker e quelle per il cfgmmgt in se) .
  • su Ansible e su questo caso specifico ho visto che l’integrazione con Docker è abbastanza spinta e mi risulta complicato dare un contributo sostanziale per disaccoppiare le cose senza ribaltare tutto :smiley: Se lo scopo è mettere a disposizione un POC dove testare rapidamente l’implementazione, (e al contempo fornire un playbook ansible per riprodurla altrove), io andrei di Packer e Vagrant
1 Mi Piace

Penso che sia giusto che Developers Italia sia per quanto possibile agnostica alle tecnologie. Se tu hai competenze con uno stack di strumenti diversi, come mi sembra di capire, a noi fa tantissimo piacere se cominci uno sviluppo parallelo. Se hai cicli da dedicare, ti creiamo i repo su GitHub all’istante :slight_smile:

Voglia di dare una mano tanta, tempo poco.
Penso che l’ideale sarebbe fare un fork di https://github.com/example42/psick e chiamarlo control-repo (o puppet-control-repo) e su questo iniziare ad implementare stack di esempio per spid, in modo da replicare con Puppet quanto viene fatto qui con Ansible.
Poi, essendo un control repo Puppet, fatto e finito, può essere utilizzato per molto altro, per cui magari in futuro si possono aggiungere baseline di configurazione hardnenizzate per diversi OS (per’altro già in parte disponibile), stack applicativi comuni ecc.

Grazie della collaborazione @alvagante … il programma è quello di rilasciare componenti utili e utilizzabili e che possano semplificare sempre di più l’implementazione di SPID. Grazie per la segnalazione e come diceva Giovanni è utile la collaborazione di tutti quindi quando puoi attendiamo la tua :slight_smile: .

Caro Federico,

Raccomando caldamente certbot, tool eccezionale e che spero le PA inizino ad adottare.

Non dovresti però usare packer per generare immagini docker. Ti consiglio di creare normali dockerfile che contengano le istruzioni di build del software, e poi passare eventuali file di configurazioni come volumi di sola lettura.

Ciao @dfermiumlabs,
confermo certbot e lo utilizziamo su tutte le applicazioni/siti che stiamo mettendo su.

Grazie per il contributo e ti invito, se vuoi, a contribuire con una pull al repository in oggetto.

Umberto Rosini
Agenzia per l’Italia Digitale