Passa al contenuto principale
Versione: Next

HashiCorp Vault su Aruba Cloud

Distribuisci HashiCorp Vault Community Edition in modalità di produzione su Aruba Cloud tramite Terraform e cloud-init. Storage integrato Raft — nessun database esterno richiesto.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

HashiCorp Vault è un sistema di gestione dei segreti e della cifratura basato sull'identità. Fornisce un'interfaccia unificata a qualsiasi segreto — chiavi API, password, certificati, chiavi di cifratura — garantendo un controllo degli accessi rigoroso e registrando un log di audit dettagliato. Questo esempio distribuisce Vault in modalità server di produzione con:

  • Storage integrato Raft — il deposito di consenso integrato di Vault; non è richiesto alcun database esterno o cluster Consul
  • TLS sulla porta 8200 — viene generato un certificato autofirmato all'avvio; un tls_san opzionale aggiunge un nome DNS come Subject Alternative Name
  • Inizializzazione automatica — vault operator init viene eseguito al primo avvio, salvando le chiavi di unseal e il token root in /root/vault-init.json
  • Unseal automatico — 3 delle 5 chiavi Shamir di unseal vengono applicate dopo l'init così Vault è subito pronto
  • Porta 8200 limitata da vault_cidr — non esporre mai Vault a 0.0.0.0/0 in produzione

Importante: Questo esempio automatizza l'inizializzazione per comodità di avvio. In produzione, rimuovi immediatamente l'output init dal server e usa Vault Auto-unseal con un KMS cloud.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern nomeDescrizione
arubacloud_projectvault-prodContenitore progetto
arubacloud_vpcvault-prod-vpcVirtual Private Cloud
arubacloud_subnetvault-prod-subnetSubnet di base
arubacloud_securitygroupvault-prod-vm-sgSecurity group
arubacloud_securityrulevault-prod-vm-sshIngresso SSH (CIDR ristretto)
arubacloud_securityrulevault-prod-vm-vaultAPI Vault + UI (porta 8200, CIDR ristretto)
arubacloud_elasticipvault-prod-vm-eipIP pubblico VM
arubacloud_blockstoragevault-prod-bootDisco di avvio 30 GB (Performance)
arubacloud_keypairvault-prod-keypairChiave pubblica SSH
arubacloud_cloudservervault-prod-vmCloudServer VM

Costo mensile stimato​

Prezzi approssimativi per ITBG-Bergamo, fatturazione oraria.

RisorsaSpecificheCosto/mese stimato
CloudServer VMCSO2A4 — 2 vCPU / 4 GB~€18
Disco di avvio30 GB Performance~€4
Elastic IP—~€3
Totale~€25/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH
  • CLI vault installata localmente (opzionale, per interagire con Vault)

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 ArubaCloud
arubacloud_client_secretClient secret OAuth2 ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH

Opzionali​

VariabileDefaultDescrizione
app_name"vault"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO2A4"Flavor CloudServer
vm_image"LU22-001"Immagine disco di avvio (Ubuntu 22.04 LTS)
vm_disk_size_gb30Dimensione disco di avvio in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH — limita al tuo IP
vault_cidr"0.0.0.0/0"CIDR per API/UI Vault (porta 8200) — limita al tuo IP
vault_version"1.18.4"Versione Vault dal repo APT HashiCorp
tls_san""SAN DNS aggiuntivo per il certificato TLS autofirmato

Output​

OutputDescrizione
vault_urlEndpoint API e UI Vault
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM
init_output_cmdComando SSH per recuperare chiavi di unseal + token root
env_hintVariabili d'ambiente VAULT_ADDR e VAULT_SKIP_VERIFY

Istruzioni di distribuzione​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/vault

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Limita sempre vault_cidr al tuo IP prima di distribuire in produzione:

vault_cidr = "203.0.113.42/32"
ssh_cidr = "203.0.113.42/32"

3. Distribuisci​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 3–5 minuti.

4. Imposta le variabili d'ambiente​

eval "$(terraform output -raw env_hint)"
# Equivalente a:
# export VAULT_ADDR=https://<IP>:8200
# export VAULT_SKIP_VERIFY=true

5. Recupera l'output di init​

terraform output -raw init_output_cmd | bash | tee vault-init-KEEP-SAFE.json

Avviso: /root/vault-init.json sul server contiene le tue chiavi Shamir di unseal e il token root in testo chiaro. Copialo in una posizione offline sicura ed elimina la copia dal server:

ssh ubuntu@$(terraform output -raw vm_public_ip) \
'sudo shred -u /root/vault-init.json'

6. Verifica Vault​

vault status
vault login # usa il root_token da vault-init.json
vault secrets list

7. Accedi all'interfaccia​

Apri $(terraform output -raw vault_url)/ui nel browser e accedi con il token root. Accetta l'avviso TLS (certificato autofirmato).


Istruzioni di distruzione​

terraform destroy

Tutte le risorse e i dati Vault vengono eliminati definitivamente.


Raccomandazioni di sicurezza​

  1. Limita immediatamente vault_cidr. Vault custodisce i tuoi segreti — non lasciare mai la porta 8200 aperta a 0.0.0.0/0.

  2. Rimuovi l'output init dal server. Dopo aver copiato vault-init.json in una posizione sicura, distruggilo sulla VM (sudo shred -u /root/vault-init.json).

  3. Sostituisci il token root. Dopo la configurazione iniziale, crea un token con scope appropriato, revoca il token root e archivia le chiavi di unseal in posizioni sicure separate (gestore password, busta sigillata, HSM).

  4. Abilita il logging di audit. Dopo il login: vault audit enable file file_path=/var/log/vault/audit.log.

  5. Usa Auto-unseal in produzione. L'unseal manuale richiede intervento umano dopo ogni riavvio. Integra con un KMS cloud (AWS KMS, GCP KMS, Azure Key Vault) per l'unseal automatico. Vedi la documentazione Vault Auto-unseal.

  6. Abilita la verifica TLS. Sostituisci il certificato autofirmato con uno firmato da una CA attendibile, poi rimuovi VAULT_SKIP_VERIFY=true.


Considerazioni sull'aggiornamento​

Aggiornamento versione Vault​

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo apt-get update
sudo apt-get install --only-upgrade vault
sudo systemctl restart vault
# Ri-unseal se necessario:
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>

Consulta la guida all'aggiornamento Vault prima di aggiornare tra versioni principali.


Risoluzione dei problemi​

Vault è sealed dopo un riavvio​

L'unseal manuale è necessario ad ogni riavvio (a meno che non sia configurato Auto-unseal):

eval "$(terraform output -raw env_hint)"
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>

Errori di certificato TLS​

Il certificato autofirmato causa avvisi nel browser e errori CLI. O:

  • Imposta VAULT_SKIP_VERIFY=true per i test
  • Fidati del certificato: sudo cp /etc/vault.d/tls/vault.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
  • Sostituisci con un certificato valido firmato da una CA attendibile

cloud-init non si è completato​

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo tail -100 /var/log/cloud-init-output.log
sudo systemctl status vault
sudo journalctl -u vault -n 30

Riferimenti​