OpenMED - Identity e Access Management

Ciao a tutti!

Come anticipato ieri durante l’incontro, stiamo testando Apache Keycloak per la gestione utente e per l’accesso e il controllo delle risorse.

Attualmente stiamo lavorando sui seguenti flussi:

  1. Client in React --> login su keycloak --> ricezione del token di autenticazione

  2. Client React autenticato --> API Gateway --> Keycloak --> API Gateway --> gestone chiamata API --> client React

Appena possibile pubblicheremo il client in modo che sia disponibile per tutti.

Lato backend, come sapete, stiamo utilizzando openwhisk: sul repository trovate le action che stiamo testando per il PoC e la documentazione.

Per i test ci siamo appoggiati sulla piattaforma di IBMCloud che mette a disposizione un’implementazione di openwhisk, ma vorremmo produrre un docker compose per la gestione di tutto l’ambiente (se qualcuno ci vuole dare una mano…:stuck_out_tongue: )

Prima di concentrarci sul docker, però, volevamo provare a chiudere i flussi di cui sopra testando anche solo con installazione in locale.

Il primo flusso è in cantiere, mentre sul secondo ci sono ancora diverse questioni aperte:

  • @massimo.scattarella ci puoi supportare con Keycloak? In particolare sulla parte di autenticazione delle API
  • @msciab ci puoi dare due dritte su come funziona l’API Gateway di OpenWhisk? Sembra essere la strada ideale per l’integrazione con Keycloak

Cosa ne pensate dei flussi?

1 Mi Piace

se vuoi una installazione di openwhisk locale non ti conviene il docker-compose ma usa l’helm chart che funziona con il kubernetes locale di docker desktop per windows e mac e con kind su linux; comunque per ‘sviluppo’ di alcune componenti stiamo già facendo un docker compose che usa l’openwhisk standalone che pero’ è una versione molto ridotta del full oepnwhisk (niente api gateway, kafka couchdb etc). l’apingatewaty è un nginx che mappa definizioni openapi (swagger) su azioni, e si hai ragione si dovrebbe poter adattare per inserire keycloack. Ci guardo.

Si va bene appena condividi il client mandami il link del repo e provo a darvi una mano. Ma voi avete la pagina di login pronta e vi volete autenticare su keycloak con api oppure volete un redirect su keycloak dove l’utente fa login e ti torna accessToken?

stiamo lavorando sul redirect su keycloak, quindi direi la seconda che hai detto :smiley: : come dicevo lato client in realtà non abbiamo grandi problemi, stiamo usando questa libreria che semplifica notevolmente il lavoro.

Più che altro è la parte di autenticazione delle action che ci sta rallentando e su cui avremmo bisogno di una mano, mi riferisco al flusso 2:

Client React autenticato --> API Gateway --> Keycloak --> API Gateway --> gestone chiamata API --> client React

quindi quello che parte con il client autenticato…

Hai una guida che mi fa tirare su gli ambienti minimi con docker ? Così magari iniziò a provare a capire il giro :stuck_out_tongue_winking_eye:

Se vuoi capire “il giro” scaricato io-sdk e fai iosdk init (accetta tutti i default) e io-sdk start -v

L’ output sono tutti i comandi che usa per lanciare via docker il tutto.

@pfinocchiaro sta provando a tradurre questo comandi in un docker-compose per rendere più facile da gestire la configurazioen… ovvero non devi cambiare il go per configurare un servizio.

Per OpenMed non hai biosgno di io-sdk, attualmente non lo stiamo usando. Stiamo usando IBMCloud (è un’implementazione di openwhisk già pronta, quindi non ci dovrebbero essere grandi problemi di porting).

Qui dovresti trovare delle indicazioni utili.

Basta che ti crei un account IBMCloud, ti scarichi la CLI, deploy sul tuo account le action che trovi sul repository e l’ambiente server è pronto. A quel punto ti installi keycloak come vuoi e provi a configurare l’api gateway di IBMCloud autenticando il tutto via Keycloak.

Ovviamente tutto quello che non è chiaro o che è migliorabile segnalo così lo aggiorniamo :slight_smile:

Non usando io-sdk non so se possa cambiare qualcosa rispetto a quello che stiamo facendo noi, magari puoi testarli entrambi :rofl:

Ciao a tutti
ho letto da qualche parte che Keycloak da solo non è GDPR compliant. In questo tipo di applicazione direi sia fondamentale. Bisognerebbe combinarlo con altro per renderlo compliant, vedi apache Sling.

Penso che ci vogliano altri dettagli sul perche’ non e’ GDPR compliant…

leggi qui ad esempio. Il mio è comunque uno spunto di riflessione, magari mi sbaglio eh. Non sono ne uno esperto GDPR ne keycloak

Ciao,
domanda innocente: perche’ Sling farebbe diventare la soluzione GDPR compliant?

Ciao, sto provando a capirci qualcosa…ne parlano qui molto chiaramente. Nel video c’è un passaggio intorno a meta video in cui ne parlano, ma l’inglese è un po complicato per me

Per quanto ho capito occorre dare all’utente le funzionalità tali per poter in qualsiasi momento vedere i sui dati personali memorizzati, devono essere conservati in maniera cryptata, deve poterli cancellare, deve poter cancellare in autonomia i dati di accesso. Forse quest’ultima cosa con keycloak non si puo fare? Ripeto non ho capito molto

Per quello che mi ricordo del GDPR, devi garantire all’utente di avere le informazioni, poterle cancellare,…
Ma non mi pare ci sia scritto che possa decidere lui, in autonomia, dI farlo, schiacciando un bottone… Specie la cancellazione…
Per il download la cosa è diversa
Poi dipende dalle finalità…

