Blueforce-Linux/docs/21-CENTRAL-ADMIN-RUNBOOK.md
emirhanmamak-blueforce ef102b9657 feat(field-os): provisioning layer, real ISO build, offline contracts
Adds the Blueforce Field OS provisioning stack on top of the existing fleet
architecture, without rewriting the working systems (installer, diagnostics,
Ansible, WireGuard/SSH/xRDP/RustDesk, Docker policies, monitoring, Docusaurus).

ISO build (the previous builder was a skeleton that produced no medium):
- boot layout is read from the base ISO at build time via
  `xorriso -report_el_torito as_mkisofs` and rebuilt with `-as mkisofs`;
  `-boot_image any replay` cannot work on Ubuntu live ISOs because the GRUB2
  MBR lives in the source image's first 16 sectors and the EFI system partition
  is an appended partition, neither of which is a file in the ISO9660 tree
- preflight now asserts El Torito boot metadata positively: xorriso exits 0 on
  a non-ISO input, which previously let an arbitrary file pass --check
- artifact produced and verified: dist/Blueforce-Field-OS-1.0.0-amd64.iso,
  6 481 917 952 bytes, SHA256 cb0cc56f...d431296, BIOS+UEFI entries preserved,
  /autoinstall.yaml at the media root, casper/minimal.squashfs byte-identical
  to the base
- recorded baseline deviation: the verified medium on the build host is the
  Desktop flavour, so the manifest carries a baseline_deviation block instead
  of hiding it; Server remains one flag away

Offline and identity:
- offline APT contract with concrete package requirements, pin format and an
  audit table; builds fail closed while pins are UNPINNED
- autoinstall keeps interactive-sections: [storage]: the operator confirms the
  target disk, and no automatic wipe is ever performed
- firstboot terminal wizard for the 8-digit dealer id, three-state lifecycle
  (PROVISIONED_OFFLINE -> ENROLLED -> READY) with fail-closed gates, so a
  missing internet link or WireGuard handshake cannot fail provisioning but can
  never produce a false READY

Fleet and migration:
- five read-only Ansible playbooks for Field OS version, provisioning,
  enrollment, remote channels and offline readiness, all wave-scoped with a
  separate production override
- Windows pre-migration inventory and data export extended to the full brief
  scope, read-only, never collecting credentials

Tests: tests/run-all.sh -> 8/8 pass, exit 0. Boot acceptance (UEFI, Legacy
BIOS, Secure Boot), air-gapped install, real enrollment endpoint and Windows
rollback remain LAB work and are listed in IMPLEMENTATION-REPORT.md.
2026-09-16 11:14:42 +03:00

7.2 KiB
Raw Blame History

21 — Merkezi Yönetici Runbook

Kısa özet: Merkezdeki yöneticinin el kitabı: hangi işlemi kim onaylar, update'i kim başlatır, dalga kapıları nasıl açılır, teknisyen ne zaman sahaya sürülür. Yetki ve sıra bu dosyadadır.

  • Dosya: docs/21-CENTRAL-ADMIN-RUNBOOK.md
  • İlgili kararlar: 24-DECISION-LOG.md#K-06 (Ansible/Semaphore), #K-11 (onay zinciri + dalgalar), #K-13 (anahtar dağıtımı)
  • Durum: [ ] Taslak

1. Amaç

Merkezde "kim, neyi, hangi sırayla yapar" sorusunu kapatmak. Update'i kim başlatır, dalgayı kim onaylar, acil durumda kim karar verir — hepsi burada yazar, kriz anında aranmaz.

2. Kapsam

  • Kapsam içi: rol ve onay yetkileri, update başlatma akışı, dalga kapı prosedürü, anahtar/erişim yönetimi, acil durum yetkisi, günlük/haftalık rutinler.
  • Kapsam dışı: tek cihaz kurulum adımları (20), komut-seviyesi teşhis (19), kurtarma seviye tablosu (17 — buradan çağrılır).

3. Kararlar

