GitHub Actions ile Vercel Container Registry (VCR) Entegrasyonu: Parolasız ve Güvenli OIDC Mimarisi

GitHub Actions ve OIDC protokolüyle Vercel Container Registry'ye (VCR) uzun ömürlü token olmadan güvenli Docker imajı dağıtımı rehberi ve teknik analizi.

GitHub Actions ile Vercel Container Registry (VCR) Entegrasyonu: Parolasız ve Güvenli OIDC Mimarisi

Modern bulut mimarilerinde ve sürekli entegrasyon / sürekli dağıtım (CI/CD) süreçlerinde güvenlik, artık opsiyonel bir katman değil, altyapının temel direğidir. Geleneksel CI/CD süreçlerinde harici bir kayıt defterine (container registry) imaj göndermek için aylarca, hatta yıllarca geçerliliğini koruyan statik API anahtarları veya servis hesabı parolaları kullanılırdı. Ancak bu yaklaşım, sızdırılan kimlik bilgileri nedeniyle ciddi güvenlik zafiyetlerine yol açıyordu.

Vercel, modern mikroservis ve sunucusuz (serverless/sandbox) iş yüklerini güçlendirmek amacıyla duyurduğu Vercel Container Registry (VCR) ekosistemine GitHub Actions üzerinden parolasız (secretless) kimlik doğrulama desteği getirdi. vercel/vcr-action/login eylemi sayesinde, uzun ömürlü gizli anahtarlar saklama zorunluluğu tamamen ortadan kalkıyor. OpenID Connect (OIDC) tabanlı bu yeni mimari, GitHub iş akışının kimliğini anlık olarak doğrulayarak yalnızca işlem süresince geçerli kısa ömürlü (ephemeral) erişim belirteçleri üretiyor.

Bu teknik makalede, Vercel Container Registry mimarisini, GitHub OIDC token takasının arka planını ve sıfır güven (Zero Trust) prensiplerine dayalı bir CI/CD pipeline'ının uçtan uca nasıl kurulacağını derinlemesine inceliyoruz.


OIDC Tabanlı Kimlik Doğrulamanın Çalışma Mantığı

OpenID Connect (OIDC), harici bir sistemin (örneğin GitHub Actions), hedef sağlayıcıya (Vercel) kalıcı bir şifre paylaşmadan kendi kimliğini kriptografik olarak imzalanmış bir JSON Web Token (JWT) ile kanıtlamasını sağlar.

İşlem adımları arka planda şu sırayla gerçekleşir:

  1. OIDC Belirteci Talebi: GitHub Actions işi çalıştığında, GitHub'ın dahili OIDC sağlayıcısından bir id-token talep edilir.
  2. Belirteç Değişimi (Token Exchange): vercel/vcr-action/login eylemi bu imzalı JWT'yi alır ve Vercel API'sine iletir.
  3. Doğrulama ve Kapsam Denetimi: Vercel, gelen JWT'nin imzasını, GitHub organizasyonunu, deposunu ve branch kriterlerini önceden tanımlanmış OIDC politikası ile eşleştirir.
  4. Kısa Ömürlü Erişim: Eşleşme başarılıysa Vercel, yalnızca ilgili depoya ve işe özel, dakikalar içinde geçerliliğini yitirecek bir VCR erişim belirteci döner.
  5. Otomatik Temizleme (Revocation): İş akışı tamamlandığında veya başarısız olduğunda, eylem Docker oturumunu kapatır ve Vercel belirtecini derhal iptal eder.

Güvenlik Notu: Bu yaklaşım sayesinde CI/CD sırları (secrets) yönetimi yükü ortadan kalkar. Çalınabilecek veya unutulabilecek statik bir şifre olmadığı için tedarik zinciri saldırılarına (supply chain attacks) karşı en üst düzey savunma sağlanır.


Kimlik Doğrulama Yöntemlerinin Karşılaştırması

