🔐 Sicurezza
Introduzione
La sicurezza è una priorità assoluta in Semaphore UI. Che si tratti di automatizzare attività critiche sull'infrastruttura o di gestire l'accesso del team a sistemi sensibili, Semaphore UI è progettato per offrire operazioni robuste e sicure fin da subito. Questa sezione descrive come Semaphore gestisce la sicurezza e cosa considerare quando viene distribuito in produzione.
Autenticazione e autorizzazione
Semaphore supporta meccanismi di autenticazione sicura e di autorizzazione flessibile:
-
Metodi di accesso:
-
Nome utente/password
Metodo predefinito che utilizza le credenziali memorizzate nel database di Semaphore. Le password vengono sottoposte a hash con un algoritmo robusto (bcrypt). -
LDAP
Consente l'integrazione con i servizi di directory aziendali. Supporta il filtraggio di utenti/gruppi e connessioni sicure tramite LDAPS. -
OpenID Connect (OIDC)
Abilita il single sign-on con identity provider come Google, Azure AD o Keycloak. Supporta claim personalizzati e mappatura dei gruppi.
-
-
Autenticazione a due fattori (2FA)
È disponibile la 2FA basata su TOTP, consigliata per tutti gli utenti. Può essere abilitata per singolo utente e supporta codici di recupero opzionali. Vedere le opzioni di configurazioneauth.totp.enabledeauth.totp.allow_recovery. -
Controllo degli accessi basato sui ruoli
È possibile assegnare agli utenti ruoli diversi, come Admin, Maintainer o Viewer, limitando l'accesso in base alle responsabilità. -
Gestione delle sessioni
Le sessioni sono protette con cookie HTTP sicuri. I meccanismi di scadenza della sessione e di logout garantiscono un'esposizione minima.
Segreti e credenziali
La gestione sicura dei segreti è una funzionalità fondamentale:
-
Key store cifrato
Le credenziali e le variabili segrete sono cifrate a riposo con la cifratura AES. -
Isolamento dell'ambiente
I segreti vengono passati ai job solo in fase di esecuzione e non sono esposti direttamente all'ambiente del container. -
Chiavi SSH e token
Gli utenti sono responsabili del caricamento di chiavi SSH e token validi. Questi vengono cifrati e utilizzati solo durante l'esecuzione delle attività. -
Integrazione con HashiCorp Vault (Pro)
I segreti possono essere memorizzati in un'istanza Vault esterna. Scegliere lo storage per ogni singolo segreto durante la creazione o la modifica.
Cifratura dei dati
I dati sensibili sono memorizzati nel database in forma cifrata. È necessario impostare l'opzione di configurazione access_key_encryption nel file di configurazione per abilitare la cifratura delle Access Key. Deve essere generata con il comando:
head -c32 /dev/urandom | base64
Esecuzione di codice / playbook non attendibili
Semaphore esegue playbook e comandi definiti dagli utenti, il che può comportare dei rischi:
-
Isolamento tramite container
Le attività vengono eseguite in container Docker isolati. Questi container non hanno accesso al sistema host. -
Privilegio minimo
I container vengono eseguiti con permessi minimi e possono essere ulteriormente limitati tramite i flag di Docker. -
Esecuzione in chroot
Semaphore può eseguire le attività all'interno di una chroot jail per isolare ulteriormente l'ambiente di esecuzione dal sistema host. -
Utente del processo delle attività
Le attività possono essere eseguite con un utente di sistema dedicato non root (ad esempiosemaphore) per ridurre l'impatto di eventuali exploit. Questa opzione è facoltativa e può essere configurata in base alle policy di sistema.
Distribuzione sicura
Per garantire che Semaphore venga distribuito in modo sicuro:
-
Usare HTTPS
Semaphore supporta HTTPS sia tramite il supporto TLS integrato sia tramite un reverse proxy come Nginx. Si consiglia vivamente di abilitare HTTPS in produzione.Per abilitare il supporto HTTPS integrato, aggiungere il seguente blocco a config.json:
{
...
"tls": {
"enabled": true,
"cert_file": "/path/to/cert/example.com.cert",
"key_file": "/path/to/key/example.com.key"
}
...
} -
Eseguire dietro un firewall
Limitare l'accesso a Semaphore UI e al database ai soli IP attendibili. -
Sicurezza del database
Usare password robuste e limitare l'accesso al database al solo Semaphore.
Aggiornamenti e gestione delle patch
Gli aggiornamenti di sicurezza vengono pubblicati regolarmente:
-
Rimanere aggiornati
Utilizzare sempre l'ultima release stabile. -
Changelog
Esaminare le modifiche su GitHub prima di aggiornare. -
Aggiornamenti automatici
Se si utilizza Docker, valutare pipeline di automazione per aggiornamenti regolari.
Segnalazione delle vulnerabilità
Avete trovato una vulnerabilità? Aiutateci a mantenere Semaphore sicuro:
- Divulgazione responsabile
Inviare un'email a[email protected].
Tempi obiettivo per la risoluzione delle vulnerabilità
Puntiamo a risolvere le vulnerabilità segnalate entro le seguenti finestre temporali:
- Critica: entro 30 giorni
- Alta: entro 60 giorni
- Media: entro 90 giorni
- Bassa: best effort, in genere entro 180 giorni
Per i problemi attivamente sfruttati che riguardano le ultime release stabili possono essere pubblicate patch fuori ciclo.
Strumenti per la sicurezza del codice
Utilizziamo CodeQL, Codacy, Snyk e Renovate per analizzare il codice sorgente e le dipendenze e per automatizzare l'aggiornamento delle dipendenze.
-
Nessun exploit pubblico
Non divulgare pubblicamente le vulnerabilità finché non sono state corrette. -
Riconoscimenti
I ricercatori di sicurezza possono essere citati nelle note di rilascio, se lo desiderano.