KARAR:    Update'i yalnızca merkezi yönetici başlatır; teknisyen, bayi veya otomatik zamanlayıcı update tetikleyemez. Her dalga geçişi açık onay (Semaphore kapı adımı + kayıt) gerektirir.
GEREKÇE:  K-11 "onaysız update yasak" ilkesinin operasyonel karşılığıdır; tek başlatma noktası = denetlenebilirlik. Otomatik tetikleyici olmaması, zamanlanmış sürprizleri engeller.
ALTERNATİF: Takvimli otomatik dalga başlatma — onay kaydı zayıflar, arızada "kim başlattı" belirsizleşir; elendi.
RİSK:     Yönetici izindeyken update kilitlenir; azaltma: en az 2 onay yetkilisi tanımlanır (asıl + vekil).
MALİYET:  Ücretsiz.
LİSANS:   Yok.
KARAR:    Acil güvenlik update'inde dalga sırası atlanamaz ama gözetim süreleri kısaltılabilir; kısaltma kararı ve gerekçesi kayda geçirilir.
GEREKÇE:  Sıra atlamak (LAB'ı geçmeden PROD'a çıkmak) filo-çapı riskidir; süre kısaltmak ise bilinçli hızlandırmadır. Kayıt, sonradan denetimi sağlar.
ALTERNATİF: Acilde direkt PROD — geri dönüşü olmayan hata riski; elendi.
RİSK:     "Acil" etiketi suistimal edilir; azaltma: acil tanımı (CVSS eşiği / aktif sömürü) 10-UPDATE'ta yazılıdır.
MALİYET:  Ücretsiz.
LİSANS:   Yok.

4. Neden Bu Karar?

700 cihazda en tehlikeli cümle "ben başlattım sandım"dır. Başlatma yetkisini tek role toplamak, hem hatayı hem suçu önler: hata olursa kayıttan bulunur, suçlama olursa kayıt konuşur. Vekil kuralı, tek kişiye bağımlılığı kaldırır.

5. Alternatifler

Alternatif Artı Eksi Sonuç
Herkes update başlatabilir Hızlı Onaysız yayılım, denetimsizlik Elendi
Tam otomatik pipeline Eforsuz Politika ihlali (K-11) Elendi
Tek onay yetkilisi Net İzin/hastalıkta kilit Elendi (asıl+vekil)

6. Avantajlar

  • Her update'in "kim başlattı, kim onayladı, ne zaman" kaydı vardır.
  • Acil durumda bile sıra korunur; hız, sıranın içinde ayarlanır.

7. Dezavantajlar

  • Onay adımı update'i yavaşlatır (bilerek; hız 25-ROADMAP'ta acil yoluyla dengelenir).
  • Semaphore kapı adımı atlanırsa politika kağıtta kalır — teknik zorunluluk şarttır.

8. Riskler

