Skip to main content

OpenBao - guida DevOps

OpenBao – Guida rapida DevOps

repo

Scopo

Questa procedura descrive le attivitΓ  da eseguire in Semaphore quando:

  1. viene deployata una nuova VM che deve utilizzare OpenBao;
  2. viene aggiunto un nuovo progetto Docker Compose su una VM giΓ  configurata.

1. Nuova VM – Installazione OpenBao Agent

Per ogni nuova VM applicativa deve essere eseguito in Semaphore il playbook:

Install openbao agent

Il playbook:

  • installa e configura OpenBao Agent;
  • configura l'autenticazione AppRole;
  • associa la VM al corretto gruppo e ambiente;
  • prepara il filesystem utilizzato dall'Agent;
  • abilita il servizio openbao-agent.

Variabili richieste

Esempio:

{
  "host": "v329",
  "openbao_addr": "https://secretmanager.eagleprojects.cloud",
  "group": "devops",
  "env": "test",
  "role_id": "<ROLE_ID>",
  "secret_id": "<SECRET_ID>",
  "vm_id": "329"
}

Significato dei parametri

Variabile Descrizione
host Host Semaphore / inventory della VM
openbao_addr Endpoint OpenBao raggiungibile tramite Caddy
group Gruppo applicativo a cui appartiene la VM
env Ambiente della VM, ad esempio dev, test, staging, prod
role_id RoleID AppRole assegnato alla VM
secret_id SecretID AppRole assegnato alla VM
vm_id ID univoco della VM

Attenzione alle credenziali AppRole

role_id e secret_id sono credenziali macchina.

In particolare il secret_id deve essere trattato come un secret:

  • non inserirlo nella documentazione;
  • non copiarlo nei ticket;
  • non salvarlo in repository;
  • non condividerlo in chat o canali non autorizzati;
  • utilizzarlo esclusivamente durante il provisioning previsto.

2. Verifica dopo installazione Agent

Al termine del playbook verificare sulla VM:

systemctl status openbao-agent --no-pager

Il servizio deve risultare attivo.

Per controllare i log:

journalctl -u openbao-agent -n 100 --no-pager

Verificare inoltre che l'Agent riesca ad autenticarsi verso:

https://secretmanager.eagleprojects.cloud

3. Nuovo progetto Docker Compose

Quando viene aggiunto un nuovo progetto Docker Compose su una VM giΓ  configurata con OpenBao Agent, deve essere eseguito in Semaphore il playbook:

openbao-register-compose

Esempio:

{
  "host": "v913",
  "nome_univoco_progetto": "dwh_utility",
  "group": "bi",
  "env": "test"
}

Significato dei parametri

Variabile Descrizione
host VM sulla quale Γ¨ presente il Docker Compose
nome_univoco_progetto Nome tecnico univoco del progetto
group Gruppo proprietario del progetto
env Ambiente della VM/progetto

4. Regola fondamentale: nome univoco del progetto

La variabile:

nome_univoco_progetto

deve corrispondere esattamente al nome tecnico assegnato al progetto.

Deve essere identico lungo tutta la catena:

Repository
    =
Registry
    =
Ticket
    =
OpenBao
    =
nome_univoco_progetto

Esempio corretto:

Repository              dwh_utility
Registry                dwh_utility
Ticket                  dwh_utility
nome_univoco_progetto   dwh_utility
OpenBao                 dwh_utility

Non utilizzare variazioni come:

dwh-utility
DWH Utility
dwhutility
dwh_utility_test

se il nome ufficiale del progetto Γ¨:

dwh_utility

Il nome non Γ¨ una descrizione leggibile del progetto: Γ¨ un identificativo tecnico utilizzato dalle automazioni.


5. Path OpenBao risultante

Il playbook associa il progetto al path:

kv/apps/<group>/<env>/<nome_univoco_progetto>

Con:

{
  "nome_univoco_progetto": "dwh_utility",
  "group": "bi",
  "env": "test"
}

il secret corrispondente sarΓ :

kv/apps/bi/test/dwh_utility

Questo deve essere lo stesso path nel quale vengono gestite le variabili dalla Web UI OpenBao.


6. Flusso completo per una nuova VM

Creazione VM
    ↓
creazione policy/AppRole OpenBao
    ↓
ottenimento RoleID + SecretID
    ↓
Semaphore
    ↓
Install openbao agent
    ↓
OpenBao Agent attivo

Successivamente, per ogni Compose:

nuovo progetto
    ↓
verifica nome univoco
    ↓
openbao-register-compose
    ↓
registrazione template/configurazione
    ↓
OpenBao Agent
    ↓
.env generato
    ↓
Docker Compose

7. Flusso per un nuovo progetto su VM esistente

Se la VM ha giΓ  OpenBao Agent configurato, non deve essere rilanciato il playbook di installazione Agent.

È sufficiente:

Nuovo Docker Compose
        ↓
verifica Repository / Registry / Ticket
        ↓
recupero nome univoco progetto
        ↓
Semaphore
        ↓
openbao-register-compose
        ↓
OpenBao
        ↓
Agent
        ↓
Docker Compose

8. Checklist DevOps

