0003 — Node CLI cTrader adalah HTTP + JWT, tanpa SSH/shell
Konteks
Container backtest/run berjalan di host jarak jauh. Pendekatan yang jelas — SSH dan jalankan docker — memberikan aplikasi utama eksekusi kode jarak jauh arbitrer dan kredensial berumur panjang di setiap node. Itu adalah radius ledakan besar untuk sistem yang menjalankan cBot pengguna yang tidak dipercaya.
Keputusan
Setiap host jarak jauh menjalankan agent HTTP CtraderCliNode standalone dengan tanpa SSH dan tanpa shell. Aplikasi utama memanggil agent melalui HTTP; setiap permintaan membawa JWT HS256 berumur pendek (5-menit, iss=app-main / aud=app-node) yang ditandatangani dengan rahasia node tersebut. Agent:
- hanya menjalankan image yang cocok dengan
AllowedImagePrefix(dengan batas path sehinggaghcr.io/spotwaretidak dapat cocok denganghcr.io/spotware-evil/...); - exec docker melalui
ArgumentList— tidak pernah string shell; - adalah stateless, menemukan container menurut label
app.instance; - self-registers dan heartbeat ke
POST /api/nodes/register; aplikasi utama upsertCtraderCliNodeberdasarkan nama, sehingga node bertahan perubahan IP.
Konsekuensi
- Token permintaan yang bocor kadaluarsa dalam hitungan menit; tidak ada kredensial shell berdiri untuk dicuri.
- Kemampuan agent dibatasi untuk "menjalankan image yang diizinkan" — itu tidak dapat diubah menjadi shell jarak jauh umum.
- Identitas node berbasis nama, jadi re-provisioning node dengan IP baru tidak mengorbankan historinya.