Risk Olasılık Etki Azaltma
Kapı adımı bypass edilir (CLI'dan direkt run) Orta Yüksek Semaphore dışı prod run'ı yasaktır; denetim logu izlenir
İki yetkili de ulaşılamaz Düşük Orta Acil iletişim zinciri + önceden tanımlı duraklatma (devam etme, durdur)
Anahtar sızıntısı Düşük Yüksek Per-admin anahtar iptali + rotasyon (K-13)

9. Uygulama Planı

Roller

Rol Kim Yetkisi
Onay yetkilisi (asıl + vekil) İsimle tanımlanır Dalga başlatma/onay, acil kısaltma kararı, L8/L9 kararı
Operatör Merkez ekibi Onaylanmış job'u çalıştırma, monitoring izleme, teknisyen yönlendirme
Teknisyen Saha ekibi 20'deki akış; update/dalga başlatamaz
İzleyici (read-only) Yönetim Panoları görür, işlem yapamaz

Standart update akışı (yönetici gözüyle)

  1. Update talebi gelir (güvenlik bülteni / MEG sürümü / OS yaması) → etki + geri alma planı raporlanır.
  2. Onay yetkilisi LAB'ı başlatır: Semaphore'da job + kayıt.
  3. LAB çıkış kriteri tuttuysa P1 → P2 → W1 → W2 → PROD, her kapıda açık onay.
  4. Herhangi bir dalgada halt kuralı (18) tetiklenirse: yayılım DURUR, 17-L3 işletilir, kök neden bulunmadan kapı açılmaz.
  5. PROD bitiminde kapanış kaydı (başarı/arıza sayısı, süre).
# örnek: onaylı dalga run (operatör, onay sonrası)
ansible-playbook playbooks/update.yml --limit wave_p1
# örnek: kapı kontrolü — onaysız PROD engeli (ilke; teknik karşılığı Semaphore'da)
# PROD limiti yalnızca "prod-onay" etiketli job ile koşar

Anahtar ve erişim yönetimi

  1. Yeni admin: anahtarı üretilir, authorized_keys'e Ansible ile dağıtılır (K-13); eski/ayrılan adminin anahtarı aynı yolla kaldırılır.
  2. Paylaşılan tek private key YOKTUR; böyle bir dosya görülürse olay kaydı açılır.
  3. Semaphore yalnızca WireGuard arkasından erişilir; gizliler yerleşik şifreli Key Store'dadır (K-06).

Günlük / haftalık rutinler

  • Günlük (operatör, 10 dk): Uptime Kuma UP/DOWN, Prometheus up == 0 listesi, gece reboot olanlar, yedek job durumu.
  • Haftalık (yönetici, 30 dk): dalga takvimi, açık halt'lar, anahtar/envanter uyumsuzlukları, PROVISIONED_OFFLINE/ENROLLED bekleyen cihaz kuyruğu, release manifest/rollback kanıtı ve L9 tatbikat sayacı (27/29/30).

10. Test Planı

Test Beklenen sonuç Ortam
Onaysız PROD run denemesi Engellenir + log düşer Merkez test
Semaphore kapalıyken Ansible CLI run Onaylı iş CLI'dan koşar (K-06) LAB(2)
Vekil ile dalga onayı Kayıtta vekil adı görünür Merkez test

11. Rollback

  1. Hatalı dalga: 17-L3 + 10-UPDATE rollback zinciri; kapı bir sonraki dalgaya kapatılır.
  2. Hatalı onay: aynı yetkili (veya vekil) durdurma kararı verir; "devam" kararı verilemez, yalnızca "dur + geri al".

12. Kontrol Listesi

  • Asıl + vekil isimle tanımlı ve iletişim bilgileri güncel.
  • Semaphore'da PROD kapı adımı teknik olarak zorunlu.
  • Her dalga onayı kayıtlı (kim, ne zaman, hangi sürüm).
  • Ayrılan personelin anahtarı kaldırıldı.

13. Açık Sorular

  • Acil tanımı eşikleri (CVSS/aktif sömürü) — 10-UPDATE ile ortak onay (sahibi: yönetici).
  • Kapanış raporu formatı ve saklama süresi (sahibi: 25-ROADMAP).
  • Read-only yönetim panosu kapsamı (sahibi: 14-MONITORING yazarı).

Ek: Update Onay Akışı (yönetici gözüyle)

flowchart TB
    TALEP["Update talebi<br/>(güvenlik / MEG / OS)"] --> KAYIT["Değişiklik kaydı<br/>kapsam + geri alma planı"]
    KAYIT --> ONAY{"Onay yetkilisi<br/>(asıl veya vekil)"}
    ONAY -->|Ret| KAPANIR["Kapanış kaydı (ret)"]
    ONAY -->|Onay| LAB["LAB(2) → P1(5) → P2(20)"]
    LAB --> KAPI{"Sağlık kapısı temiz mi?"}
    KAPI -->|Halt| DUR["Yayılım DURUR → 17-L3 rollback"]
    KAPI -->|Temiz| WAVE["W1(50) → W2(100) → PROD(~523)"]
    WAVE --> RAPOR["Kapanış kaydı<br/>(başarı/arıza/süre)"]