Nesne depolama kurulumu

Nesne depolama kurulumunun adım adım eğitimi: bucket oluşturma, erişim anahtarı üretme, CORS ayarlama ve pratik örnekler ve yaygın hatalarla uygulamadan bağlanma.

5 dk Güncellendi 22 Sep 2026

Nesne Depolama Neden Uygulamanız İçin Gerekli?

Uygulamanız büyüdüğünde, dosyaları sunucu diskinde saklamak artık işe yaramaz. Alan sınırlaması, yedekleme zorluğu ve eşzamanlı erişim yavaşlığı, çok geçmeden karşınıza çıkacak üç ana sorundur. Nesne depolama bu sorunları farklı bir mimariyle çözer: her dosya, benzersiz bir kimliğe sahip bir "nesne" olarak saklanır ve fiziksel bir yola değil, bir URL ve erişim anahtarı aracılığıyla ona ulaşırsınız.

Bu makalede, bir nesne depolamayı sıfırdan nasıl kuracağınızı öğreneceksiniz: bucket oluşturma, erişim anahtarı üretme, güvenlik ayarları ve son olarak gerçek bir uygulamadan bağlanma. Tüm örnekleri doğrudan çalıştırabilirsiniz.

Adım 1: Bucket Oluşturma — Nesne Depolamada İlk Adım

Bucket, nesnelerin içinde bulunduğu kaptır. Bucket adı, dosyanın son adresinin bir parçası olduğu için tüm depolama alanınızda benzersiz olmalıdır. Örneğin, bucket adı my-app-media ise, bir dosyanın adresi şu şekilde olacaktır:

https://bucket.my-provider.com/my-app-media/images/profile.jpg

Nesne depolama yönetim panelinde bucket oluşturmak için genellikle şu adımları izlersiniz:

  1. "Bucket'lar" bölümüne girin ve "Yeni bucket oluştur" seçeneğine tıklayın.
  2. Bucket adını küçük harfler, sayılar ve tirelerle girin (boşluk ve özel karakter olmadan).
  3. Coğrafi bölgeyi seçin — ana kullanıcılarınıza en yakın bölge.
  4. Erişim türünü "özel" olarak ayarlayın ve daha sonra Policy ile yapılandırın.

Yaygın hata: Birçok geliştirici, dosyaların hızlı görünmesi için bucket'ı "genel" olarak oluşturur. Bu, güvenliği riske atar. Her zaman bucket'ı özel oluşturun ve erişimi yalnızca gerekli dosyalar (profil resimleri gibi) için geçici URL ile açın.

Erişim Politikasını Belirleme (Bucket Policy)

Bucket'ı oluşturduktan sonra, kimin neye erişebileceğini belirlemeniz gerekir. En basit yol, belirli bir klasör için genel okuma izni vermektir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-app-media/public/*"
    }
  ]
}

Bu Policy yalnızca public/ klasöründeki dosyalara okuma izni verir. Diğer dosyalar özel kalır. S3 uyumlu hizmetlerle (MinIO veya Ceph gibi) çalışıyorsanız, bu JSON yapısı doğrudan kullanılabilir.

Adım 2: Erişim Anahtarı Üretme ve Güvenlik Ayarları

Uygulamayı nesne depolamaya bağlamak için iki değere ihtiyacınız vardır: Access Key ve Secret Key. Bu ikisi, kullanıcı adı ve şifre gibi çalışır ve dikkatli bir şekilde saklanmalıdır.

Yönetim panelinde, genellikle "Erişim anahtarları" bölümünden yeni bir anahtar çifti oluşturabilirsiniz. Üretildikten sonra, Secret Key yalnızca bir kez gösterilir — bu yüzden hemen güvenli bir yere kaydedin.

Anahtarlar için En İyi Güvenlik Uygulamaları

  • Anahtarları uygulama koduna veya Git'te commit edilen .env gibi genel dosyalara koymayın.
  • Her ortam için (geliştirme, test, üretim) ayrı bir anahtar oluşturun.
  • Her anahtarın erişimini sınırlayın — örneğin yalnızca belirli bir bucket'a ve yalnızca okuma işlemlerine.
  • Anahtar sızdırıldıysa, hemen devre dışı bırakın ve yeni bir anahtar oluşturun.

Önemli not: Nesne depolamada, anahtarlar genellikle bir "kullanıcıya" bağlanır. Her kullanıcı için ayrı bir Policy tanımlayabilirsiniz. Örneğin, bir kullanıcı yalnızca yükleme, diğeri yalnızca indirme yapabilir.

Adım 3: Uygulamadan Bağlanma — Python ile Pratik Örnek

Artık bucket ve anahtarlar hazır olduğuna göre, bağlanma zamanı. Bu örnek için, S3 uyumlu hizmetlerle iletişim standardı olan boto3 kütüphanesini kullanacağız. Önce kütüphaneyi kurun:

