Sanallaştırma & Bulut

    S3 Uyumlu Nesne Depolama Nedir

    S3 API'sinin temel kavramları, erişim modeli ve uygulamanıza entegre etme yolları.

    10 dk okuma Güncellendi: 25 Ağustos 2026

    Bir depolama servisinin dokümantasyonunu açtığınızda karşınıza çıkan ilk cümle genellikle "S3 uyumlu" oluyor. Bu ifade bir marka değil, bir protokol sözüdür: sistem, Amazon'un 2006'da yayınladığı S3 HTTP API'sini konuşuyor demektir. S3 uyumlu nesne depolama bugün fiilî standart hâline geldi; yedekleme yazılımınızdan CDN'inize, WordPress eklentinizden CI/CD hattınıza kadar her şey bu API'yi konuşabiliyor.

    Bu rehberde S3 uyumluluğunun pratikte ne anlama geldiğini anlatacağım: kova (bucket), nesne ve anahtar kavramları, erişim anahtarlarının nasıl çalıştığı, dosyaları gizli tutup yine de paylaşabilmenizi sağlayan imzalı URL'ler, sürümleme ve yaşam döngüsü kuralları, ve farklı S3 uyumlu sistemlerin nerelerde birbirinden ayrıldığı. Sonunda kendi uygulamanızı bir nesne deposuna bağlayabilecek ve sağlayıcı değiştirmenin neden sadece bir yapılandırma satırı olduğunu göreceksiniz.

    S3 API Neden Fiilî Standart Oldu#

    S3 API'sinin yaygınlaşmasının teknik bir sebebi var: son derece basit. Karmaşık bir dosya sistemi protokolü değil, düz HTTP fiilleri üzerine kurulu bir anahtar-değer arayüzü. Bir nesneyi yüklemek PUT, okumak GET, silmek DELETE. Kimlik doğrulama isteğin başlıklarına gömülen bir HMAC imzasıyla yapılır; oturum, bağlantı durumu ya da özel bir port gerekmez. Bu sadelik sayesinde her dilde istemci kütüphanesi yazılabildi ve on yıl içinde her araç bu API'yi destekler hâle geldi.

    Sonuç şu oldu: bugün bir yedekleme yazılımı, bir video dönüştürme hattı ya da bir statik site dağıtıcısı "nesne depolama" derken pratikte "S3 API'si konuşan bir uç nokta" kastediyor. Sağlayıcı değiştirmek çoğu zaman üç değeri değiştirmekten ibaret: uç nokta adresi (endpoint), erişim anahtarı ve bölge (region). Uygulama kodunuza dokunmazsınız. Bu, nesne depolamanın blok depolamaya göre en büyük operasyonel avantajlarından biridir; iki modelin genel karşılaştırması için nesne depolama mı blok depolama mı yazısına göz atabilirsiniz.

    Kova, Nesne ve Anahtar: Temel Kavramlar#

    S3 dünyasında üç kavram vardır ve hepsi bu kadardır.

    Kova (bucket), nesnelerin toplandığı en üst düzey kaptır. Bir hesapta birden çok kova olabilir; erişim politikaları, sürümleme ve yaşam döngüsü kuralları kova düzeyinde tanımlanır. Kova adları genelde DNS uyumlu olmak zorundadır: küçük harf, rakam ve tire; alt çizgi ve büyük harf kabul edilmez.

    Nesne (object), saklanan veri parçasının kendisidir. Verinin yanında içerik tipi, boyutu, oluşturma zamanı ve sizin ekleyebileceğiniz özel metadata alanlarını taşır.

    Anahtar (key), nesnenin kova içindeki benzersiz adıdır. Buradaki en önemli ayrıntı şudur: anahtar içindeki / karakteri gerçek bir dizin oluşturmaz, sadece bir karakterdir. urunler/2026/kapak.jpg anahtarı düz bir metindir; listeleme yaparken urunler/ önekiyle filtrelediğinizde sistem size klasör varmış gibi bir görüntü sunar.

    # Uç nokta ve kimlik bilgilerini bir profile tanımlayın
    aws configure set aws_access_key_id ERISIM_ANAHTARI --profile clou
    aws configure set aws_secret_access_key GIZLI_ANAHTAR --profile clou
    
    # Kova oluştur (endpoint parametresi S3 uyumlu sağlayıcılar için zorunlu)
    aws --profile clou --endpoint-url https://s3.firmaniz.com \
      s3 mb s3://firmaniz-yuklemeler
    
    # Nesne yükle ve içerik tipini açıkça belirt
    aws --profile clou --endpoint-url https://s3.firmaniz.com \
      s3 cp kapak.jpg s3://firmaniz-yuklemeler/urunler/2026/kapak.jpg \
      --content-type image/jpeg
    
    # Önekle listele
    aws --profile clou --endpoint-url https://s3.firmaniz.com \
      s3 ls s3://firmaniz-yuklemeler/urunler/2026/
    

    --content-type parametresini atlamayın. Belirtmezseniz çoğu istemci binary/octet-stream yazar ve tarayıcı dosyayı göstermek yerine indirmeye çalışır. Bu, "görsellerim tarayıcıda açılmıyor" şikâyetinin en yaygın sebebidir.

    Kimlik Doğrulama ve Erişim Kontrolü#

    S3'te kimlik doğrulama bir anahtar çiftiyle yapılır: access key (kullanıcı adı gibi düşünün) ve secret key (parola). İstemci, isteğin yöntemini, yolunu, başlıklarını ve zaman damgasını birleştirip secret key ile HMAC-SHA256 imzası üretir ve bunu Authorization başlığına koyar. Sunucu aynı hesabı yapar ve imzalar tutuyorsa isteği kabul eder. Secret key hiçbir zaman ağ üzerinden gitmez; bu yüzden imza yöntemi HTTPS olmadan bile anahtarı ele vermez, ancak veriyi korumak için yine de HTTPS kullanmalısınız.

    İmzaya zaman damgası dâhil olduğu için istekler dar bir zaman penceresinde geçerlidir. Sunucunuzun saati kaymışsa RequestTimeTooSkewed hatası alırsınız — S3 tarafında en sık karşılaşılan ve en çok kafa karıştıran hatalardan biridir. Çözümü basittir:

    # Sunucu saatini NTP ile senkronize et
    sudo timedatectl set-ntp true
    timedatectl status
    

    Erişim kontrolü için üç mekanizma vardır:

    MekanizmaNe yaparNe zaman kullanılır
    Kova politikasıKova geneline JSON kural setiStatik site, genel okuma
    ACLNesne/kova bazında basit izinEski uyumluluk, tekil istisna
    İmzalı URLSüreli, tek nesneye özel bağlantıÖzel dosya paylaşımı

    En güvenli varsayılan, kovayı tamamen kapalı tutup dosyaları imzalı URL (presigned URL) ile sunmaktır. İmzalı URL, belirlediğiniz süre boyunca geçerli olan ve içinde imzayı taşıyan normal bir HTTPS adresidir; süre dolduğunda bağlantı kendiliğinden geçersizleşir.

    # 15 dakika geçerli indirme bağlantısı üret
    aws --profile clou --endpoint-url https://s3.firmaniz.com \
      s3 presign s3://firmaniz-belgeler/sozlesme.pdf --expires-in 900
    

    Fatura, sözleşme, kullanıcıya özel rapor gibi içerikler tam olarak böyle sunulmalıdır. Kovayı herkese açık bırakıp "adresi kimse bilmez" mantığına güvenmek, veri sızıntılarının klasik başlangıç noktasıdır.

    Uygulamanıza Entegre Etmek#

    Sunucu tarafında entegrasyon genellikle resmî SDK ile yapılır. Aşağıda Python boto3 ile tipik bir kullanım var; dikkat etmeniz gereken tek özel nokta endpoint_url parametresidir, çünkü S3 uyumlu bir sağlayıcı kullanıyorsanız istemcinin varsayılan Amazon adreslerine gitmesini engellemeniz gerekir.

    import boto3
    from botocore.client import Config
    
    s3 = boto3.client(
        "s3",
        endpoint_url="https://s3.firmaniz.com",
        aws_access_key_id="ERISIM_ANAHTARI",
        aws_secret_access_key="GIZLI_ANAHTAR",
        config=Config(signature_version="s3v4"),
        region_name="tr-ist-1",
    )
    
    # Yükleme: içerik tipi ve önbellek başlığını birlikte gönder
    s3.upload_file(
        "kapak.jpg",
        "firmaniz-yuklemeler",
        "urunler/2026/kapak.jpg",
        ExtraArgs={"ContentType": "image/jpeg", "CacheControl": "public, max-age=31536000"},
    )
    
    # 10 dakikalık imzalı indirme bağlantısı
    url = s3.generate_presigned_url(
        "get_object",
        Params={"Bucket": "firmaniz-belgeler", "Key": "sozlesme.pdf"},
        ExpiresIn=600,
    )
    print(url)
    

    signature_version="s3v4" satırını ihmal etmeyin; bazı istemciler hâlâ eski imza sürümüne düşebiliyor ve modern sağlayıcılar bunu reddediyor. Bir diğer yaygın ayar addressing_style: sağlayıcınız alt alan adı tabanlı adreslemeyi (kova.s3.firmaniz.com) desteklemiyorsa path stiline geçmeniz gerekir.

    Yerel bir geliştirme ortamında aynı API'yi kendi makinenizde ayağa kaldırmak isterseniz MinIO kurulumu yazısı adım adım bunu anlatıyor; üretimde kullandığınız kodu tek satır değiştirmeden test edebilirsiniz.

    Sürümleme, Yaşam Döngüsü ve Nesne Kilidi#

    S3 API'sinin en değerli ama en az kullanılan üç özelliği bunlardır.

    Sürümleme (versioning) açıldığında, bir nesnenin üzerine yazdığınızda eski hâli silinmez; yeni bir sürüm oluşur ve eskisi erişilebilir kalır. Silme işlemi de gerçek bir silme değil, "delete marker" adında bir işaretleyici eklemektir. Bu, yanlışlıkla üzerine yazılan ya da silinen dosyaları geri getirmenizi sağlar — ve fidye yazılımına karşı gerçek bir savunma katmanıdır.

    Yaşam döngüsü kuralları (lifecycle), "30 günden eski sürümleri sil" ya da "90 günden eski nesneleri soğuk katmana taşı" gibi otomasyonları sağlar. Sürümleme açıkken lifecycle kuralı tanımlamazsanız depolama maliyetiniz sessizce büyür, çünkü her üzerine yazma bir sürüm daha biriktirir.

    {
      "Rules": [
        {
          "ID": "eski-surumleri-temizle",
          "Status": "Enabled",
          "Filter": { "Prefix": "yedek/" },
          "NoncurrentVersionExpiration": { "NoncurrentDays": 30 },
          "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
        }
      ]
    }
    

    Yukarıdaki kuraldaki AbortIncompleteMultipartUpload satırı özellikle önemlidir. Büyük dosyalar parçalı (multipart) yüklenir ve yarıda kalan yüklemelerin parçaları kovada görünmez şekilde yer kaplar. Bu kural olmadan aylar içinde neden dolduğunu anlayamadığınız gigabaytlarca "hayalet" veri birikir.

    Nesne kilidi (object lock), bir nesnenin belirlenen süre boyunca silinemez ve değiştirilemez olmasını sağlar; yönetici bile silemez. Yedeklerinizi bu modda tutmak, sunucusu ele geçirilmiş bir sistemde saldırganın yedekleri de imha etmesini engeller. Yedekleme stratejinizin bütününü kurgularken Borg ile sunucu yedekleme yazısı ve felaket kurtarma planı rehberi iyi tamamlayıcılardır.

    S3 Uyumlu Sistemler Arasındaki Farklar#

    "S3 uyumlu" ifadesi bir uyumluluk derecesi belirtir, ikili bir durum değil. Temel işlemleri (kova oluşturma, nesne yükleme, listeleme, çok parçalı yükleme, imzalı URL) hemen her sistem destekler. Farklar ileri özelliklerde ortaya çıkar.

    ÖzellikYaygınlıkNot
    Temel CRUD + multipartNeredeyse tümüGüvenle varsayabilirsiniz
    İmzalı URL (v4 imza)Neredeyse tümüSaat senkronu şart
    SürümlemeÇoğuKova bazında açılır
    Yaşam döngüsü kurallarıÇoğuKural sözdizimi farklılık gösterebilir
    Nesne kilidi (WORM)Bir kısmıYedek senaryosu için sorun
    Sunucu tarafı şifrelemeDeğişkenSSE-C ve SSE-KMS ayrımına dikkat
    Olay bildirimi (event)AzKendi kuyruğunuzu kurmanız gerekebilir

    Sağlayıcı seçerken şu üç soruyu sorun: nesne kilidi var mı (yedek için kritik), yaşam döngüsü kuralları destekleniyor mu (maliyet kontrolü için kritik) ve dışarı çıkan trafik nasıl ücretlendiriliyor. Üçüncüsü çoğu zaman toplam maliyeti belirleyen kalemdir.

    Sık Yapılan Hatalar ve Tuzaklar#

    Erişim anahtarını koda gömmek. Access ve secret key'i kaynak koda yazıp depoya göndermek, sızan kimlik bilgilerinin bir numaralı sebebidir. Anahtarları ortam değişkeni ya da gizli anahtar yöneticisi üzerinden verin. Mümkünse her uygulama için ayrı, yalnızca ihtiyacı olan kovaya erişebilen anahtar üretin.

    Kovayı tümüyle herkese açık yapmak. "Görseller nasılsa herkese açık" diyerek kovanın tamamını public-read yapmak, aynı kovadaki fatura ve yedek dosyalarını da açar. Genel içerik ile özel içeriği farklı kovalara ayırın.

    Küçük dosyaları tek tek yüklemek. Nesne depolamada maliyet ve gecikme istek başınadır. Yüz binlerce küçük dosyayı tek tek yüklemek hem yavaş hem pahalıdır; mümkünse arşivleyip tek nesne olarak gönderin.

    Yarım kalan multipart yüklemeleri temizlememek. Yukarıda anlatıldığı gibi bu parçalar listede görünmez ama yer kaplar ve faturaya yansır. Lifecycle kuralıyla otomatik temizleyin.

    Uç noktayı ayarlamayı unutmak. SDK'da endpoint_url belirtmezseniz istemci Amazon'un sunucularına gider ve NoSuchBucket ya da kimlik doğrulama hatası alırsınız. Hata mesajı sizi kimlik bilgisi aramaya yönlendirir, oysa sorun adrestedir.

    Silmeyi geri alınabilir sanmak. Sürümleme kapalıysa DELETE kalıcıdır; çöp kutusu yoktur. Önemli kovalarda sürümlemeyi açık tutun.

    Sıkça Sorulan Sorular#

    S3 uyumlu depolama ile Amazon S3 arasındaki fark nedir#

    Amazon S3 belirli bir servisin adıdır; "S3 uyumlu" ise o servisin HTTP API'sini uygulayan diğer sistemleri tanımlar. MinIO, Ceph RGW ve pek çok barındırma sağlayıcısının depolama servisi S3 uyumludur. Uygulamanız açısından fark, yalnızca bağlandığı uç nokta adresidir; kod aynı kalır. İleri özelliklerde (nesne kilidi, olay bildirimi) destek düzeyi sağlayıcıdan sağlayıcıya değişebilir.

    İmzalı URL ne kadar süre geçerli olmalı#

    Kullanım senaryosuna göre mümkün olan en kısa süreyi seçin. Bir kullanıcının hemen indireceği fatura için 5–15 dakika fazlasıyla yeterlidir. Video akışı ya da büyük dosya indirmelerinde bağlantının kopup yeniden başlaması ihtimaline karşı 1 saat makul olabilir. Günlerce geçerli URL üretmek, bağlantı bir yere kopyalandığında dosyayı fiilen herkese açık hâle getirir.

    Nesne depolamayı sunucuma disk gibi bağlayabilir miyim#

    s3fs veya rclone mount gibi FUSE araçlarıyla teknik olarak mümkündür, ancak sınırlarını bilerek kullanın. Bu katman her dosya işlemini bir HTTP çağrısına dönüştürür; büyük dosyaların sıralı okunduğu senaryolarda kabul edilebilir, ancak çok sayıda küçük dosya, rastgele yazma veya veritabanı için uygun değildir. Kalıcı ve performanslı bir çözüm istiyorsanız uygulamanızı doğrudan S3 API'siyle konuşturun.

    Kova adı neden reddediliyor#

    Kova adları DNS kurallarına uymak zorundadır: yalnızca küçük harf, rakam, tire ve nokta içerebilir; 3–63 karakter arasında olmalı, harf ya da rakamla başlayıp bitmelidir. Alt çizgi, büyük harf ve boşluk kabul edilmez. Ayrıca kova adları çoğu sistemde küresel ya da hesap genelinde benzersiz olmalıdır; başkası tarafından alınmış bir ad da hataya yol açar.

    Verilerimi başka bir S3 sağlayıcısına nasıl taşırım#

    En pratik araç rclone'dur. İki sağlayıcıyı ayrı birer uzak (remote) olarak tanımlar, sonra rclone sync kaynak:kova hedef:kova --progress komutuyla senkronize edersiniz. Büyük veri setlerinde --transfers ve --checkers parametreleriyle paralelliği artırabilirsiniz. Taşıma sırasında egress ücreti oluşabileceğini hesaba katın ve geçişten sonra kaynak kovayı hemen silmeyip bir süre doğrulama için bekletin.

    Şifreleme sunucu tarafında mı istemci tarafında mı olmalı#

    İkisi farklı tehditlere karşı korur. Sunucu tarafı şifreleme, diskler fiziksel olarak ele geçirilse bile veriyi korur ve genellikle tek bir kova ayarıyla açılır. İstemci tarafı şifreleme ise veriyi sağlayıcıya ulaşmadan önce şifreler; sağlayıcının kendisine dahi güvenmek istemediğiniz durumlarda gereklidir. Yedekler için istemci tarafı şifreleme yaygın ve önerilen yaklaşımdır, çünkü anahtar tamamen sizde kalır.

    Kapanış#

    S3 uyumlu nesne depolamanın özü üç kavramda toplanıyor: kova, nesne ve anahtar. Bunların üzerine imzalı URL'lerle güvenli paylaşım, sürümlemeyle geri dönüş ve yaşam döngüsü kurallarıyla maliyet kontrolü ekleniyor. Aklınızda tutmanız gereken pratik alışkanlıklar şunlar: kovaları varsayılan olarak kapalı tutun ve dosyaları imzalı URL ile sunun, sürümlemeyi açıp yanına mutlaka bir lifecycle kuralı koyun, yarım kalan multipart yüklemeleri otomatik temizleyin ve erişim anahtarlarını asla koda gömmeyin.

    Kendi S3 uyumlu deponuzu kurmak ve tam kontrolü elinizde tutmak istiyorsanız VDS veya bulut sunucu üzerinde MinIO gibi bir yazılımı çalıştırabilirsiniz. Yedeklerinizi üretim ortamından ayrı bir yerde tutmak için yedekleme çözümlerimize, kurulum ve bakım işlerini bize bırakmak isterseniz sunucu yönetimi hizmetimize göz atabilirsiniz.

    S3Object StorageAPI

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.