Entegrasyonlar
Kimlik sağlayıcılar CenseCloud'a iki ayrı soru için bağlanır: AD/LDAP — "kim çalışıyor" (lifecycle); bulut IdP'leri — "bulut SaaS'a hangi kimlikle bağlanıyor" (auth_model ve OAuth consent envanteri). Her bağlantı **yalnız okur**, asla yazmaz.
Active Directory (AD/LDAP)
On-prem AD ile lifecycle ekseni: kim katıldı, kim ayrıldı. CenseCloud bağlandığında onboard tarihi `whenCreated`'ten, offboard tetiği `userAccountControl & 0x2` (disabled bit) üzerinden anlık alınır — 30 gün bekleme yok.
İki kurulum modu
Leader agent domain-joined Windows cihazda LocalSystem altında çalışıyorsa Kerberos bind ile DC'ye bağlanır. Parola toplanmaz, saklanmaz — veritabanında hiçbir secret yok. "Authenticated Users" varsayılan Read yetkisi yeterli, ek izin gerekmez.
Domain-joined olmayan veya kısıtlı OU'larda service account oluşturulur (örn. censecloud_reader). Parola AES-256-GCM ile şifrelenip ad_connectors.service_account_secret_enc alanında saklanır; leader agent her sync öncesi RAM'e alır, diske yazmaz. "Domain Users" üyeliği yeterli — Pre-Windows 2000 Compatible Access grubuna eklemeyin (gereksiz yetki).
Okunan AD alanları (whitelist — kesin)
PowerShell `DirectorySearcher.PropertiesToLoad` listesi sadece bu 4 alanı içerir. Fazlası istense DC döndürmez.
- samAccountName — kullanıcı kimliği (lowercase normalize → devices.username ile JOIN)
- whenCreated — onboard tarihi (authoritative)
- lastLogonTimestamp — stale account tespiti (AD replication delay 9-14 gün; UI'da rozetle şeffaflaştırılır)
- userAccountControl — disabled bit (anında offboard tetiği)
Çekilmez: cn, displayName, mail, givenName, sn, telephoneNumber, manager, userPrincipalName, description, info.
Tek leader cihaz
Firma başına TEK agent AD'yi okur — çoklu agent N×LDAP query DC'de gürültü üretir. Admin dashboard'dan leader seçer; diğer agent'lar `/api/agent/ad-config` çağırdığında `403 not_ad_leader` alır, sessiz no-op döner.
Kurulum adımları
- 01Ayarlar → Active Directory Entegrasyonu (super_admin veya admin)
- 02Etki alanı DNS (örn. acme.local) ve Base DN (opsiyonel; boşsa agent rootDSE'den çıkarır)
- 03Kimlik doğrulama: Kerberos (default) veya Service Account
- 04TLS modu: LDAPS (önerilen, port 636) — sertifika güveni Windows trust store'a delegate
- 05Leader cihaz: domain-joined işaretli bir agent seçin
- 06Şimdi senkronla — leader cihaz max 5 dk içinde sync yapar
Microsoft Entra ID
Microsoft Graph üzerinden çok-kiracılı app registration. Bağlantı kurulduğunda kullanıcı envanteri, kurumsal uygulamalar (federe/SSO modu ile) ve OAuth izin envanteri tek geçişte alınır.
Çağrılan uçlar
- /users (signInActivity) — JML ground-truth (lifecycle)
- /servicePrincipals — federe / kurumsal app envanteri (auth_model çıkarımı)
- oauth2PermissionGrants + appRoleAssignedTo — Shadow-OAuth izin envanteri
- auditLogs/signIns — premium-gated, best-effort
Talep edilen scope
App-only flow: https://graph.microsoft.com/.default → admin consent ile Directory.Read.All ve Application.Read.All (Audit logs premium-gated, varsa AuditLog.Read.All). Yalnız okuma — yazma scope'u yok.
Google Workspace
Service Account + Domain-Wide Delegation. MDM Google bağlayıcısıyla aynı kolonları paylaşır (firms.gws_*) — iki kez konfigüre edilmez.
DWD scope'ları
- admin.directory.user.security — OAuth token audit (tokens.list)
- admin.directory.user.readonly — kullanıcı listesi
Tenant-geneli grants endpoint'i yok; service account, kullanıcı başına /users/{user}/tokens çağırır ve clientId bazında toplayıp Shadow-OAuth envanteri kurar. Büyük tenant'larda güvenlik kapağı GOOGLE_OAUTH_AUDIT_MAX_USERS ile ayarlanır (varsayılan 5000 kullanıcı).
Okta
Org-admin SSWS API token (read-only yeterli). Token AES-256-GCM ile şifrelenip `connection.access_token_enc` alanında saklanır.
Çağrılan uçlar
- /api/v1/apps — federe / SSO uygulama envanteri (BOOKMARK gibi yer-imi modları SSO sayılmaz, elenir)
- /api/v1/users/{id}/grants — kullanıcı başına OIDC grant audit (Shadow-OAuth, clientId bazında toplanır)
Cursor pagination: Link header'ında rel="next" parse edilir; otomatik tüm sayfa çekilir.
Dağıtım
Tek MSI: agent + tarayıcı eklentisi force-install policy + managed-config — hepsi bir paket. Faz 1 yalnız Windows; macOS ve ChromeOS şu an kapsam dışı.
Agent (MSI)
Dashboard → **Ayarlar → Merkezi Kurulum** sayfasından imzalı MSI indirilir. Firma Kodu ve Kayıt Sırrı orada görünür; sızarsa "Yenile" ile rotate edilir.
MSI içinde ne var
- node.exe —
C:\Program Files\CenseCloud\node.exe(gömülü Node 20 LTS) - agent/ —
C:\Program Files\CenseCloud\agent\(index.js + src + node_modules) - Scheduled Task — "CenseCloud Agent", kullanıcı oturum açtığında çalışır (Service Session 0 değil — foreground penceresi için user session zorunlu)
- Agent config —
HKLM\Software\CenseCloud\{firm_code, enrollment_secret, api_base} - Tarayıcı policy — Chrome + Edge ExtensionInstallForcelist + managed-config
Sessiz kurulum komutu
msiexec /i CenseCloud-X.Y.Z.msi /qn ^
FIRM_CODE=<firma kodu> ^
ENROLLMENT_SECRET=<enrollment secret> ^
API_BASE=https://app.censecloud.comDağıtım kanalları
Hepsi aynı MSI'ı dağıtır; fark sadece push mekanizması. **AD/domain zorunlu değil** — herhangi bir MDM/RMM yeterli.
- Microsoft Intune — MSI'ı Win32 app olarak paketle (
IntuneWinAppUtil.exeile.intunewin). Detection rule:HKLM\Software\CenseCloud→installed_versionmevcut. Cihaz grubuna System context ile ata. - Group Policy (on-prem AD) — MSI'ı UNC paylaşıma koy, GPO → Computer Configuration → Software Installation → Assigned. FIRM_CODE / ENROLLMENT_SECRET geçişi için MST transform veya login-script.
- RMM (NinjaOne, Atera, ConnectWise, vb.) — sessiz komutu script olarak çalıştır.
- Manuel / login script — MSI'a çift tıkla → açılan formda Firma Kodu + Kayıt Sırrı; veya
msiexec /qnsatırını makine başına bir kez çalıştır (idempotent, MajorUpgrade aynı/yeni sürümü yönetir).
Tarayıcı eklentisi (GPO/MDM)
MSI tarayıcı policy'sini de yazar; tarayıcı politikalarını merkezî olarak Intune/GPO ile yönetiyorsanız aynı değerleri oradan verirsiniz (çakışmayı önler). Her mağaza kendi ID'sini atar.
Chrome — force-install
HKLM\Software\Policies\Google\Chrome\ExtensionInstallForcelist
1 = nlomieemeckdaieeiblppdgfbdnkebpn;
https://clients2.google.com/service/update2/crxEdge — force-install
HKLM\Software\Policies\Microsoft\Edge\ExtensionInstallForcelist
1 = kbffleemlijaldbjpelfnkgnfaeajpmp;
https://edge.microsoft.com/extensionwebstorebase/v1/crxManaged config (auto-enroll)
HKLM\Software\Policies\Google\Chrome\3rdparty\extensions\
nlomieemeckdaieeiblppdgfbdnkebpn\policy
firm_code = <FIRM_CODE>
enrollment_secret = <ENROLLMENT_SECRET>
api_base = https://app.censecloud.com
machine_name = <hostname>Eklenti `chrome.storage.managed`'den firm_code + enrollment_secret'i okur ve `/api/enroll` ile sessizce kayıt olur. Edge yolu paralel: `…\Microsoft\Edge\3rdparty\extensions\<EXT_ID>\policy`.
Kapsam ve sınırlar
- Chrome ve Edge force-install destekler — ana hedef.
- Firefox ayrı XPI /
ExtensionSettingspolicy düzeni gerektirir (kapasite hazır, AMO mağaza onayı bekleniyor). - Opera ve Yandex kurumsal force-install desteklemiyor (platform kısıtı). Bu tarayıcılarda SaaS keşfi agent ile devam eder (foreground-window, tarayıcı-bağımsız); enforcement uygulanamaz.
Doğrulama (tek makinede)
# Agent kayıt bilgisi
reg query "HKLM\Software\CenseCloud"
# Chrome force-install + managed-config
reg query "HKLM\Software\Policies\Google\Chrome\ExtensionInstallForcelist"
reg query "HKLM\Software\Policies\Google\Chrome\3rdparty\extensions\nlomieemeckdaieeiblppdgfbdnkebpn\policy"
# Görev
schtasks /query /tn "CenseCloud Agent"Kapsam ve gizlilik
Mimari sınır: **eylem ve hedef** topluyoruz, **içerik** değil. "Hangi SaaS'a hangi kullanıcı, ne zaman, hangi tür eylem" (görüntüleme, yapıştırma, yükleme) — sayfanın gövdesini ya da yapıştırılan metni asla okumayız.
Neyi topluyoruz
- URL alan adı (sayfa domain'i — örn.
chat.openai.com); tam URL yolu değil. - Eylem tipi (sayfa ziyareti, yapıştırma, yükleme, indirme) — yalnız tip, içerik değil.
- SSO sinyalleri — IdP
domain_hint,hdparametresi gibi maskelenmiş alanlar (yalnız tenant ayrımı; kimlik içermez). - Uç-nokta süreç envanteri — foreground penceresinde aktif uygulama (exe_name, publisher, domain) ve kullanım süresi (saniye + launch sayısı, saat damgası agregesi olarak).
- Cihaz duruş bilgisi — OS metadata, IdP join durumu, disk şifrelemesi, açılışta MFA gibi imzalar; kullanıcı içeriği yok.
- AI Registry envanteri — kurulu IDE eklentileri (manifest okuma), CLI binary'leri (PATH + npm-global), çalışan AI asistan process'leri; yalnız varlık tespiti, kullanım metriği değil.
Neyi toplamıyoruz
Yazılım mimarisinde dışlanmış, yalnız politika beyanı değil. Codebase'de bu alanları okuyan kod yolu yok.
- Sayfa içeriği / DOM — tarayıcı eklentisi tam URL yolu, başlık, paragraf, form içeriği okumaz. host_permissions sadece guardrail content script enjeksiyonu için.
- Prompt içeriği — AI araçlarına yazılan / yapıştırılan metin asla yakalanmaz.
- Pano içeriği — clipboard'a kopyalanan veri okunmaz.
- Aktif pencere başlığı — dosya adı veya doküman içeriği sızdırabileceği için pencere başlığı agent tarafından toplanmaz (yalnız exe_name + publisher).
- AD attribute'ları — sadece 4 alan whitelist'te. İsim, mail, telefon, yönetici, departman çekilmez (PowerShell tarafında
PropertiesToLoadfiltre). - Secret'lar / API anahtarları — AI scanner cmd-line'da
--api-key,--token,sk-,ghp_,xoxb-ön ekleri otomatik maskelenir. Kanıt yollarında home dizini~ile değiştirilir (PII).
KVKK ve GDPR hizalanması
Veri minimizasyonu mimari karar — sözleşme hükmü değil. Müşteri ekibinizin denetime hazırlık için ihtiyaç duyacağı kanıtlar codebase'de zaten mevcut.
- KVKK madde 4 (minimallik) — yalnız gerekli meta veri toplanır; içerik mimariden dışlanmıştır.
- KVKK madde 12 / GDPR madde 32 (güvenlik) — at-rest AES-256-GCM, in-transit TLS-only, HMAC-SHA256 device auth, tenant-scoped middleware.
- KVKK madde 9 / GDPR Schrems II (yurt-dışı aktarım) — veri yerleşim yeri opsiyonu (TR/AB/US) müşteri seçimine açık; bağlantı kurulurken belirlenir.
- KVKK madde 11 (ilgili kişi hakları) — denetim kaydından kimin neyi gördüğü/değiştirdiği çıkarılabilir; export edilebilir.
- Retention — denetim kaydı için 1 yıl varsayılan (sözleşmeye yazılır). Cihaz/kullanım verileri agregat halinde; ham sinyal kısa pencerede silinir.
Güvenlik ve denetim
CenseCloud kendisi bir güvenlik ürünü — auth, isolation, secret yönetimi MVP'den itibaren product-grade. Üçüncü-taraf bir sertifikamız henüz yok (memory: certification ≠ capability); mimari karar ve kanıt mekanizmaları aşağıda.
Denetim kaydı (audit_log)
MVP'den itibaren her hassas eylem `audit_log` tablosuna yazılır. Tablo şeması:
- firm_id, user_id, device_id — kim (user veya device bağlamında null olabilir)
- event_type — login, login_failed, logout, policy_changed, auth_model_changed, token_revoked, oauth_granted, enforcement_action, ad_configured, ad_sync_requested, ad_disconnected
- target_table, target_id, details (JSONB) — neyi etkiledi
- ip_address, user_agent — nereden
- created_at — ne zaman (KVKK retention: 1 yıl)
Tenant izolasyonu
Çok-tenant izolasyon middleware seviyesinde — DB'ye dokunmadan önce.
- firm_id yalnız `req.firmId`'den okunur (auth middleware'in set ettiği).
- URL query, body veya header'dan firm_id asla kabul edilmez — IDOR yüzeyi kapalı.
- Per-tenant encryption key SaaS OAuth token saklamada (gelecek faz); tenant izolasyonu kriptografik olarak da güçlendirilecek.
- Row-Level Security (RLS) DB seviyesinde değerlendirme aşamasında — middleware'i tamamlayıcı katman.
Secret yönetimi
- AES-256-GCM at-rest şifreleme tüm hassas alanlar için (AD service account parolaları, IdP token'ları, OAuth grant'leri).
- Master key env üzerinden (
IDP_TOKEN_KEY); KMS-backed master key (AWS KMS / HashiCorp Vault / Azure Key Vault) sonraki faz. - Device authentication HMAC-SHA256 ile — agent her HTTP request'inde
X-Device-Id+X-Signature(METHOD + PATH + BODY + TIMESTAMP)+X-Timestamp(±5 dk pencere, replay attack kapalı). - Plaintext DB'de asla — bcrypt password hash'leri, şifreli token'lar, hash'lenmiş enrollment secret'lar.
Bir adım daha derinine inelim mi?
Burada özetlenen her şeyin ürün codebase'inde tam karşılığı var. SLA, sözleşme tipi, KVKK aydınlatma metni veya kuruluma özel rehberlik için ekibimiz birebir destek verir.
