Kod güvenliği için depoları izleyin
Bir depo sunucusu bağlayın, depoları kiracılara atayın ve kod güvenliği denetleyicisini temel taramayla ve her push'ta çalışan artımlı taramayla güncel tutun.
- Sürüm: 0.4
- Özellik: codesafety
- Tür: görev
Yönetim → Depo Takibi, CID222 kod güvenliği denetleyicisini kaynak kodunuza yönlendirir. Bir depo sunucusu için bağlayıcı eklersiniz, tek tek depoları kiracılara atarsınız ve CID222 atamada bir temel tarama, her push'ta bir artımlı tarama çalıştırır. Bulgular depo bazında okunabilir ve sonrasında seçtiğiniz dosyaları bir modele analiz ettirebilirsiniz.
Neye ihtiyacım var?
- Lisans
- Enterprise
- Rol
superadmin
Ön koşullar
- superadmin olarak oturum açmış olmalısınız. Bu sayfa bir admin_user'a sunulur ama yaptığı her çağrıda reddedilir.
- Cihazın compose ortamında `REPO_TRACKING_ENABLED` değeri `true` olmalıdır. Kapalıyken modül hiçbir şey kaydetmez ve bu sayfadaki her yol 404 döndürür.
- `CODE_SAFETY_SERVICE_URL` adresinde erişilebilir bir cid-code-safety denetleyicisi bulunmalı, `CODE_SAFETY_SERVICE_ENABLED` değeri `true` olmalı ve denetleyicinin kendisinde derin yol etkin olmalıdır.
- `JWT_SECRET` ayarlı ve kalıcı olmalıdır. Bağlayıcı kimlik bilgileri ondan türetilen bir anahtarla şifrelenir; aksi hâlde ağ geçidi bunları saklamayı reddeder.
- Yoklama yerine webhook tabanlı taramalar istiyorsanız `PUBLIC_BASE_URL` ayarlı olmalıdır.
Warning
Bu özellik birbirinden bağımsız üç kapıda varsayılan olarak kapalıdır: REPO_TRACKING_ENABLED
(varsayılan false), CODE_SAFETY_SERVICE_ENABLED (varsayılan false) ve denetleyicinin kendi
derin yol anahtarı. Bir Enterprise lisansın üstüne, üçünün de açık olması gerekir.
/assets/screenshots/repo-connector@0.4.pngBu sayfayı kim kullanabilir
Sayfa kayıt defteri Depo Takibi sayfasını superadmin, admin_user ve viewer rollerine
sunar, ancak arka uç yalnızca superadmin rolünü kabul eder — bir bağlayıcı, üzerinden atanan her
depoyu okur ve bir atama, bulguların kimin kapsamına düşeceğine karar verir. Sayfayı açan bir
admin_user, sayfanın kendisi tarafından şu iletiyle reddedilir: Only the superadmin can manage
repository connectors, because an assignment decides whose scope findings land in. Bir viewer
sayfayı ve canlı görünen düğmelerini görür, tıkladığında ise her yazmanın READ_ONLY_ROLE ile
reddedildiğini fark eder.
Bağlayıcı ekleyin
Bağlayıcı, tek bir depo sunucusu ve üzerinden atanan her depoyu okuyan kimlik bilgileridir. Dört tür vardır: GitHub / GHES, GitLab, Gitea / Forgejo ve Generic git (polled). Bitbucket ve Azure DevOps yoktur.
Pencereyi açın
Yönetim → Depo Takibi, ardından Add connector (bağlayıcı ekle) öğesini seçin.
Add repository connector penceresi GitHub / GHES seçili olarak açılır.
Türü seçin
Tür alanını belirleyin.
Pencerenin açıklaması ve sunucu alanı türle birlikte değişir. Generic git (polled) için not şudur: dağıtım anahtarını CID kendisi üretir ve size yalnızca genel yarısını gösterir; API ve webhook olmadığı için değişiklikler yoklamayla bulunur.
Adlandırın ve sunucuyu ayarlayın
Bir Display name (görünen ad) girin, ardından sunucu alanını doldurun.
GitHub / GHES için alan GitHub Enterprise Server URL'dir ve github.com için boş bırakılır — yalnızca sunucu adı, asla bir depo URL'si. Generic git (polled) için alan Clone URL'dir ve deponun kendisidir. Sunucu beklenen yere bir depo URL'si girmek, göndermeden önce satır içi bir uyarı çıkarır.
Kimlik bilgilerini verin ya da GitHub'ın oluşturmasını sağlayın
Kimlik bilgisi alanlarına dokunmayın ve isterseniz GitHub organization alanını
doldurun. Düğme Continue to GitHub yazar; seçtiğinizde devre dışı bir bağlayıcı
hazırlanır ve sizi GitHub'a yönlendirir. GitHub App'i oluşturur, onaylamanızı ister ve
sonra hangi depoları okuyabileceğini sorar. GitHub App kimliğini, özel anahtarı ve webhook
gizli değerini geri gönderir — hiçbir şey elle kopyalanmaz. App, içerik ve üst veri için
salt okunur erişim ve push olayı ister.
Gönder düğmesi Create ya da manifest yolunda Continue to GitHub yazar.
Tek kullanımlık gizli değerleri alın
Connector created penceresini okuyun ve kapatmadan önce gösterdiklerini kopyalayın.
Türe göre; depoya salt okunur dağıtım anahtarı olarak ekleyeceğiniz bir
Deploy key (public half) ya da webhook olarak ekleyeceğiniz bir Payload URL ve
Secret gösterir. İkisi de bir kez gösterilir. PUBLIC_BASE_URL yoksa pencere bir URL
uydurmak yerine bunu söyler.
Bağlantıyı test edin
Bağlayıcının satırında Test öğesini seçin.
Başarı durumunda Connected — {n} repositories visible bildirimi çıkar ve Durum etiketi
active olur. Başarısızlıkta sunucunun kendi hata metni gösterilir ve satırda saklanır;
error etiketi bunu ipucu olarak açar.
Danger
Düzenleme penceresi ve anahtar yenileme ekranı yoktur. API'de
PATCH /admin/repo-connectors/:id bulunur ama pano bunu hiç çağırmaz. Bir sunucuyu, belirteci
ya da anahtarı değiştirmek için bağlayıcıyı silersiniz — bu, üzerinden izlenen her depoyu,
bulgularını ve saklanan analizlerini kaldırır — ve yeniden oluşturursunuz.
Bir depo atayın
Atama; bir depoyu, bir bağlayıcı üzerinden, tek bir kiracıya bağlar. Bir kiracı grubuna bağlanamaz. Kiracı, denetleyicinin bulguları hangi kapsam altında dosyalayacağıdır.
Atamayı başlatın
Bağlayıcının satırında Assign repo öğesini seçin.
Bağlayıcı türü için hiçbir sağlayıcı yoksa düğme devre dışıdır. Assign a repository penceresi şunu belirtir: bir temel tarama hemen kuyruğa alınır ve bulgular denetleyicide seçilen kiracının kapsamına düşer.
Depoyu ve kiracıyı seçin
Bağlayıcının görebildiği listeden Repository, ardından Kiracı seçin.
Depo listesi sunucudan gelir. Bağlayıcı listeyi okuyamıyorsa, liste yerine sunucunun kendi iletisini gösteren amber bir şerit belirir.
Temel taramayı kuyruğa alın
Assign öğesini seçin.
Repository assigned — baseline queued bildirimi görünür ve satır, Baseline sütununda
önce pending, sonra running, sonra complete göstererek Tracked repositories
tablosuna katılır.
Bir temel ya da artımlı tarama sürerken liste 5 saniyede bir yenilenir ve Baseline hücresi bir ilerleme metni taşır: şimdiye kadarki bulgular, toplama karşı taranan dosyalar ve bu deponun kendi önceki koşusundan türetilen bir tahmin. Elinde olmayan bir payda asla uydurmaz.
Güncel tutun
Temel tarama tamamlandıktan sonra CID222 yalnızca deponun varsayılan dalını izler.
| Tetikleyici | Ne olur |
|---|---|
| Bir push webhook'u gelir | CID222 ham gövde üzerindeki HMAC imzasını doğrular, sonra bir artım kuyruğa alır |
| Genel bir git deposu yoklanır | Küme genelinde bir yoklama 30 saniyede bir çalışır ve bir gündür sessiz olan bir depo için 30 dakikaya kadar geri çekilir |
| Rebaseline öğesini seçersiniz | Dizinlenmiş commit temizlenir ve yeniden tam bir temel tarama kuyruğa alınır |
Bir artım, webhook'un adını verdiği commit'leri hiçbir zaman taramaz. Her zaman son dizinlenmiş commit ile geçerli head arasındaki farkı alır; bir kesintinin kendiliğinden telafi edilmesinin, birkaç push'un tek bir taramada birleşmesinin ve Rebaseline işleminin force-push sonrasında da çözüm olmasının nedeni budur. Dizinlenmiş commit, ancak denetleyici işin tamamlandığını bildirdiğinde ilerler.
İki üst sınır geçerlidir. 500'den fazla değişen dosya, artım yerine yeniden temel tarama başlatır ve 1 MiB'ı aşan tek bir dosya atlanır.
Warning
Her webhook hatası 404 yanıtı verir — yanlış bir imza, devre dışı bir bağlayıcı, gizli değeri olmayan bir bağlayıcı, ayrıştırılamayan bir gövde ve hız sınırlaması bilinçli olarak birbirinden ayırt edilemez; böylece kimliği doğrulanmamış bir çağıran bağlayıcıları sıralayamaz. Bir push'un neden tarama üretmediğini bulmak için HTTP durumunu değil, atamadaki History penceresini kullanın.
Bulguları okuyun
İzlenen bir depoda Findings öğesini seçin — bu yalnızca bir tarama tamamlandığında etkinleşir. Pencerenin üç sekmesi vardır.
- Findings — denetleyicinin bulguları; metne ve yanıtın kendi bildirdiği önem derecelerine göre
filtrelenebilir. Başlık satırı bulgu sayısını, işin
decisiondeğerini ve iş kimliğini verir. Dosya seçmek için onay kutularını işaretleyin, sonra Analyze with the model öğesini seçin. - Files read — taramanın neyi okuduğu ve neyi dışladığı; her dışlama için gerekçesiyle.
- Structure — modele gösterilen depo taslağı: dosyalar, simgeler ve içe aktarma kenarları.
Danger
Bozulmuş olarak işaretlenen bir tarama temiz değil, bilinmiyor demektir. Pencere bunu söyler: bir çözümleyici erişilemez olmuştur, dolayısıyla sonucu bilinmiyor sayın. Denetleyici tarafındaki bilinen bir kusur bugün neredeyse her temel taramanın bozulmuş bildirilmesine yol açıyor; bu şeridi gürültü değil gerçek bir uyarı olarak okuyun.
Taramanın kendisi modeli hiç çalıştırmaz. Bunu yapan Analyze with the model işlemidir: dosya başına bir geçiş, istek başına en fazla 10 dosya, her biri yaklaşık bir dakika. Üç çıktı biçimi sunulur: Model summary, Full report ve Compressed. Sonuçlar saklanır ve pencerenin geçmişinde listelenir.
Alan başvurusu
Bağlayıcılar tablosu
| Sütun | Neyi gösterir |
|---|---|
| Ad | Bağlayıcının görünen adı |
| Tür | GitHub / GHES, GitLab, Gitea / Forgejo ya da Generic git (polled) |
| Host | Temel URL ya da public host |
| Credentials | Bir anahtar parmak izi, token set ya da none |
| Durum | active, disabled, error (ipucu sunucunun iletisini taşır) ya da no secret |
Satır işlemleri: Test, Assign repo, Sil.
İzlenen depolar tablosu
| Sütun | Neyi gösterir |
|---|---|
| Repository | Depo adı; altında son hatası kırmızı olarak |
| Branch | Varsayılan dal — izlenen tek dal |
| Baseline | pending, running, complete ya da failed; ayrıca canlı ilerleme metni |
| Indexed commit | Her artımın fark aldığı çıpanın ilk sekiz karakteri |
| Last event | Son izleme olayının ne zaman kaydedildiği |
| Enabled | İzlemeyi durduran ve başlatan anahtar |
Satır işlemleri: Findings, History, Rebaseline, Stop.
Bağlayıcı oluşturma alanları
| Alan | Türler | Kural |
|---|---|---|
| Tür | Hepsi | Dört bağlayıcı türünden biri. Sonradan değiştirilemez |
| Display name | Hepsi | Zorunlu, en fazla 255 karakter |
| GitHub Enterprise Server URL | GitHub | github.com için boş. Yalnızca sunucu adı, en fazla 2048 karakter |
| GitLab URL / Gitea / Forgejo URL | GitLab, Gitea | Yalnızca sunucu adı |
| Clone URL | Generic git | ssh, ssh://, git:// ya da https:// klonlama URL'si |
| GitHub organization | GitHub | Boş bırakılırsa App kendi hesabınızda oluşturulur |
| App ID | Mevcut App'li GitHub | En fazla 64 karakter |
| App private key (PEM) | Mevcut App'li GitHub | En fazla 16384 karakter |
| Access token | GitLab, Gitea | En fazla 4096 karakter; şifreli saklanır ve hiçbir zaman döndürülmez |
Doğrulama
- Test işleminden sonra bağlayıcının Durum sütunu active okunur ve bildirim sıfırdan farklı bir depo sayısı verir.
- Atanan depo Baseline sütununda
completedurumuna ulaşır ve bir Indexed commit gösterir. - Findings açılır ve başlık bir iş kimliği ile bir karar verir.
- İzlenen dala bir commit gönderin. Bir yoklama ya da webhook teslimi içinde Last event
ilerler ve History penceresi
completedile biten birincrementsatırı gösterir. - Bu modül Olay Günlükleri sayfasına hiçbir şey yazmaz. Bağlayıcı oluşturmak, silmek ve bir depoyu başka bir kiracıya yeniden atamak denetim satırı bırakmaz. Tek iz, kodun denetim kaydı değil sorun giderme kaydı olarak tanımladığı ve 30 gün sonra budanan History penceresidir.
Başarısız olursa
- Refusing to store connector credentials: JWT_SECRET is not set, so they would be written
unencrypted. Set a persistent JWT_SECRET and restart. — cihaz geçici bir gizli anahtarla
çalışıyor. Bağlayıcı oluşturmadan önce
JWT_SECRETdeğerini ayarlayıp yeniden başlatın. - Leave the host URL blank for github.com — it is only for GitHub Enterprise Server. / Host URL must be the GHES host only (https://…), not a repository URL. — sunucu beklenen yere bir depo URL'si girdiniz.
- That repository is not readable without credentials, and an https clone URL cannot use a deploy key. Use an ssh URL (git@host:org/repo.git) so a key can be generated, or put a token in the https URL. — https klonlama URL'sinin arkasındaki özel bir generic-git deposu.
- A clone URL cannot begin with "-" — git would read it as an option. / Clone URL must be ssh (git@host:org/repo.git), ssh://, git:// or https://. — klonlama URL'si doğrulamayı geçemedi.
- Repository … is not visible to this connector — depo, bağlayıcının kimlik bilgilerinin listeleyebildikleri arasında değil. GitHub App yolunda depoyu kuruluma ekleyin.
- No completed scan for this repository yet — check the event log — herhangi bir tarama bitmeden bulguları, dosyaları ya da yapıyı açtınız. History penceresini açın.
- This repository has no completed baseline yet, so there is no commit to read the files at. — model analizi için dizinlenmiş bir commit gerekir.
- Select findings in at most 10 files — … were chosen. Each file is a separate model round trip. — seçimi daraltın.
- Scan … has expired from the auditor's retention window — rebaseline the repository to scan it again — denetleyici işi budamıştır. Rebaseline öğesini seçin.
- Rebaseline işleminde Not queued — Code Safety is not licensed on this deployment —
denetleyici istemcisi devre dışıdır.
CODE_SAFETY_SERVICE_ENABLEDdeğerini ve lisansı denetleyin. - Kenar çubuğu bağlantısı dururken sayfadaki her yol 404 döndürüyorsa
REPO_TRACKING_ENABLEDdeğeritruedeğildir. Kenar çubuğu bu sayfayı yalnızca lisans anahtarına göre gizler; özellik bayrağı için bir denetimi yoktur, dolayısıyla bayrağı kapalı lisanslı bir cihaz, çalışamayacak bir sayfa gösterir. FEATURE_NOT_LICENSEDile This feature (…) is not included in the installed license tier. Contact your CID representative to upgrade. — kod güvenliği yalnızca Enterprise katmanındadır.READ_ONLY_ROLEile This is a read-only demo account (viewer role) — actions and changes are disabled. — bir viewer, canlı görünen bir denetimi seçmiştir.
Bilinen boşluklar
- Denetim izi yok. Bu sayfada yapılan hiçbir şey olay kaydına yazılmaz.
- Arayüzde bağlayıcı düzenleme ya da kimlik bilgisi yenileme yok; modül README'si yenilemeden söz etmesine rağmen.
- Rapor ya da SARIF indirme yok. İkisi de API'de vardır; hiçbirinin düğmesi yoktur.
- Bulgular taramalar arasında eşleştirilmez. Her iş bağımsız bildirim yapar, dolayısıyla CID222 hangi bulguların geçen haftadan bu yana yeni olduğunu henüz söyleyemez.
- Bu sayfanın büyük kısmı çevrilmemiştir. Yalnızca sayfa başlığı, alt başlığı ve erişim reddi iletisi çeviri dosyalarından geçer; her pencere, tablo başlığı, etiket ve bildirim — Türkçe bir cihazda dahi — sabit kodlanmış İngilizcedir.
- Listelerin hiçbiri sayfalanmaz. İki tablo da bütün satırları döndürür.
Sonraki adımlar
- Erişim denetimi — bu sayfanın neden yalnızca superadmin'e açık
olduğu ve bir
viewer'ın neyi okuyabileceği. - Lisans — cihazın kod güvenliği yeteneğini taşıdığını doğrulayın.
- Claude Code — diğer kod güvenliği yüzeyi: kodlama asistanını kullanan geliştiricilerin ne yaptığı ve hangi filtrelerin tetiklendiği.
Son güncelleme