Installare HashiCorp Vault su Ubuntu
Questa guida spiega come installare e configurare HashiCorp Vault su un server Ubuntu 24.04 LTS. Vault centralizza la gestione dei segreti (chiavi API, password, certificati TLS) in modo sicuro.
Le applicazioni moderne dipendono da segreti: chiavi API, password di database, certificati TLS, chiavi di crittografia. Conservarli in chiaro o nel codice è un rischio. Vault offre storage sicuro, generazione dinamica di credenziali, crittografia come servizio e controllo degli accessi granulare.
Ordina un Server
Per ospitare la tua istanza Vault, HostMyServers offre diverse opzioni adatte:
- VPS Performance - Ideale per piccoli team
- VPS NVMe - Ottimo rapporto qualità/prezzo
- Server Dedicati Eco - Per deployment con carico moderato
- Server Dedicati Performance - Prestazioni massime
Prerequisiti
- Accesso SSH come root o utente con sudo
- Sistema Ubuntu 24.04 LTS 64 bit
- Record DNS A che punta all'IP del server (per Let's Encrypt)
- Porte 8200 (HTTPS Vault) e 80 (Certbot, temporanea) accessibili
Configurazione richiesta
| Componente | Minimo | Consigliato |
|---|---|---|
| RAM | 512 MB | 1-2 GB |
| CPU | 1 core | 2 core |
| Storage | 5 GB | 10 GB |
| Rete | 100 Mbps | 1 Gbps |
Vault è in ascolto sulla porta 8200 in HTTPS. L'interfaccia web e l'API usano questa porta.
Connessione al server
Connettiti via SSH al server Ubuntu (porta 22 predefinita, o porta personalizzata / chiave PEM a seconda della configurazione):
ssh utente@indirizzo_ip_server
Aggiornamento del sistema
Aggiorna l'elenco dei pacchetti prima di installare Vault:
sudo apt update
sudo apt upgrade -y
Installazione di Vault dal repository HashiCorp
HashiCorp fornisce un repository APT ufficiale per installare l'ultima versione stabile di Vault.
Installare i pacchetti necessari
sudo apt install -y gnupg curl lsb-release
Aggiungere la chiave GPG HashiCorp
Questa chiave verifica che i pacchetti provengano da HashiCorp:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Aggiungere il repository HashiCorp
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
Installare Vault
sudo apt update
sudo apt install -y vault
Verificare l'installazione
vault --version
Dovresti vedere una riga tipo: Vault v1.20.x (...).
Abilitare l'autocompletamento (opzionale)
vault -autocomplete-install
exec $SHELL
Configurazione del firewall
Apri le porte necessarie per Vault e per l'emissione dei certificati Let's Encrypt:
sudo ufw allow 8200/tcp
sudo ufw allow 80/tcp
sudo ufw reload
La porta 80 è usata temporaneamente da Certbot per la validazione HTTP. Puoi chiuderla dopo l'ottenimento dei certificati se non ti serve.
Certificati TLS con Let's Encrypt
Per la produzione, Vault deve essere esposto in HTTPS. Usiamo Certbot per ottenere certificati gratuiti Let's Encrypt.
Installare Certbot
sudo apt install -y certbot
Ottenere un certificato per il tuo dominio
Sostituisci vault.tuodominio.com con il tuo sottodominio e tua-email@esempio.com con la tua email:
sudo certbot certonly --standalone -d vault.tuodominio.com --non-interactive --agree-tos --email tua-email@esempio.com
I certificati sono creati in /etc/letsencrypt/live/vault.tuodominio.com/.
Preparare la directory TLS per Vault
Il pacchetto Vault di solito crea un utente di sistema vault. Se necessario, crealo: sudo adduser --system --group vault. Poi crea la directory dei certificati e copia i file:
sudo mkdir -p /opt/vault/tls
sudo mkdir -p /opt/vault/data
sudo cp /etc/letsencrypt/live/vault.tuodominio.com/fullchain.pem /opt/vault/tls/cert.pem
sudo cp /etc/letsencrypt/live/vault.tuodominio.com/privkey.pem /opt/vault/tls/key.pem
sudo chown -R vault:vault /opt/vault
sudo chmod 600 /opt/vault/tls/cert.pem /opt/vault/tls/key.pem
Adatta vault.tuodominio.com al tuo dominio reale in tutti i comandi e file seguenti.
Script di rinnovo certificati
Per far sì che Vault usi sempre certificati aggiornati dopo un rinnovo Let's Encrypt:
sudo tee /etc/letsencrypt/renewal-hooks/deploy/vault.sh << 'EOF'
#!/bin/bash
cp /etc/letsencrypt/live/vault.tuodominio.com/fullchain.pem /opt/vault/tls/cert.pem
cp /etc/letsencrypt/live/vault.tuodominio.com/privkey.pem /opt/vault/tls/key.pem
chown -R vault:vault /opt/vault/tls
chmod 600 /opt/vault/tls/*
systemctl reload vault
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/vault.sh
Ricorda di sostituire vault.tuodominio.com in questo script con il tuo dominio.
Chiudere la porta 80 dopo i certificati (opzionale)
Se non ti serve più la porta 80:
sudo ufw delete allow 80/tcp
sudo ufw reload
Configurazione di Vault per la produzione
Il file di configurazione controlla storage, listener di rete e impostazioni di sicurezza.
Backup della configurazione predefinita
sudo cp /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.backup
Creare la configurazione di produzione
Sostituisci vault.tuodominio.com con il tuo dominio:
sudo tee /etc/vault.d/vault.hcl << 'EOF'
# Configurazione Vault per la produzione
ui = true
disable_mlock = true
storage "file" {
path = "/opt/vault/data"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/cert.pem"
tls_key_file = "/opt/vault/tls/key.pem"
tls_min_version = "tls12"
tls_cipher_suites = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
tls_require_and_verify_client_cert = "false"
tls_disable_client_certs = "true"
}
api_addr = "https://vault.tuodominio.com:8200"
cluster_addr = "https://vault.tuodominio.com:8201"
EOF
| Parametro | Descrizione |
|---|---|
ui | Abilita l'interfaccia web |
storage "file" | Backend di storage locale (dati crittografati) |
listener "tcp" | Listener HTTPS sulla porta 8200 |
api_addr | URL pubblico dell'API (per i client) |
Avviare Vault
sudo systemctl enable vault
sudo systemctl restart vault
sudo systemctl status vault
Lo stato deve indicare active (running).
Variabili d'ambiente per il CLI
Affinché il client Vault sappia dove connettersi:
echo 'export VAULT_ADDR="https://vault.tuodominio.com:8200"' >> ~/.bashrc
source ~/.bashrc
Verifica:
echo $VAULT_ADDR
vault status
Prima dell'inizializzazione dovresti vedere ad es.: Initialized: false, Sealed: true.
Inizializzazione e unseal
Vault parte in stato sigillato: i dati sono presenti ma non decifrabili. L'inizializzazione crea le chiavi di sblocco e il token root.
Comprendere il processo
All'inizializzazione Vault crea:
- Chiave master: crittografa tutti i segreti
- Chiavi di sblocco (unseal): 5 chiavi con l'algoritmo di Shamir; ne servono 3 su 5 per sbloccare Vault
- Root token: token di amministrazione iniziale
Le chiavi di sblocco e il root token sono mostrati una sola volta. Conservali in luoghi sicuri e separati. Senza di esse i dati restano inaccessibili.
Inizializzare Vault
vault operator init
Annota le 5 chiavi di sblocco e l'Initial Root Token. Non condividerle né committarle in un repository.
Sbloccare Vault
Devi fornire 3 chiavi diverse (una per esecuzione):
vault operator unseal
Incolla la prima chiave quando richiesto. Poi esegui altre due volte con altre due chiavi:
vault operator unseal
vault operator unseal
Quando lo sblocco riesce, vault status mostra: Sealed: false.
Accedere con il token root
vault login
Inserisci l'Initial Root Token quando richiesto.
Accesso all'interfaccia web
- Apri un browser e vai a:
https://vault.tuodominio.com:8200 - Scegli il metodo Token
- Inserisci il tuo root token e invia
Accederai alla dashboard Vault: stato, motori dei segreti (KV, ecc.) e politiche di accesso.
Vault è in ascolto solo in HTTPS sulla porta 8200. Usa https:// nell'URL e accetta il certificato se richiesto (Let's Encrypt è riconosciuto dai browser).
Comandi utili
| Comando | Descrizione |
|---|---|
vault status | Stato di Vault (inizializzato, sigillato, ecc.) |
vault operator unseal | Fornire una chiave di sblocco |
vault login | Accedere con un token |
sudo systemctl status vault | Stato del servizio systemd |
sudo systemctl restart vault | Riavviare Vault |
Struttura dei file
| Percorso | Descrizione |
|---|---|
/etc/vault.d/vault.hcl | File di configurazione |
/opt/vault/data/ | Dati Vault (crittografati) |
/opt/vault/tls/ | Certificato e chiave TLS |
In caso di problema
Il servizio non si avvia
- Controlla i log:
sudo journalctl -u vault.service -n 50 - Verifica che i percorsi in
vault.hclesistano e che l'utentevaultabbia i diritti su/opt/vault - Verifica la sintassi:
vault server -config=/etc/vault.d/vault.hcl(modalità debug, poi arresta)
Errore TLS o certificato
- Verifica che
cert.pemekey.pemsiano in/opt/vault/tls/e leggibili dall'utentevault - Testa il rinnovo:
sudo certbot renew --dry-run
Vault resta sigillato dopo il riavvio
Dopo ogni riavvio del server Vault è di nuovo sigillato. Devi fornire di nuovo 3 chiavi con vault operator unseal. Per automatizzare lo sblocco (meno sicuro) puoi usare auto-unseal (es. con un KMS cloud); vedi la documentazione Vault.