pip install boto3

Ardından bir yapılandırma dosyası oluşturun:

import boto3
from botocore.client import Config

s3 = boto3.client(
    's3',
    endpoint_url='https://your-storage-endpoint.com',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY',
    config=Config(signature_version='s3v4'),
    region_name='us-east-1'
)

Şimdi bir dosya yükleyebilirsiniz:

s3.upload_file(
    'local-image.jpg',
    'my-app-media',
    'public/profile.jpg',
    ExtraArgs={'ContentType': 'image/jpeg'}
)

Ve indirmek için:

s3.download_file(
    'my-app-media',
    'public/profile.jpg',
    'downloaded-image.jpg'
)

Özel Dosyalar için Geçici URL Üretme

Dosya özelse ve kullanıcının sınırlı bir süre erişmesini istiyorsanız, imzalı URL kullanın:

url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'my-app-media', 'Key': 'private/report.pdf'},
    ExpiresIn=3600  # bir saat
)
print(url)

Bu URL, dijital imza içerir ve bir saat sonra sona erer. Profil resimlerini göstermek veya fatura indirmek için idealdir.

Adım 4: Tarayıcıdan Erişim için CORS Ayarlama

Uygulamanızın JavaScript ön ucu varsa ve doğrudan tarayıcıdan nesne depolamaya bağlanmak istiyorsa, CORS'u ayarlamanız gerekir. Bu ayar olmadan, tarayıcı isteği engeller ve No 'Access-Control-Allow-Origin' header hatasını alırsınız.

Yönetim panelinde CORS bölümünü bulun ve şu ayarları ekleyin:

[
  {
    "AllowedOrigins": ["https://my-app.com"],
    "AllowedMethods": ["GET", "PUT"],
    "AllowedHeaders": ["*"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3000
  }
]

Bu örnekte yalnızca my-app.com alan adı erişim iznine sahiptir. Geliştirme ortamı için http://localhost:3000 adresini de ekleyebilirsiniz.

Yaygın hata: Bazıları, her şeyin hızlı çalışması için AllowedOrigins değerini * olarak ayarlar. Bu, üretimde tehlikelidir çünkü başka herhangi bir site dosyalarınıza erişebilir. Her zaman belirli alan adlarını listeleyin.

Adım 5: Hata Yönetimi ve Sorun Giderme

Nesne depolama ile çalışırken birkaç yaygın hatayla mutlaka karşılaşacaksınız. Bunları tanıyın ki hızlıca çözebilesiniz:

403 Forbidden Hatası

Genellikle erişim anahtarının yanlış olduğu veya Policy'nin izin vermediği anlamına gelir. Önce anahtarları kontrol edin, ardından bucket Policy'sini inceleyin. Geçici URL kullanıyorsanız, süresinin dolmadığından emin olun.

404 Not Found Hatası

Ya dosya yoktur ya da yol (Key) yanlıştır. Key'in klasör adlarını da içerdiğine dikkat edin. Örneğin, dosyayı public/ içine yüklediyseniz, Key public/filename.jpg olmalıdır, sadece filename.jpg değil.

SignatureDoesNotMatch Hatası

Bu hata, sistem saatinizin sunucuyla senkronize olmadığı anlamına gelir. Saati şu komutla senkronize edin:

sudo ntpdate pool.ntp.org

Veya daha modern sistemlerde:

sudo timedatectl set-ntp true

Özet ve Sonraki Adımlar

Nesne depolama kurmak zor bir iş değildir, ancak güvenlik ve yapılandırma ayrıntılarını hafife almamalısınız. Adımların özeti:

  1. Bucket'ı özel oluşturun ve Policy'yi hassas bir şekilde ayarlayın.
  2. Erişim anahtarlarını her ortam için ayrı oluşturun ve güvenli tutun.
  3. Bağlantı için standart kütüphaneyi (boto3 gibi) kullanın.
  4. Özel dosyalar için genel erişim yerine geçici URL üretin.
  5. CORS'u yalnızca izin verilen alan adları için açın.

Projeleriniz için güvenilir bir bulut altyapısı arıyorsanız, ServerNet bulut alanı ve depolama alanında ihtiyaçlarınızı karşılayabilecek çeşitli hizmetler sunmaktadır. Ancak hizmet sağlayıcı seçiminden bağımsız olarak, bu makalede bahsettiğimiz ilkeler tüm S3 uyumlu hizmetlerde aynıdır ve becerilerinizi her platforma taşıyabilirsiniz.

Şimdi sıra sizde: bir bucket oluşturun, ilk dosyayı yükleyin ve işin basitliğinin keyfini çıkarın. Bir hatayla karşılaşırsanız, sorun giderme bölümünü tekrar gözden geçirin — muhtemelen cevabınız oradadır.

Bu sayfa yardımcı oldu mu?