Bulut sağlayıcıları arasında konteyner imajı aktarırken kullanılan yöntemlerin operasyonel ve güvenlik farklılıkları aşağıdaki tabloda özetlenmiştir:

Kriter / YöntemStatik API Anahtarları / Registry SecretVercel OIDC (vercel/vcr-action/login)
Kimlik ÖmrüUzun ömürlü (Aylar/Yıllar)Çok kısa ömürlü (Sadece iş süresince)
Sızıntı RiskiYüksek (Loglar, sızan değişkenler)Yok (Bellekte tutulur, anında iptal edilir)
Rotasyon GereksinimiDüzenli manuel veya scriptli rotasyonSıfır operasyonel yük (Otomatik)
Yetki GranülaritesiGenellikle geniş kapsamlı (Team-wide)Repo, branch ve workflow bazlı kısıtlama
Bakım MaliyetiDeğişen anahtarları güncelleme zahmetiSıfır bakım, merkezi politika yönetimi

Adım Adım Kurulum: GitHub Actions'tan VCR'a İmaj Dağıtımı

GitHub Actions üzerinden Vercel Container Registry'ye güvenli şekilde imaj gönderebilmek için belirli ön yapılandırmaların tamamlanması gerekir.

1. Vercel Ekip Politikasının (OIDC Policy) Tanımlanması

İlk olarak Vercel kontrol paneli üzerinden ekibinizin ayarlarına gidin ve GitHub deponuzu hedefleyen bir OIDC kuralı oluşturun. Bu kural; GitHub organizasyonunuzu, repo adınızı, izin verilen branch'leri (örneğin yalnızca main) ve VCR üzerindeki read-write yetkisini tanımlamalıdır.

2. GitHub Değişkenlerinin (Variables) Tanımlanması

GitHub reponuzun Settings > Secrets and variables > Actions > Variables sekmesinde aşağıdaki değerleri tanımlayın. Bunlar hassas şifreler değil, genel kimlik tanımlayıcılardır:

  • VERCEL_TEAM_ID: Vercel ekip kimliğiniz (Team ID).
  • VERCEL_TEAM_SLUG: Vercel ekip kısa adı.
  • VERCEL_PROJECT_SLUG: Projenizin Vercel üzerindeki slug adı.
  • VCR_REPOSITORY: VCR içerisinde oluşturulacak veya kullanılacak konteyner deposu adı.

3. Pipeline Dosyasının Yapılandırılması

GitHub reponuzda .github/workflows/push-to-vcr.yml dosyasını oluşturun. Buradaki en kritik nokta, id-token: write izninin verilmesidir; aksi takdirde GitHub OIDC sağlayıcısı belirteç üretmeyecektir.

KOD
name: Push to VCR

on:
  push:
    branches: [ main ]

permissions:
  contents: read
  id-token: write

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Kodu Klonla
        uses: actions/checkout@v4

      - name: Docker Buildx Kurulumu
        uses: docker/setup-buildx-action@v3

      - name: Vercel Container Registry Oturumu Aç
        uses: vercel/vcr-action/login@v1
        with:
          team: ${{ vars.VERCEL_TEAM_ID }}

      - name: Docker İmajını Derle ve VCR'a Gönder
        uses: docker/build-push-action@v6
        with:
          context: .
          platforms: linux/amd64
          provenance: false
          tags: vcr.vercel.com/${{ vars.VERCEL_TEAM_SLUG }}/${{ vars.VERCEL_PROJECT_SLUG }}/${{ vars.VCR_REPOSITORY }}:latest
          outputs: type=image,push=true,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true

Performans Optimizasyonu: Zstandard (zstd) ve OCI Mediatypes

Yukarıdaki iş akışında dikkat çeken en önemli optimizasyon parametresi outputs bloğundaki sıkıştırma ayarlarıdır:

