Il Cloud Connector è uno strumento che permette di connettersi a uno o più database remoti da applicazioni sviluppate con Instant Developer Cloud.
Normalmente sono le applicazioni che si connettono al database ed è necessario aprire almeno una porta verso il mondo esterno sul database server.
Con il Cloud Connector installato sul server dove risiede il database, o in un server della stessa rete locale, è il database stesso ad aprire una connessione verso l'applicazione. Questo fa si che non occorra aprire specifiche porte verso l'esterno aumentando di molto la sicurezza.
Per installare il Cloud Connector occorre eseguire le operazioni di seguito descritte:
public_html\config_example.json
in config.json
e aprirlo con un editor di testo per impostare i parametri di configurazione.public_html
ed eseguire il seguente comando per installare i node_modules:$ npm update
public_html\plugins\activedirectory
ed eseguire nuovamente l’installazione dei relativi node_modules:$ npm update
node cloudServer.js
per far partire il connettore.Per garantire una elevata gestione della sicurezza occorre prestare attenzione alla configurazione dei permessi concessi all'utente di accesso al database e di quelli concessi all'utente che avvia il servizio Cloud connector.
Per l'utente di database si consiglia di concedere solamente i privilegi di lettura, inserimento, aggiornamento e cancellazione dei dati sulle tabelle.
Di seguito una serie di buone pratiche per le autorizzazioni dell'utente di accesso al database:
Per concedere i privilegi necessari a un utente che deve eseguire un processo con PM2 su Node.js, dobbiamo considerare sia i permessi a livello di sistema operativo che quelli specifici per PM2 e Node.js.
Ecco una guida su come gestire questi privilegi:
La configurazione del Cloud Connector avviene mediante il file config.json che si trova nella directory public_html
:
In questa sezione è riportata anche l'impostazione della chiave privata di criptaggio delle password utilizzate nei singoli datamodels
che è recuperata da una variabile di ambiente del server nel quale è installato il Cloud Connector.
L'impostazione di default nel file di esempio della configurazione (config_example.json) è questa "passwordPrivateKey": "%CC_KEY%",
La variabile %CC_KEY%
deve essere impostata da comando di sistema operativo; può anche essere utilizzato un nome diverso da quello indicato.
È importante scegliere una chiave privata robusta e non predicibile, generata in modo sicuro. Per approfondimenti: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html#key-generation.
Se non viene definita questa variabile di ambiente il Cloud Connector utilizza un suo valore di default. Tuttavia si raccomanda di impostare sempre un valore personalizzato per la proprietà passwordPrivateKey
, in quanto l'utilizzo del valore di default rende i dati cifrati più vulnerabili a potenziali attacchi.
Le password vengono criptate al primo avvio del Cloud Connector quindi occorre settare la variabile di ambiente %CC_KEY%
prima di avviarlo.
connectionOptions
al file di configurazione del Cloud Connector per indicare al sistema che deve accettare connessioni anche da server con certificati non validi o autofirmati."connectionOptions": { "rejectUnauthorized": false },
remoteServers
vanno indicati i server di Instant Developer Cloud che devono essere contattati dal Cloud Connector, quelli dove risiedono gli applicativi che utilizzeranno il database."remoteServers": [prod1-pro-gamma.instantdevelopercloud.com,prod2-pro-gamma.instantdevelopercloud.com],
remoteUserNames
devono essere indicati indicati gli utenti dell’IDE di Instant Developer Cloud a cui il Cloud Connector può collegarsi."remoteUserNames": ["https://ide1-pro-gamma.instantdevelopercloud.com@paolo-giannelli"],
datamodels
devono essere impostate le informazioni di connessione ai database che si vuole esporre. È possibile elencare più database. Ogni tipo di database (Oracle, Postgres, SQLServer, MySQL) ha parametri di connessione specifici."datamodels": [
{
"name": "nwind-db",
"class": "SQLServer",
"APIKey": "00000000-0000-0000-0000-000000000000",
"connectionOptions": {
"server": "127.0.0.1\\SQLEXPRESS",
"database": "nome-database",
"user": "utente",
"password": "password",
"options": {
"useUTC": false
}
}
}],
fileSystems
devono essere impostate le informazioni delle directory che si desidera condividere."fileSystems": [
{
"name": "myFS1",
"path": "C:\\Data\\Image",
"permissions": "rw",
"whiteListedOrigins": [],
"APIKey": "00000000-0000-0000-0000-000000000000"
}
]
Questa configurazione indica che la directory indicata in "path"
e condivisa in lettura e scrittura.
Il parametro "whiteListedOrigins"
serve ad indicare una lista di domini verso i quali il Cloud Connector può effettuare richieste http; la lista vuota proibisce le richieste.
plugins
devono essere elencate le classi che sono installate all'interno della directory public_html\plugins
ed utilizzate come plugin.{
"name": "myAD",
"class": "ActiveDirectory",
"APIKey": "00000000-0000-0000-0000-000000000000",
"config": {
"url": "ldapServerUrl",
"baseDN": "dc=example,dc=com",
"username": "username",
"password": "password"
}
}
Attualmente Cloud Connector non supporta il caching_sha2_password
come metodo di autenticazione su MySQL 8. Si consiglia invece di utilizzare il metodo di autenticazione legacy
.
Nel file config.json tutte le APIKey
sono impostate per default al valore 00000000-0000-0000-0000-000000000000
ed è importante modificarle con un guid effettivo in quanto il Cloud Connector se trova il valore impostato a tutti zero trasmette una stringa vuota e quindi la connessione non funziona nemmeno se nel database su di un porgetto nell'ide di Instant Developer Cloud impostato il valore 00000000-0000-0000-0000-000000000000
nella proprietà APIKey.
In questo caso nEl log del Cloud Connector viene inserito il messaggio The APIKey of dataModel '${this.name}' is set to the default value and will be ignored
.
Per installare il connettore cloud come servizio è possibile utilizzare pm2. PM2 è un gestore del processo di produzione per le applicazioni Node.js con un bilanciatore del carico integrato. Consente di mantenere in vita le applicazioni per sempre, di ricaricarle senza tempi di inattività e di facilitare le comuni attività di amministrazione del sistema.
Per eseguire il Cloud Connector con pm2 occorre utilizzare questo comando:
$ pm2 start cloudServer.js
Per salvare le informazioni sul processo da eseguire al riavvio, eseguire questo comando:
$ pm2 save
Per eseguire pm2 come servizio la procedura è diversa a seconda del tipo di server:
Per consentire la configurazione da remoto (riavvio, modifica di config.js, aggiornamento del software) occorre impostare il parametro remoteConfigurationKey
nel config.json.
Per maggiori informazioni sul Cloud Connector è possibile leggere questa guida.