Nuova VM

  • VM presente nell'inventory Semaphore.
  • group corretto.
  • env corretto.
  • vm_id corretto.
  • AppRole creato per la VM.
  • role_id disponibile.
  • secret_id disponibile.
  • Eseguito Install openbao agent.
  • openbao-agent.service attivo.

Nuovo progetto

  • Docker Compose presente sulla VM.
  • Nome univoco verificato sul ticket.
  • Nome coerente con repository e registry.
  • group corretto.
  • env corretto.
  • Eseguito openbao-register-compose.
  • Path OpenBao corretto.
  • .env generato correttamente dall'Agent.

9. Regola operativa sintetica

NUOVA VM
β†’ Install openbao agent
NUOVO DOCKER COMPOSE
β†’ openbao-register-compose

e in entrambi i casi verificare sempre:

group
env
nome/ID VM
nome univoco progetto

Per i progetti, la regola principale rimane:

Repository = Registry = Ticket = OpenBao = nome_univoco_progetto

10. Schema di funzionamento

                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                              β”‚        OpenBao Server     β”‚
                              β”‚                          β”‚
                              β”‚  KV Secrets Engine       β”‚
                              β”‚  kv/apps/<group>/<env>/* β”‚
                              β”‚                          β”‚
                              β”‚  Policy RBAC             β”‚
                              β”‚  AppRole Auth            β”‚
                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β”‚
                                            β”‚ TLS
                                            β”‚
                              Secret retrieval API
                                            β”‚
                                            β–Ό

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         VM TARGET                                  β”‚
β”‚                                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚  β”‚ OpenBao Agent        β”‚                                          β”‚
β”‚  β”‚                      β”‚                                          β”‚
β”‚  β”‚ - AppRole Login      β”‚                                          β”‚
β”‚  β”‚ - Token management   β”‚                                          β”‚
β”‚  β”‚ - Secret rendering   β”‚                                          β”‚
β”‚  β”‚ - Auto refresh       β”‚                                          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                          β”‚
β”‚             β”‚                                                      β”‚
β”‚             β”‚ 1. Authenticate                                      β”‚
β”‚             β”‚                                                      β”‚
β”‚             β–Ό                                                      β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                       β”‚
β”‚   β”‚ AppRole Authentication β”‚                                       β”‚
β”‚   β”‚                       β”‚                                       β”‚
β”‚   β”‚ role_id               β”‚                                       β”‚
β”‚   β”‚ secret_id             β”‚                                       β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                       β”‚
β”‚              β”‚                                                     β”‚
β”‚              β–Ό                                                     β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                       β”‚
β”‚   β”‚ OpenBao Token         β”‚                                       β”‚
β”‚   β”‚                       β”‚                                       β”‚
β”‚   β”‚ associato alla policy β”‚                                       β”‚
β”‚   β”‚ agent-<group>-<env>   β”‚                                       β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                       β”‚
β”‚              β”‚                                                     β”‚
β”‚              β”‚ 2. Read secrets                                    β”‚
β”‚              β–Ό                                                     β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                 β”‚
β”‚   β”‚ KV Secret Path              β”‚                                 β”‚
β”‚   β”‚                             β”‚                                 β”‚
β”‚   β”‚ kv/apps/prism/prod/*        β”‚                                 β”‚
β”‚   β”‚                             β”‚                                 β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                 β”‚
β”‚              β”‚                                                     β”‚
β”‚              β”‚ 3. Template rendering                              β”‚
β”‚              β–Ό                                                     β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                 β”‚
β”‚   β”‚ /run/openbao-agent/         β”‚                                 β”‚
β”‚   β”‚                             β”‚                                 β”‚
β”‚   β”‚ prism.env                  β”‚                                 β”‚
β”‚   β”‚                             β”‚                                 β”‚
β”‚   β”‚ DB_PASSWORD=xxxxx          β”‚                                 β”‚
β”‚   β”‚ API_KEY=xxxxx              β”‚                                 β”‚
β”‚   β”‚ JWT_SECRET=xxxxx           β”‚                                 β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                 β”‚
β”‚              β”‚                                                     β”‚
β”‚              β”‚ systemd PathChanged                                β”‚
β”‚              β–Ό                                                     β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                 β”‚
β”‚   β”‚ Reload Service              β”‚                                 β”‚
β”‚   β”‚                             β”‚                                 β”‚
β”‚   β”‚ openbao-compose-reload      β”‚                                 β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                 β”‚
β”‚              β”‚                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
               β”‚ docker compose restart / reload
               β–Ό


        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        Docker Compose        β”‚
        β”‚                              β”‚
        β”‚  compose.yml                 β”‚
        β”‚                              β”‚
        β”‚  services:                   β”‚
        β”‚    app:                       β”‚
        β”‚      env_file:                β”‚
        β”‚       - /run/openbao-agent/   β”‚
        β”‚         prism.env             β”‚
        β”‚                              β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
                       β–Ό

              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚ Docker Container β”‚
              β”‚                 β”‚
              β”‚ Environment:    β”‚
              β”‚                 β”‚
              β”‚ DB_PASSWORD     β”‚
              β”‚ API_KEY         β”‚
              β”‚ JWT_SECRET      β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