KOD
oci-mediatypes=true, compression=zstd, compression-level=3, force-compression=true
  • Zstandard (zstd) Sıkıştırması: Geleneksel gzip algoritmasına kıyasla çok daha yüksek açılma (decompression) hızlarına sahiptir. Vercel Sandbox ortamları yeni bir konteyneri ayağa kaldırırken (cold start) imaj katmanlarını zstd sayesinde saniyeler içinde indirip açabilir.
  • OCI Mediatypes: Docker'ın eski formatları yerine modern Open Container Initiative (OCI) spesifikasyonlarını kullanarak kayıt defteriyle standart bir iletişim kurulmasını sağlar.
  • Platform Kısıtı: Vercel Sandbox altyapısı şu an için linux/amd64 mimarisini temel alır. Bu nedenle çoklu mimari (multi-arch) derlemeleri yerine doğrudan hedeflenen platforma özgü derleme yapmak CI/CD sürelerini yarı yarıya kısaltacaktır.

Konteyner Alternatifleri: Podman ve Buildah Desteği

vercel/vcr-action/login varsayılan olarak Docker istemcisini yapılandırır. Ancak köksüz (rootless) veya kurumsal güvenlik standartları gereği Podman ya da Buildah tercih eden ekipler için engines parametresi sunulmaktadır:

KOD
- name: Podman ile VCR Girişi
  uses: vercel/vcr-action/login@v1
  with:
    team: ${{ vars.VERCEL_TEAM_ID }}
    engines: |
      podman
      buildah

Bu esneklik, CI ajanlarında Docker Daemon çalıştırmak istemeyen mühendislik ekiplerine geniş bir mimari bağımsızlık kazandırır.


Vercel Sandbox Entegrasyonu ve Üretime Dağıtım

VCR'a başarıyla gönderilen bir imaj, aynı Vercel projesi içinde doğrudan özel bir çalışma ortamı (custom sandbox) olarak kullanılabilir. Yapılandırma dosyalarınızda veya fonksiyon tanımlarınızda harici URL'ler yerine doğrudan <repository>:<tag> şeklinde referans verilmesi yeterlidir.

Bu özellik; yapay zeka çıkarım modelleri (AI inference), yoğun veri işleme scriptleri, Puppeteer/Playwright gibi headless tarayıcı otomasyonları ve özel sistem kütüphanelerine (FFmpeg, ImageMagick vb.) ihtiyaç duyan modern web uygulamaları için benzersiz bir hız ve izolasyon avantajı sağlar.


Kaynak: Vercel Blog - https://vercel.com/changelog/vcr-login-github-action

Sıkça Sorulan Sorular

Bu konu hakkında geliştiricilerin ve site sahiplerinin en çok merak ettiği soruların yanıtları.

Statik token'lar çalındığında iptal edilene kadar geçerlidir ve genellikle geniş yetkilere sahiptir. OIDC mimarisinde ise sistemde saklanan hiçbir şifre yoktur. GitHub ve Vercel arasında anlık kriptografik doğrulama yapılır; üretilen token yalnızca ilgili CI/CD işi boyunca (dakikalar mertebesinde) geçerlidir ve işlem bittiğinde otomatik olarak geçersiz kılınır.

Son yazılar

Akordeon (Accordion) İkon Seçimi: Kullanıcı Deneyimi, Erişilebilirlik ve SEO Optimizasyonu

Akordeon (Accordion) İkon Seçimi: Kullanıcı Deneyimi, Erişilebilirlik ve SEO Optimizasyonu

Google'ın Başlık Etiketi Yeniden Yazma Güncellemesi: Kapsamlı Analiz ve Optimizasyon Stratejileri

Google'ın Başlık Etiketi Yeniden Yazma Güncellemesi: Kapsamlı Analiz ve Optimizasyon Stratejileri

Vercel CLI ile Harcama Yönetimi: Sunucusuz Mimarilerde Maliyet ve Altyapı Güvenliği Rehberi

Vercel CLI ile Harcama Yönetimi: Sunucusuz Mimarilerde Maliyet ve Altyapı Güvenliği Rehberi