Skip to main content

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:

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

ComponenteMinimoConsigliato
RAM512 MB1-2 GB
CPU1 core2 core
Storage5 GB10 GB
Rete100 Mbps1 Gbps
Porta predefinita

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
Porta 80

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
Sostituisci il dominio

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
ParametroDescrizione
uiAbilita l'interfaccia web
storage "file"Backend di storage locale (dati crittografati)
listener "tcp"Listener HTTPS sulla porta 8200
api_addrURL 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
Salva le chiavi

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

  1. Apri un browser e vai a: https://vault.tuodominio.com:8200
  2. Scegli il metodo Token
  3. Inserisci il tuo root token e invia

Accederai alla dashboard Vault: stato, motori dei segreti (KV, ecc.) e politiche di accesso.

HTTPS

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

ComandoDescrizione
vault statusStato di Vault (inizializzato, sigillato, ecc.)
vault operator unsealFornire una chiave di sblocco
vault loginAccedere con un token
sudo systemctl status vaultStato del servizio systemd
sudo systemctl restart vaultRiavviare Vault

Struttura dei file

PercorsoDescrizione
/etc/vault.d/vault.hclFile 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.hcl esistano e che l'utente vault abbia 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.pem e key.pem siano in /opt/vault/tls/ e leggibili dall'utente vault
  • 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.

Riferimenti