Pazar, Aralık 22, 2024

Hetzner Object Storage Kullanımı

Açık sabit disk sürücüsü donanımı ve devreleri.

S3 uyumlu Object Storage, verileri “Bucket” kaydetmeniz için size depolama alanı sağlar. Hetznerda bu kaydettiğiniz tüm veriler bir Ceph clusterinde kaydedilir. Herkese açık olarak kullanırsanız aşağıdaki şekilde herkes erişebilir.

https://<bucket-name>.<location>.your-objectstorage.com/<file-name>
ShellScript

Yüklenen dosyalar değiştirilemez, bu sebeple temel amaç WORM(Write once, read many [times]) olarak kullanılmasıdır.

  • Statik bir web sitesi barındırma
  • Yedeklerin tutulması
  • Verileri halka açık veya özel bir şekilde paylaşılması

Diğer bulut tabanlı uygulamalar ile kullanılabilir herhangi bir kısıtlama bulunmamaktadır. Hetzner’ın Object Storage ürünü S3 ile uyumludur bu sebeple S3-compatible olarak geçen tüm uygulamalar ile sorunsuz çalışabilmektedir Amazonun resmi olarak geliştirdiği bütün yazılımları kullanabilirsiniz.

KaynakÖzellikAçıklama
BucketsCreateHeader: x-amz-bucket-object-lock-enabledx-amz-acl (allowed value: private)
CreateBucketConfiguration XML Body: LocationConstraint
List
Delete
Location
HeadBucket
ACL
Policy
Encryption (SSE only)
Lifecycle
ObjectsPutObject
GetObject
DeleteObject
HeadObject
ACL
ObjectLock
(bucket oluşturma aşamasında seçilmelidir)
Retention
Legal Hold
Tagging
Versions

Ayrıca minio tarafından geliştirilen mc uygulamasını da kullanmanız mümkün olduğu gibi boto3 ve s3cmd gibi araçlardan’da faydalanabilirsiniz.

Python’da kullanmak isterseniz aşağıdaki örnekten faydalanabilirsiniz.

import boto3
from botocore.exceptions import ClientError

s3 = boto3.resource('s3',
  endpoint_url='https://XYZ.fsn1.your-objectstorage.com',
  aws_access_key_id='<ACCESS KEY>',
  aws_secret_access_key='<SECRET KEY>',
  aws_session_token=None,
  config=boto3.session.Config(signature_version='s3v4'),
  verify=True,
)

bucket_name = 'your-unique-bucket-name'

try:
  response = s3.create_bucket(Bucket=bucket_name)
  print(f"Bucket {bucket_name} created successfully.")
except ClientError as e:
  print(f"Error creating bucket: {e}")
Python

Bu yapılandırmayı Hetzner’ın desteklediği özellik setine göre yaptığımızı hatırlatırım.

ÖzellikDesteklenen Standart
AWS Signature versionVersion 4 algorithm
Storage classesStandard
Server-Side Encryption (SSE)SSE-C

Hetzner’da S3 Bucket Nasıl Oluşturulur?

Arayüz üzerinden direk olarak S3 bucket oluşturmak için Proje içerisinde sol menüden “Object Storage” seçilir. “Create Bucket” butonuna tıklanır ve uygun şekilde doldurulur.

“Create & But Now” dendiği anca bucketiniz hazırlanmaya başlar ve çok kısa bir sürede aktif olur. Panelinizde aşağıdaki gibi gözükmeye başlar.

Dosyalarınızı ister “Files” sekmesinden “Upload Files” yönergeleri ile yapabilir, isterseniz de S3 API destekli uygulamalar üzerinden yükleyebilirsiniz.

Hetzner S3 Credentials Nasıl Alınır?

Sol menüde bulunan “Security” geçiş yapın, hemen ardından “S3 Credentials” sekmesine tıklayın. Karşınıza çıkan alandan “Generate credentials” deyin ve bir açıklama girin.

Size aşağıdaki gibi 2 adet anahtar verecek bunlarla bucketınıza erişerek istediğiniz işlemleri yapabilirsiniz.

Access Key: 2T3BUTKTB6G580HKFKTK
Secret Key: EVjEioyd7WCQhYRUi3ScFJ8r0NoKqQRM6WIOSbbI
Python

Diğer sağlayıcıların aksine oluşturduğunuz bu anahtar için erişim kuralı girebilirsiniz. Hangi bucketa erişmesi gerekiyorsa onun için kısıtlayabilirsiniz.

  • project_id: Oluşturduğunuz projenin ID’si tarayıcının üstünde yazar(https://console.hetzner.cloud/projects/<project-ID>/servers)
  • access_key: Sistemden almış olduğunuz access key bilgisi
  • your-bucket-name: bucket adınız.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:::user/p<project_id>:<access_key>"
      },
      "Action": "s3:*",
      "Resource": [
          "arn:aws:s3:::your-bucket-name",
          "arn:aws:s3:::your-bucket-name/*"
          ]
    }
  ]
}
Python

