Ana içeriğe geç

Adım 1: Cloudflare Access Kurulumu

Tarih: 2026-05-26 Durum: Tamamlandı

Yapılan Yapılandırma

Alan Değer
Plan Zero Trust Free
Team name fragrant-sunset-dab9
Uygulama adı Yackr Admin Panel
Korunan URL panel.yackr.co
Session süresi 6 saat
Giriş yöntemi Google SSO (asıl) + One-time PIN (yedek)
Policy adı Panel Access — ALLOW
Policy kuralı murat@yackr.co

Kritik Değerler

Değer Açıklama
AUD Tag Cloudflare dashboard → Yackr Admin Panel → Additional settings → AUD Tag
JWKS endpoint https://fragrant-sunset-dab9.cloudflareaccess.com/cdn-cgi/access/certs

Test

panel.yackr.co açıldı → Cloudflare login ekranı geldi → OTP ile giriş yapıldı → panel görüntülendi. ✅ panel.yackr.co açıldı → Google SSO eklendi → Google ile giriş yapıldı → panel görüntülendi. ✅


Backend (Go) — ConnectRPC + CF JWT Doğrulama

Tarih: 2026-05-28 Durum: Kod yazıldı ve derleniyor; operasyonel adımlar (DB migration, env, seed) bekliyor.

Yapılanlar

  • Ayrı binary: cmd/panel-server — mobile sunucudan (cmd/server) bağımsız, aynı backend modülü içinde.
  • Proto: proto/panel/v1/panel.protoPanelService.GetMyProfile RPC. go_package = "backend/gen/go/panel/v1;panelv1".
  • Protokol: ConnectRPC (connectrpc.com/connect) — gRPC-Web'i natively destekler, ayrı wrapper yok.
  • CF JWT doğrulama (internal/panelserver/interceptor.go):
  • Kütüphane: github.com/lestrrat-go/jwx/v3 (dahili jwk.Cache, arka planda auto-refresh).
  • Tek jwt.Parse çağrısında: imza (RS256 + kid eşleştirme, token alg'ine güvenilmez) + exp (varsayılan) + iss + aud doğrulanır.
  • JWKS URL sabit (token'dan türetilmez) → cache poisoning riski yok.
  • Geçerli JWT'de email claim'i context'e enjekte edilir; aksi halde Unauthenticated.
  • Domain katmanı (internal/panel/): repository.go (admins tablosu sorgusu), service.go (email→rol, admin değilse PermissionDenied), handler.go (ConnectRPC handler).
  • Migration'lar (internal/db/migrations/panel/): admins ve admin_audit_logs tabloları — 2026-05-28'de veritabanına uygulandı (TablePlus ile, mobile tablolarıyla aynı CockroachDB).
  • Doğrulama: go 1.25.6 ile bayraksız derleniyor, go vet temiz, govulncheck eklenen paketlerde açık bulmadı.

Kalanlar (sırayla tamamlanıp buraya eklenecek)

  • [x] Migration'ları veritabanına uygula (admins, admin_audit_logs) ✅ 2026-05-28
  • [x] CF_AUD_TAG ortam değişkenini ayarla (.env) ✅ 2026-05-28
  • [x] İlk superadmin'i seed et (murat@yackr.co) ✅ 2026-05-29 (local dev DB)
  • [x] Flutter Web paneli (frontend) — kod yazıldı, web'e derleniyor ✅ 2026-05-29 (grpc + grpc_web, GetMyProfile çağrısı; uçtan uca test Cloudflare arkasında)
  • [x] (Sistem) Go 1.26.3 güncellemesi — stdlib güvenlik açıkları için ✅ 2026-05-30
  • [x] Panel backend Cloud Run'a deploy edildi (yackr-panel servisi, europe-west1) ✅ 2026-06-12 — detay: docs/deployment/panel_backend_deployment.md
  • [x] Cloudflare Pages Function eklendi (panel/functions/[[catchall]].js) ✅ 2026-06-12 — panel.yackr.co/panel.v1.* isteklerini Cloud Run'a proxy'ler; same-origin yaklaşımı, cross-origin CORS sorunu yok
  • [x] Prod DB'ye superadmin seed edildi (murat@yackr.co) ✅ 2026-06-12 — seed_initial_superadmin.sql ile
  • [ ] Backend firewall: Cloud Run'u yalnızca Cloudflare IP aralıklarına kapat (şu an CF JWT doğrulaması var ama Cloud Run URL'i internete açık)