Intanto mi guardo il link (grazie! ) con calma, così magari capisco meglio…

Ciao Antonio,
per quello che ho capito leggendo/scorrendo la presentazione, il tema e’: Sling non e’ sufficente per garantire il GDPR, in Keycloak molte delle funzioni necessarie sono gia’ presenti OOB
Inutile reinventare un’altra volta la ruota: usiamo Keycloak in combinazione con Sling, quando sviluppiamo una applicazione

Sto facendo delle prove, ho trovato una soluzione come keycloak provider di IBM App ID (https://www.ibm.com/cloud/blog/reusing-existing-red-hat-sso-and-keycloak-for-applications-that-run-on-ibm-cloud-with-app-id), questa potrebbe funzionare a patto che la login penso la si faccia sempre con App ID. Oppure volevate proprio evitare App ID? Ma in questo caso non so se si possa mettere keycloak come plugin diretto .

Scusate… onde produrre results… non mi e’ molto chiaro come si procederebbe. Dobbiamo far girare su … IBM Cloud? L’ obiettivo e’ avere tutto che giri su un generico Kubernetes…

@msciab il risultato che a noi interessa avere nel brevissimo periodo è un’installazione funzionante di quello fatto finora (il famoso POC), e ibmcloud è, allo stato attuale, la strada più veloce, perché è un ambiente già pronto, stabile e semplice da usare (nonché gratuito per i nostri attuali scopi). Sappiamo che non sarà la soluzione finale, ma essendo implementato in openwhisk non ci aspettiamo di spendere molto tempo per spostare tutto quando sarà il caso.

Attualmente abbiamo diversi componenti da gestire: un client in react, un keycloak dockerizzato, un database documentale, ibmcloud per le actions, ecc. Per ora ci siamo sistemati con ibmcloud + una macchina su AWS, ma se per la prossima versione ci sono proposte diverse sarebbe fantastico :slight_smile:

Ok quindi visto che ora e’ ibm cloud devi usare il suo App ID? poi a tendere andra’ tutto su k8s e li si rivede il tutto, ovvero fare una API Gateway che va direttamente su keycloak? Non conviene concentrarsi sulla soluzione target come penso propone @msciab?

@massimo.scattarella Ricapitolo la situazione e le idee

A noi serve autenticare le API che attualmente sono su IBMCloud e che sono implementate con OpenWhisk. Da quello che abbiamo visto, per ottenere questo ci serve un API Gateway.

Questo è attualmente IL pezzo mancante, per questo abbiamo chiesto una mano, e perché sicuramente non siamo i massimi esperti di OpenWhisk :smiley: (da qui anche la scelta di IBMCloud)

Siamo quindi aperti a qualsiasi proposta, figurati, ma ci sono ovviamente dei vincoli, perché dobbiamo chiudere la fase 1 e vogliamo cercare di mantenere le deadline che ci siamo dati:

  • l’API Gateway deve essere integrato con le API che attualmente sono su IBMCloud e con Keycloak, che attualmente è su una macchina AWS (nel caso di keycloak, avevamo per esempio iniziato a studiare quella che ci era sembrata l’unica via possibile di integrazione con IBMCloud, cioè via SAML)

  • Se l’API Gateway deve essere installato (e quindi non utilizzato in versione cloud), ovviamente abbiamo la necessità di sapere dove verrà installato, su quale piattaforma / macchina, quanto tempo è necessario e soprattutto i costi

L’obiettivo è, oltre ad avere un piccolo POC funzionante, anche quello di verificare che lo stack abbia senso e che tutte le integrazioni siano adeguate e fattibili.

Quindi: se vogliamo provare su kubernetes va benissimo, ma ci servono le info di cui sopra :slight_smile:
(dobbiamo rendere conto alla FAIS del nostro operato)

Forse ci sono, ho fatto quanto mi avevi consigliato, ovvero mi sono fatto un account ibmCloud e ho creato una function base (hello world per intenderci, nel mio caso guestbook), espongo api fin’ora tutto ok, funziona tutto. (prova: https://c56dfdb1.eu-gb.apigw.appdomain.cloud/guestbook/entries)

Poi per provare a risolvere il tuo problema ho installato (su un raspberry locale, io non ho amazon :frowning: ) un Api Gateway (Kong) e Identity Provider (Keycloak). Quindi ho configurato Kong per usare Keycloak grazie ad un plugin gia’ pronto (kong-oidc, https://luarocks.org/modules/phirvone/kong-oidc) e fa tutto lui per poi dirottare tutto su IbmCloud dove c-e’ la funzione gia’ creata in precedenza. Quindi Api Gateway -> Keycloak -> Api Gateway -> Ibm Cloud Function. Spero di aver capito bene. (prova + https://server.massimoscattarella.com/guestbook/entries), su keycloak metti username: user1, password: pwduser1. Dovresti riuscire a fare tutto e ad arrivare allo stesso risultato di quando hai provato a chiamare direttamente ibmcloud(link sopra).

Te potresti installare kong su amazon ws e avresti risolto con un po di configurazioni. (https://konghq.com/get-started/#install)

Quando hai finito di provare avvisami che spengo il mio potentissimo raspberry. ;-).

Se poi ti torna tutto ti posso dare una mano a configurare il tutto. (Per kong se vuoi una GUI comoda per capirci meglio puoi provare Konga https://github.com/pantsel/konga). Poi se hai bisogno di una mano chiedi pure. Nel frattempo io mi sono divertito.