Girmiş olduğunuz bu bucket politikasını S3 uyumlu herhangi bir api ile sisteme kayıt edebilirsiniz. Minio’nun kendi clientini kullanmak isterseniz.

Önce kullanacağınız bucketi mc’ye tanıtın

mc alias set hetzner-bucket \
  https://xyz.fsn1.your-objectstorage.com \
  <your_access_key> <your_secret_key> \
  --api "s3v4" \
  --path "off"
Python

Ardından oluşturduğunuz alias ile aşağıdaki kuralı uygulamaya geçebilirsiniz.

mc anonymous set-json my-policy.json hetzner-bucket/mertcangokgoz
Python

Kullanabileceğiniz S3 uyumlu bazı araçlar

S3 Bucket Versioning nasıl aktif edilir?

Nesnelerinizin yanlışlıkla silinmesini önlemek için Sürüm Oluşturma özelliğini kullanabilirsiniz. Her nesneye otomatik olarak bir sürüm kimliği atanır, bu da aynı nesnenin birkaç sürümünü tek bir bucket içinde tutmanıza olanak tanır. bucket içinde zaten var olan bir ada sahip bir nesne yüklerseniz (örn. cemil.txt), var olan nesne silinmez; bunun yerine nesneler sürüm kimlikleriyle ayırt edilir. Nesnelerin manuel olarak silinmesi hala mümkündür. Ancak farklı versiyonları bucket içerisinde durmaya devam eder.

Minio kullanarak aktif etme

mc version enable hetzner-bucket/mertcangokgoz
ShellScript

AWS Cli kullanarak aktif etme

aws s3api put-bucket-versioning --versioning-configuration Status=Enabled --bucket mertcangokgoz
ShellScript

S3 Bucket Legal Hold nasıl aktif edilir?

Nesne Kilitleme, seçilen nesnelerin manuel olarak silinmesini devre dışı bırakmanıza olanak tanır. Nesne kilitleme ile “legal hold” ve “retention” seçenekleri arasında seçim yapabilirsiniz. Legal hold, tekrar manuel olarak kaldırılana kadar bir nesnenin silinmesini önler. Retention, bir nesnenin belirli bir süre geçene kadar silinmesini önler.

Retention’nın iki farklı modu vardır: “Governance” ve “Compliance”.

Otomatik silmeManuel silmeAynı ada sahip nesneler
Versioningdevre dışıetkinBir nesneyi silmek için önce yasal tutmayı kaldırmanız gerekir. Bu herhangi bir özel izin gerektirmez, ancak yanlışlıkla silmeyi önlemeye yardımcı olabilecek ekstra bir adım ekler.
Legal HoldVersioning is automatically enabled and you cannot disable it.Bir nesneyi silmek için önce “legal hold” kaldırmanız gerekir. Bu herhangi bir özel izin gerektirmez, ancak yanlışlıkla silmeyi önlemeye yardımcı olabilecek ekstra bir adım ekler.Sürüm oluşturma otomatik olarak etkinleştirildiğinden, farklı bir sürüm kimliğine sahip yeni bir nesne eklenir. Yeni nesne için “legal hold” tekrar etkinleştirmeniz gerekecektir.
Retention
(Governance Modu)
Sürüm oluşturma otomatik olarak etkinleştirilir ve bunu devre dışı bırakamazsınız.Yalnızca özel izinlere sahip kullanıcılar saklama süresini daha erken sonlandırabilir ve nesneyi orijinal saklama süresi sona ermeden silebilir.Sürüm oluşturma otomatik olarak etkinleştirildiğinden, farklı bir sürüm kimliğine sahip yeni bir nesne eklenir. Yeni nesne için saklama süresini yeniden ayarlamanız gerekecektir.
Retention
(Compliance Modu)
Sürüm oluşturma otomatik olarak etkinleştirilir ve bunu devre dışı bırakamazsınız.Hiç kimse saklama süresini daha erken sona erdiremez ve saklama süresi sona ermeden nesneyi silmek mümkün değildir.Sürüm oluşturma otomatik olarak etkinleştirildiğinden, farklı bir sürüm kimliğine sahip yeni bir nesne eklenir. Yeni nesne için saklama süresini yeniden ayarlamanız gerekecektir.

Minio kullanarak object lock aktif etme

mc mb hetzner-bucket/mertcangokgoz --with-lock --region fsn1
ShellScript

AWS Cli kullanarak object lock aktif etme

aws s3api create-bucket \
  --bucket mertcangokgoz \
  --region fsn1 \
  --object-lock-enabled-for-bucket
ShellScript

Minio kullanarak legal hold aktif etme

mc legalhold set --recursive hetzner-bucket/mertcangokgoz 
ShellScript

AWS Cli kullanarak legal hold aktif etme

aws s3api put-object-legal-hold --bucket mertcangokgoz \ 
  --key cemil.txt --legal-hold Status=ON
ShellScript