Paket Yayınında Uzun Ömürlü Jetondan Kurtulmak: OIDC ile Güvenilir Yayıncı (npm, PyPI, crates.io)
CI gizli değişkeninde duran yayın jetonu sızar, süresi dolar ve gerekenden geniştir. Güvenilir yayıncı bunun yerine CI'ın OIDC kimliğini birkaç dakikalık bir jetonla takas eder. npm, PyPI ve crates.io'nun farkları, örnek workflow, geçiş sırası ve dosya adı, ortam, fork PR'ları, yeniden yayın ile iki kanallı geçiş tuzakları.
Bir paketi npm, PyPI ya da crates.io'ya yayınlamanın klasik yolu, registry'de bir API jetonu üretip CI sistemine gizli değişken olarak koymaktır. Beş dakikalık bir kurulumdur ve sonra yıllarca kimse dokunmaz. Oysa o jeton, paketinizi kuran her makineye kod gönderebilen bir anahtardır. Üç registry de artık aynı alternatifi sunuyor: güvenilir yayıncı (trusted publishing). CI her koşuda kendi kimliğini kanıtlar, registry de karşılığında birkaç dakikalık bir jeton verir. Saklanacak bir sır kalmaz.
Uzun ömürlü jetonun üç sorunu
Sızıntı. Yayın jetonu taşıyıcı (bearer) bir sırdır, kimin elindeyse oradan çalışır. CI günlüğüne basılan bir değişken ya da bir dizüstündeki .npmrc yeter; jeton iptal edilene kadar geçerli kalır.
Süre. Süresiz jeton bir risktir, süreli jeton ise yayını en olmadık günde kırar. npm bu tartışmayı kapattı: 2025 sonunda klasik jetonlar kalıcı olarak iptal edildi, yazma yetkili granüler jetonların ömrü en fazla 90 güne indi.
Kapsam. PyPI'de hesap kapsamlı bir jeton hesaptaki bütün projelere yükleme yapabilir. Daha önemlisi, hiçbir jeton onu kullanan kodu tanımaz: depoya yazma yetkisi olan biri, gizli değişkeni okuyan bir workflow'u herhangi bir dalda çalıştırabilir.
Güvenilir yayıncı nasıl çalışır
Mekanizma OpenID Connect (OIDC) üzerine kurulu:
Registry'de paketin ayarlarına yayıncıyı tanımlarsınız: depo sahibi, depo adı, workflow dosyasının adı ve isteğe bağlı bir ortam (environment) adı. Sır üretilmez.
Yayın işi, CI'ın OIDC sağlayıcısından imzalı bir kimlik jetonu (JWT) ister. GitHub Actions'ta bunun için id-token: write izni gerekir. Jetonda depo, sahip, workflow, dal ya da etiket ve ortam bilgileri bulunur.
Registry imzayı sağlayıcının açık anahtarlarıyla doğrular, bilgileri tanımla karşılaştırır ve eşleşirse kısa ömürlü bir yayın jetonu üretir. Bu jeton PyPI'de 15, crates.io'da 30 dakika geçerlidir.
Paket bu jetonla yüklenir. crates.io'nun resmi action'ı jetonu iş sonunda ayrıca iptal eder.
Kimlik "bu metni bilen herkes" olmaktan çıkıp "bu depodaki bu workflow, bu ortamda" olur. Ama güven ortadan kalkmaz, yer değiştirir: workflow dosyasını ya da içinde çalışan kodu değiştirebilen herkes artık yayın yapabilir.
npm, PyPI ve crates.io yan yana
npm. GitHub Actions, GitLab CI/CD ve CircleCI destekleniyor, ama yalnız bulutta barındırılan çalıştırıcılarda (runner). npm CLI 11.5.1 ve Node 22.14.0 ya da sonrası gerekir, takası npm publish kendisi yapar. Açık depodan açık paket yayınlanınca, sürümü çıktığı workflow koşusuna bağlayan provenance kaydı kendiliğinden üretilir. Sık atlanan üç ayrıntı: package.json içindeki repository.url depoyla birebir eşleşmeli; tanımda doğrudan npm publish iznini ayrıca açmak gerekir (elle onay bekleyen npm stage publish hep serbest); yeni bir tanım iki gün içinde ilk yayınını yapmazsa geçersiz olur.
PyPI. En geniş desteği veren registry: GitHub Actions, GitLab CI/CD, Google Cloud ve ActiveState. GitHub'da pypa/gh-action-pypi-publish kullanılır ve dağıtım dosyaları için imzalı onay kayıtları (attestation) varsayılan olarak üretilir. Henüz var olmayan bir proje için bekleyen yayıncı (pending publisher) tanımlanabilir. Bu tanım adı rezerve etmez; siz yayınlamadan başkası aynı adı alırsa geçersiz olur.
crates.io. GitHub Actions'ı ve kamuya açık beta olarak GitLab.com üzerindeki GitLab CI/CD'yi destekliyor. Bir crate'in ilk sürümü API jetonuyla çıkmak zorunda, güvenilir yayıncı yalnız var olan crate'lere tanımlanabiliyor. Takası rust-lang/crates-io-auth-action yapar, ürettiği jeton CARGO_REGISTRY_TOKEN olarak cargo publish'e verilir. Crate ayarlarındaki bir seçenekle jetonla yayın tamamen kapatılabilir.
Örnek workflow
Aşağıdaki yapı Python paketleme rehberinin resmi örneğini izliyor: derleme ve yayın ayrı işlerde, kimlik jetonunu yalnız yayın işi isteyebiliyor.
Ayrım bir zevk meselesi değil: rehber derlemeyi yayın işinin içinde yapmayı desteklemiyor, böylece derlemede çalışan betikler ve bağımlılıklar kimlik jetonuna uzanamıyor. npm'de iş actions/setup-node ve npm publish ile biter; hiçbir yere NODE_AUTH_TOKEN verilmez.
Geçiş sırası
Önce tanımla, sonra yayınla, eski jetonu ancak ilk yeşil yayından sonra sil.
Tanımla. npm'deki iki günlük süre yüzünden tanımı haftalar önce değil, yayından hemen önce yapın. Yeni bir crate'in ilk sürümünde kullanılan jetonu tek kullanımlık sayın.
Yayınla. Workflow'a id-token: write iznini ve ortamı ekleyin, jetonu workflow'dan çıkarın ama registry'de henüz iptal etmeyin. Yeni bir sürüm çıkarın.
Doğrula, sonra sil. Yayının OIDC ile yapıldığını görün, jetonu registry'de iptal edin ve kanalı kapatın: npm'de paket ayarlarındaki "Require two-factor authentication and disallow tokens", crates.io'da güvenilir yayıncıyı zorunlu kılan seçenek. PyPI'de jetonu hesap ayarlarından silin.
Tercihim, yeni paketleri ilk günden güvenilir yayıncıyla açmak ve mevcut paketlerde geçişi bir sonraki rutin sürüme bağlamak. Gerekçesi şu: geçişin tek gerçek riski yayının kırılması. Rutin bir sürümde kırılan yayın kimseyi bekletmez, acil bir güvenlik yamasının ortasında kimlik doğrulama hatası ayıklamak ise en kötü andır.
Tuzaklar
Workflow dosya adı. Registry workflow'u içindeki name: alanından değil, dosya adından tanır. release.yml dosyasını publish.yml yapan bir temizlik yayını sessizce kırar. npm yalnız dosya adını (.yml uzantısıyla) ister, büyük küçük harfe duyarlıdır ve uyuşmazlıkta ENEEDAUTH verir; PyPI invalid-publisher döner. Yeniden kullanılabilir workflow'ları (workflow_call) PyPI desteklemez, npm ise yayını yapanın değil çağıran workflow'un adına bakar.
Ortam. Tanımda ortam adı varsa iş birebir aynı adlı ortamda koşmalı. Ortamı atlamak cazip ama yanlış: üç registry'nin tanımında da dal ya da etiket alanı yok. "Yalnız v ile başlayan etiketlerden yayın" kuralını ve zorunlu onaycıyı GitHub ortamının dağıtım kurallarında koyarsınız. Ortam yoksa yazma yetkisi olan herkes aynı adlı workflow'u herhangi bir daldan çalıştırıp yayın yapabilir. Sürüm etiketlerini de depo kurallarıyla (ruleset) koruyun.
Fork PR'ları. Fork'tan açılan PR'larda çalışan workflow'lar ana deponun OIDC jetonunu alamaz. Tehlike, ana deponun bağlamında ve onun izinleriyle çalışan pull_request_target'tadır: PR'ın kodunu id-token: write ile çalıştıran böyle bir workflow, dışarıdan gelen bir katkıya yayın yetkisi verir. crates.io bu yüzden pull_request_target ve workflow_run tetikleyicilerini güvenilir yayıncıdan tamamen engelledi. Yayın workflow'u yalnız etiketle ya da elle tetiklenmeli.
Yeniden yayın. Üç registry'de de bir sürüm numarası bir kez harcanır: npm bir paket@sürüm'ü yayından kaldırılsa bile yeniden kabul etmez, PyPI kullanılmış bir dosya adını reddeder, crates.io'da bir sürümün üzerine yazılamaz. Yarıda ölen bir işi yeniden çalıştırmak "zaten var" hatası verir. PyPI action'ının skip-existing seçeneğini kendi belgeleri bile asıl PyPI için önermiyor; ben sürümü artırıp temiz bir yayın yapmayı tercih ederim. Takas adımını da yüklemenin hemen önüne koyun, yoksa jetondan sonra koşan testler kısa ömrü yayına gelmeden tüketebilir.
İki kanallı geçiş. Geçiş sırasında jeton da OIDC de çalışır ve yeşil bir yayın hangisinin kullanıldığını söylemez. npm CLI bir OIDC ortamı bulamazsa sessizce geleneksel jetona döner; NODE_AUTH_TOKEN hâlâ tanımlıysa bozuk bir yayıncı tanımı, jetonu sildiğiniz güne kadar fark edilmez. İkinci adımda jetonu workflow'dan çıkarmanın sebebi bu. Doğrulamak için PyPI'de dosya ayrıntılarındaki "Uploaded using Trusted Publishing?" satırına, açık depolarda npm sürümünün provenance kaydına bakın. CI'daki gizli değişkeni silmek jetonu iptal etmez; başka yerlerdeki kopyalar, jeton registry'de iptal edilene kadar çalışır.
Neyi çözmez
Güvenilir yayıncı yayıncının kimliğini çözer, kodun güvenilirliğini değil: provenance paketin hangi depodan çıktığını kanıtlar, oradaki kodun zararsız olduğunu değil. Güven depoya taşındığı için zorunlu inceleme, etiket kuralları ve tam commit hash'ine sabitlenmiş action'lar artık yayın güvenliğinin parçası. Kendi barındırdığınız bir CI'dan yayın yapıyorsanız jetonla kalırsınız; o zaman jetonu tek projeyle sınırlayın ve ömrünü kısa tutun.
Döndürmesi en kolay yayın jetonu, hiç üretilmemiş olanıdır.
1-5 tab geçiş ·
tab sonraki ·
esc geri al ·
↓ kaydır
> ls -lah ~/services/ --sort=tier
[OK] 25 records · 8 featured · 1 retainer · 16 standard
/02 hizmetler
services.tree
> note
· Fiyatlar USD cinsindendir. 6-12 günlük projelerde %7, 13+ günlük projelerde %14 hacim indirimi uygulanmaktadır. 100 adam-gün ve üzeri kapsamlı programlarda proje bazlı özel fiyatlandırma yapılır. Fiyatlar kapsam, aciliyet ve uzun dönem iş birliğine göre müzakere edilebilir.
> ls ~/products/ --open-source
[OK] 2 entries · 1 live · 1 pre-release
/03 ürünler
products.list
liveaçık kaynak · mit/prod/01
filex
her yere gömülebilen self-hosted dosya yöneticisi
tek go binary · vue/react/web-component embed · 5 storage sürücüsü · realtime collab · rbac · native multi-tenancy · ai ajanları için mcp server
Altyapıyı kurar, otomasyonu sağlar, sistemi ayakta tutar.
BRF Teknoloji, Bursa merkezli bir DevSecOps ve yazılım danışmanlık firmasıdır. Kubernetes cluster yönetiminden serverless platform kurulumuna, CI/CD pipeline tasarımından AI agent geliştirmeye kadar 25 farklı hizmet alanında çalışıyoruz.
İşimizin özü basit: sisteminizi ayağa kaldırır, otomatize eder ve gece 3'te sizi uyandırmayacak hale getiririz. Terraform ile altyapınızı kodlar, ArgoCD ile deploy sürecinizi GitOps'a taşır, Prometheus ile her şeyi izleriz. Bir şey bozulursa — biz bozulmadan önce müdahale ederiz.
Vendor lock-in'e karşıyız. Açık kaynak araçlarla, self-hosted çözümlerle ve endüstri standardı teknolojilerle çalışırız. Knative üzerinde kendi serverless platformunuzu kurarız, Kata Containers ile izole ederiz, Vault ile secret'larınızı yönetiriz. Her projeyi net kapsam, net süre, net fiyatla teslim ederiz.
DevSecOps & CI/CD
Kubernetes & Serverless
Infrastructure as Code
AI & Agent (MCP/ACP)
Güvenlik & Sıfır Güven
Full-Stack Geliştirme
Self-Hosted Çözümler
> grep -i question ~/faq.md
[OK] 3 entries · click to expand
[?]BRF Teknoloji'nin DevOps çözümleri hangi hizmetleri içerir?▾
CI/CD pipeline kurulumu, Kubernetes cluster yönetimi, container migrasyonu, Terraform ile altyapı otomasyonu, monitoring & alerting, şirket içi teknoloji kurulumları ve DevOps danışmanlık hizmetleri sunuyoruz.
[?]Yazılım geliştirme hizmetleriniz nelerdir?▾
MVP geliştirme, mevcut yazılım performans optimizasyonu, backend API geliştirme (Node.js, Go, Python) ve tam stack uygulama geliştirme hizmetleri sunuyoruz. Her projede teknik borç minimumda tutularak teslim edilir.
[?]Hangi DevOps araçlarıyla çalışıyorsunuz?▾
Kubernetes ve Docker’dan Talos Linux’a, Terraform ve OpenTofu’dan Ansible’a, Jenkins, GitLab CI/CD, GitHub Actions, ArgoCD, Flux, Helm ve Rancher’a kadar endüstri standardı araçlarla çalışıyoruz. İzleme ve hata takibinde Prometheus, Grafana, Loki, Tempo, OpenTelemetry ve GlitchTip; ağ katmanında Cilium ve Envoy; test otomasyonunda Playwright, Cypress, k6, Locust, Testcontainers ve Trivy kullanıyoruz. Projenizin ihtiyacına göre en uygun araç setini birlikte belirliyoruz.
brf.sh / 2026
·bursa/tr·
timezone utc+3·
tüm sistemler nominal
> ./connect --target=brf.sh
/05 iletişim
contact.txt
> cat contact.txt
[email][email protected] [phone]+90 530 871 2248 [location] Üçevler Mah. İzmir Yolu Cad 241D 16120 Nilüfer/Bursa [hours] Hafta içi 09:00 — 18:00 UTC+3 [eta] <24s iş günü
[OK] handshake ready
· turnstile enabled
· yanıt süresi: <24s · saat dilimi UTC+3 / bursa
CI/CD Pipeline Kurulumu
GitHub Actions, GitLab CI/CD ile otomatik build, test ve deploy süreçleri.
Mevcut ya da sıfırdan bir repo için otomatik build, test ve deploy pipeline'ı kurulur. GitHub Actions, GitLab CI/CD veya tercih edilen araç kullanılır. Staging + production ortamları için ayrı akışlar tanımlanır.
Mevcut uygulamaların container mimarisine taşınması.
Mevcut uygulamaların container mimarisine taşınması. Docker image tasarımı, Compose yapılandırması ve Kubernetes manifest'lerine dönüştürme. İleri düzey izolasyon için Kata Containers / gVisor dahil edilebilir.
Prometheus, Grafana, Loki ile altyapı ve servis izleme.
Prometheus + Grafana stack kurulumu, servis ve altyapı metrikleri için dashboard'lar, kritik eşikler için alert tanımları. İsteğe bağlı: Zabbix, Loki log aggregation.
GitLab, Nextcloud, VPN, mail sunucusu gibi şirket içi araçlar.
GitLab, Mattermost, Nextcloud, mail sunucusu, VPN, iç monitoring gibi araçların şirket sunucularında kurulumu. Docker Compose veya Kubernetes üzerinde deploy edilir.
MCP/ACP agent'lar, RAG pipeline, multi-agent orchestration, model serving.
LLM entegrasyonu (OpenAI, Claude, Gemini, lokal modeller), MCP (Model Context Protocol) ve ACP (Agent Communication Protocol) ile tool-augmented AI agent'lar. RAG pipeline, multi-agent orchestration, model serving (vLLM/Ollama). Mevcut iş süreçlerine yapay zeka katmanı.
Apache Kafka, RabbitMQ, NATS ile event-driven data pipeline. Apache Airflow ile ETL/ELT orkestrasyon, real-time data akışı, CDC (Change Data Capture). Data lake/warehouse tasarımı, schema registry, dead letter queue yönetimi.
Paketler
Kafka/RabbitMQ kurulumu + temel producer/consumer
$3,500
5–7 adam/gün
ETL pipeline (Airflow + source → warehouse)
$5,200
8–12 adam/gün
Tam event-driven architecture (CDC + streaming + DLQ)
ELK Stack veya Loki + Grafana ile merkezi log yönetimi. OpenTelemetry ile distributed tracing, Jaeger/Tempo entegrasyonu. Log retention politikası, structured logging standartları, anomaly detection. Tüm servislerde uçtan uca observability.
Playwright, Cypress ile E2E test otomasyonu, k6/Gatling ile yük testi. CI/CD pipeline'a entegre pre-deploy quality gate, test coverage raporlama, visual regression testing. AI-assisted test generation ile test yazım süresini %60'a kadar düşürme.
Backstage veya Port ile internal developer portal kurulumu. Self-service ortam oluşturma, golden path template'leri, service catalog, TechDocs entegrasyonu. Developer experience (DX) metrikleri, DORA metrics takibi, cognitive load azaltma.
Paketler
Backstage/Port kurulumu + service catalog
$3,900
6–8 adam/gün
Golden path templates + self-service ortam
$6,500
10–14 adam/gün
Tam platform (portal + templates + DORA + DX metrikleri)
Toplanan Kişisel Verileriniz, Toplanma Yöntemi ve Hukuki Sebebi
Kimliğinizi belirli ya da belirlenebilir kılan her türlü bilgi "kişisel veri" olarak kabul edilmektedir. Web sitemizi ziyaret ettiğinizde veya hizmetlerimizi kullandığınızda; ad, soyad, e-posta adresi, telefon numarası gibi iletişim bilgileriniz, IP adresiniz ve tarayıcı çerez verileri otomatik ya da yarı-otomatik yollarla toplanabilir. Bu veriler, 6698 sayılı Kişisel Verilerin Korunması Kanunu'nun 5. maddesinde belirtilen "bir sözleşmenin kurulması veya ifasıyla doğrudan doğruya ilgili olması" ve "ilgili kişinin temel hak ve özgürlüklerine zarar vermemek kaydıyla, veri sorumlusunun meşru menfaatleri için veri işlenmesinin zorunlu olması" hukuki sebeplerine dayanılarak işlenmektedir.
Kişisel Verilerinizin İşlenme Amacı
Toplanan kişisel verileriniz; hizmetlerimizin sunulması ve iyileştirilmesi, müşteri taleplerinin karşılanması, yasal yükümlülüklerin yerine getirilmesi, bilgi güvenliği süreçlerinin yürütülmesi ve iletişim faaliyetlerinin yönetilmesi amaçlarıyla işlenmektedir. Verileriniz, belirtilen amaçlarla sınırlı ve ölçülü olarak işlenir; amacın ortadan kalkması halinde silinir, yok edilir veya anonim hale getirilir.
Toplanan Kişisel Verilerin Kimlere ve Hangi Amaçlarla Aktarılabileceği
Kişisel verileriniz; yasal düzenlemelerin gerektirdiği hallerde kamu kurum ve kuruluşlarına, hizmetlerin sunulması amacıyla iş ortaklarımıza ve teknik altyapı sağlayıcılarına, hukuki uyuşmazlıklarda avukatlar ve danışmanlara aktarılabilir. Aktarım, Kanun'un 8. ve 9. maddelerine uygun olarak, gerekli teknik ve idari tedbirler alınarak gerçekleştirilir.
Kişisel Verileri İşlenen Kişi Olarak Haklarınız
6698 sayılı Kanun'un 11. maddesi uyarınca; kişisel verilerinizin işlenip işlenmediğini öğrenme, işlenmişse bilgi talep etme, işlenme amacını ve amacına uygun kullanılıp kullanılmadığını öğrenme, yurt içinde veya yurt dışında aktarıldığı üçüncü kişileri bilme, eksik veya yanlış işlenmişse düzeltilmesini isteme, Kanun'un 7. maddesindeki şartlar çerçevesinde silinmesini veya yok edilmesini isteme, yapılan işlemlerin aktarıldığı üçüncü kişilere bildirilmesini isteme, münhasıran otomatik sistemler vasıtasıyla analiz edilmesi suretiyle aleyhinize bir sonucun ortaya çıkmasına itiraz etme ve kanuna aykırı işleme sebebiyle zarara uğramanız halinde zararın giderilmesini talep etme haklarına sahipsiniz. Bu haklarınızı kullanmak için web sitemizdeki iletişim kanalları aracılığıyla bize başvurabilirsiniz.
Şartlar ve Koşullar
Şartlar ve Koşullar
1. Hizmet Kapsamı ve Değişiklikler
BRF Teknoloji, sunduğu yazılım geliştirme, DevOps danışmanlık, altyapı kurulumu ve teknik destek hizmetlerini bu şartlar ve koşullar çerçevesinde yürütür. Hizmet kapsamı, her proje için ayrıca belirlenir ve karşılıklı mutabakat ile kesinleştirilir. BRF Teknoloji, sunduğu hizmetlerin kapsamını, fiyatlandırmasını ve teknik detaylarını önceden bildirmek kaydıyla güncelleme hakkını saklı tutar.
2. Gizlilik Politikası
Hizmetlerimiz kapsamında toplanan kişisel veriler, Gizlilik Politikamız çerçevesinde işlenir. Detaylı bilgi için Gizlilik Politikası sayfamızı inceleyebilirsiniz.
3. Hizmet Kullanımı ve Sorumluluklar
Müşteriler, sunulan hizmetleri yalnızca yasal ve etik çerçevede kullanmayı kabul eder. Hizmetlerin kötüye kullanılması, üçüncü taraf haklarının ihlali veya yasa dışı faaliyetler için kullanılması durumunda BRF Teknoloji hizmeti askıya alma veya sonlandırma hakkına sahiptir. Müşteri, proje kapsamında sağladığı bilgilerin doğruluğundan ve güncelliğinden sorumludur.
4. Ödeme Şartları
Ödeme koşulları proje bazında belirlenir ve proje başlangıcında karşılıklı mutabakat ile kesinleştirilir. Aksi belirtilmedikçe, faturalar proje tesliminden itibaren 15 gün içinde ödenir. Geciken ödemelerde aylık %2 gecikme faizi uygulanabilir.
5. İptal ve İade Politikası
İptal talepleri, hizmetin başlangıç tarihinden en az 7 gün önce yazılı olarak bildirilmelidir. Başlamış projelerde, tamamlanan iş oranına göre ücretlendirme yapılır. Proje kapsamında özel olarak geliştirilen yazılım ve altyapı bileşenleri için iade yapılmaz.