LocalAuthority / .doc / host-manager.md
Newer Older
172 lines | 6.651kb
Xdev Host Manager authored 2 days ago
1
# Host Manager MVP
2

            
3
Host Manager este o aplicație web locală, Perl-only, pentru registrul de hosturi Madagascar. Nu folosește npm, pip sau pachete CPAN instalate direct pe host.
4

            
5
## Politica de dependențe
6

            
7
Perl-ul livrat de distribuție este acceptat ca bază de runtime. Modulele Perl incluse în distribuție sau în core pot fi folosite direct.
8

            
9
Pachetele CPAN nu se instalează direct pe host cu `cpan`, `cpanm` sau mecanisme similare. Dacă aplicația are nevoie de un modul CPAN, modulul trebuie făcut disponibil prin repo-ul local după audit. Este acceptabilă o versiune mai veche/stabilă din repo-ul local; nu urmărim neapărat ultima versiune upstream.
10

            
11
MVP-ul curent nu are dependențe CPAN externe.
12

            
13
## Rol
14

            
Xdev Host Manager authored 2 days ago
15
`config/hosts.yaml` este registrul editabil și trebuie menținut în git. Aplicația este complet în spatele autentificării OTP pentru orice date de registru, exporturi sau modificări.
Xdev Host Manager authored 2 days ago
16

            
17
Git rămâne mecanismul de audit, istoric și rollback. Aplicația nu înlocuiește repo-ul și nu devine o bază de date separată.
18

            
Xdev Host Manager authored 2 days ago
19
Endpoint-uri publice:
Xdev Host Manager authored 2 days ago
20

            
Xdev Host Manager authored 2 days ago
21
- `/` — pagina de login/aplicație, fără date de host până la autentificare
22
- `/api/session` — status boolean al sesiunii
23
- `/api/login`
24
- `/api/logout`
Xdev Host Manager authored 2 days ago
25

            
26
Healthcheck-ul `/healthz` este disponibil doar pe backend-ul local (`127.0.0.1:8088`). Vhost-ul nginx nu îl expune.
Xdev Host Manager authored 2 days ago
27

            
28
Endpoint-uri cu OTP:
29

            
Xdev Host Manager authored 2 days ago
30
- `/api/hosts`
Xdev Host Manager authored 2 days ago
31
- `/api/ca/status`
32
- `/api/ca/certificates`
Xdev Host Manager authored 2 days ago
33
- `/download/hosts.yaml`
34
- `/download/local-hosts.tsv`
35
- `/download/monitoring.json`
Xdev Host Manager authored 2 days ago
36
- `/download/ca.crt`
Xdev Host Manager authored 2 days ago
37
- `POST /api/hosts/upsert`
38
- `POST /api/hosts/delete`
39
- `POST /api/render/local-hosts-tsv`
40

            
41
## Pornire locală
42

            
43
```bash
44
HOST_MANAGER_TOTP_SECRET="BASE32_SECRET_AICI" \
45
perl scripts/host_manager.pl --bind 127.0.0.1 --port 8088
46
```
47

            
48
Deschide:
49

            
50
```text
51
http://127.0.0.1:8088/
52
```
53

            
54
Implicit serverul ascultă doar pe loopback. Pe jumper, publicarea se face prin nginx, ca vhost separat, cu proxy către `127.0.0.1:8088`.
55

            
56
Vhost-ul implicit propus este:
57

            
58
```text
59
hosts.madagascar.xdev.ro
60
```
61

            
62
Configurațiile de deployment sunt în `deploy/jumper/`.
63

            
64
Instanța de pe jumper este instalată în `/usr/local/xdev-host-manager` și publicată prin:
65

            
66
```text
67
http://hosts.madagascar.xdev.ro/
68
```
69

            
70
Secretul TOTP nu este în repo. Pentru bootstrap, citește URI-ul root-only de pe jumper:
71

            
72
```bash
73
ssh is-vpn-gw 'cat /etc/xdev/host-manager.totp-uri'
74
```
75

            
76
## OTP
77

            
Xdev Host Manager authored 2 days ago
78
`HOST_MANAGER_TOTP_SECRET` trebuie să fie un secret Base32 compatibil TOTP. Fără această variabilă, healthcheck-ul și pagina de login funcționează, dar login-ul, API-ul, download-urile și scrierile nu.
Xdev Host Manager authored 2 days ago
79

            
80
Secretul nu se comite în repo. Dacă avem nevoie de integrare cu un manager de secrete sau systemd environment file, se definește separat pe host.
81

            
82
## Flux
83

            
84
1. Hosturile se editează în aplicație sau direct în `config/hosts.yaml`.
Xdev Host Manager authored 2 days ago
85
2. Operatorii autentificați pot descărca `/download/hosts.yaml`, `/download/local-hosts.tsv` sau `/download/monitoring.json`.
Xdev Host Manager authored 2 days ago
86
3. Pentru DNS local, butonul `Write local-hosts.tsv` regenerează `config/local-hosts.tsv`.
87
4. Sincronizarea efectivă către is-vpn-gw și as01 rămâne:
88

            
89
```bash
90
./scripts/sync_local_hosts.sh --apply --verify
91
```
92

            
Xdev Host Manager authored a day ago
93
## Convenții de nume
94

            
95
`madagascar.xdev.ro` este domeniul implicit al rețelei interne. În `config/hosts.yaml` se declară doar numele canonice/FQDN-urile necesare.
96

            
97
Pentru orice nume `*.madagascar.xdev.ro`, aplicația derivă automat aliasul scurt prin eliminarea sufixului `.madagascar.xdev.ro`.
98

            
99
Exemple:
100

            
101
- `autonas01.madagascar.xdev.ro` produce automat aliasul `autonas01`
102
- `pmx.baobab.madagascar.xdev.ro` produce automat aliasul `pmx.baobab`
103

            
104
Aliasurile derivate nu se declară separat în `hosts.yaml`. Ele apar în API, monitoring export și `local-hosts.tsv` ca nume efective.
105

            
Xdev Host Manager authored 2 days ago
106
## Git și managementul cheilor
107

            
Xdev Host Manager authored 2 days ago
108
Varianta obligatorie pentru servicii automate este să citească `config/hosts.yaml` din git, nu să depindă de HTTP neautentificat. Serviciile care sincronizează DNS, monitorizare sau inventare primesc chei dedicate, cu acces minim.
Xdev Host Manager authored 2 days ago
109

            
110
Reguli:
111

            
112
- Fiecare host/serviciu automat are propria cheie SSH, fără reutilizare între roluri.
113
- Cheile de consum sunt read-only pentru repo.
114
- Cheile care pot scrie în repo sunt rare, separate și folosite doar de componenta de management.
115
- Cheile nu se comit în repo și nu se pun în `hosts.yaml`.
116
- Pentru deployment pe hosturi, se preferă chei restrânse la comanda necesară sau deploy keys read-only unde platforma git permite.
117
- Pull-ul automat trebuie să valideze fișierele înainte de aplicare; de exemplu `perl -c scripts/host_manager.pl` și `./scripts/sync_local_hosts.sh --verify` după generarea DNS.
118

            
119
Modelul recomandat:
120

            
121
```text
122
git repo
123
  config/hosts.yaml        sursă versionată
124
  config/local-hosts.tsv   manifest generat/versionat pentru DNS local
125

            
126
jumper
127
  host-manager             editează working tree cu OTP
128
  sync_local_hosts.sh      aplică DNS după review/verificare
129

            
130
servicii consumatoare
Xdev Host Manager authored 2 days ago
131
  git pull read-only       citesc hosts.yaml/local-hosts.tsv
Xdev Host Manager authored 2 days ago
132
```
133

            
134
Pentru etapa MVP, aplicația nu face commit/push automat. După o modificare, schimbarea rămâne vizibilă în working tree și se comite explicit după review. Automatizarea commit/push poate fi adăugată ulterior, dar numai cu cheie separată și reguli clare de semnare/audit.
135

            
Xdev Host Manager authored 2 days ago
136
## Autoritate locală de certificate
137

            
138
Host Manager include un helper OpenSSL pentru o autoritate locală de certificate pentru hosturi. Cheia privată CA nu este în git și nu este servită prin aplicație.
139

            
140
Locația implicită:
141

            
142
```text
143
/usr/local/xdev-host-manager/var/ca
144
```
145

            
146
Inițializare CA, pe jumper:
147

            
148
```bash
149
cd /usr/local/xdev-host-manager
150
sudo scripts/ca_manager.sh init
151
```
152

            
153
Semnare CSR pentru un host:
154

            
155
```bash
156
sudo scripts/ca_manager.sh sign-csr host-id /path/to/host.csr host.madagascar.xdev.ro host
157
```
158

            
159
Aplicația web, după OTP, poate afișa statusul CA, lista certificatelor emise și poate descărca certificatul public CA prin `/download/ca.crt`.
160

            
161
Reguli:
162

            
163
- Se semnează preferabil CSR-uri generate pe hosturi; cheia privată a hostului nu trebuie copiată în Host Manager.
164
- CA private key rămâne local pe jumper și în afara git-ului.
165
- Endpoint-urile CA sunt în spatele OTP-ului.
166
- Automatizarea pentru emitere direct din UI se adaugă ulterior doar cu helper privilegiat și audit separat.
167

            
Xdev Host Manager authored 2 days ago
168
## Limitări MVP
169

            
170
- Parserul YAML acceptă schema strictă generată de aplicație, nu YAML arbitrar.
171
- Conflict engine-ul verifică doar consistența locală din `hosts.yaml`.
172
- DHCP, mDNS, `hosts-local.yaml` și `madagascar.json` sunt încă surse pentru audit manual sau pentru următorul collector.