S3 hakkında bilmenizi istemedikleri şeyler
(blog.plerion.com)- AWS veri sızıntısı risklerinde S3 bucket’larına yetkisiz erişim tekrar tekrar karşımıza çıkar; eski API tasarımı ve istisnai davranışlar nedeniyle basit bir “açık/kapalı” değerlendirmesi yapmak zordur
- Birçok S3 işlemi genel AWS endpoint’i yerine bucket URL’sinin kendisine çağrı yapılarak gerçekleştirilir; hatalı bucket politikalarında kimlik doğrulamasız
curlistekleriyle bile riskli işlemler mümkün olabilir - Yalnızca
s3:ListBucket’ı engellemek güvenli sayılmak için yeterli değildir;ListBucketVersions,ListMultipartUploads,fetch-ownergibi yollar nesne anahtarlarını ve hesap tanımlayıcılarını açığa çıkarabilir - Yükleyici storage class, etiketler, Object Lock ve bazı yönlendirmeyle ilgili header’lar gibi nesne özelliklerini etkileyebilir; bu yüzden IAM koşulları ve yaşam döngüsü politikaları gibi ek kontroller gerekir
- Yalnızca ACL ve public access block ayarlarına bakarak özel olduğunu varsayarsanız bazı yolları kaçırabilirsiniz; CloudFront dağıtımı veya Cognito identity pool üzerinden internet kullanıcıları S3 nesnelerine erişebilir
Eski S3 API tasarımı ve anonim çağrılar
- S3, AWS’nin ilk hizmetlerinden biri olduğu için sağlam ve iyi test edilmiştir; ancak standartlaşmış tasarım kalıplarından önceki izler nedeniyle diğer AWS hizmetlerinden farklı bir API biçimine sahiptir
- Bazı S3 API’leri
s3.us-east-2.amazonaws.comgibi genel endpoint’leri kullanır, ancak birçok işlem doğrudan hedef bucket URL’sine istek göndermeyi gerektirir- Bucket listesini alma örneği,
Host: [bucketname].s3.amazonaws.combiçimindeGET /isteğidir - Bucket etiketlerini alma da ilgili bucket host’una
GET /?tagginggönderir
- Bucket listesini alma örneği,
- EC2 veya DynamoDB gibi birçok AWS hizmetinde genel endpoint kullanmak ve hedef kaynağı HTTP header’ı ya da parametre olarak iletmek yaygındır
- S3 bucket’ları hem public access’i hem de kimlik doğrulamalı erişimi desteklediğinden, hangi API işlemlerinin kimlik doğrulaması olmadan yapılabildiği her zaman net değildir
- Örnek bir bucket politikası, bucket kaynağı için
Principal: "*"veAction: "s3:*"izni verirse, kimlik doğrulaması olmayan isteklerle bile bucket silinebilir- Örnek istek:
curl -X DELETE https://[bucketname].s3-ap-southeast-2.amazonaws.com
- Örnek istek:
- Bazı işlemler anonim istekleri desteklemez ve
s3:GetBucketOwnershipControls does not support Anonymous requests!gibi bir hata döner - Anonim API istekleri CloudTrail’de anonymous hesabı olarak kaydedilir
- İstek kimliği doğrulanmamışsa bucket’ı kimin sildiğini, şifreleme ayarlarını veya logging durumunu kimin sorguladığını belirleyemezsiniz
/?logging,/?tagging,/?encryptiongibi yollar tarayıcıda da test edilebilirGetObjectTorrentgibi belgeleri hâlâ duran, ancak artık çalıştırılamayan işlemler de vardır
Yalnızca ListBucket’ı engellemek nesne anahtarlarının sızmasını önlemeye yetmez
- Bir S3 nesnesini indirmek için her nesnenin anahtarı gerekir; anahtar, dosya yolu gibi kullanılır
- Kök bucket’a yapılan
GETisteği koşullara bağlı olarak bucket içeriğini döndürebilir; bu yüzdens3:ListBucket’ı reddetmek yaygın bir savunma gibi görünür public-readACL iles3:ListBucketreddetme politikasını birlikte kullansanız bile nesne anahtarlarını elde etmenin yolları kalırGET /?versions, yanis3:ListBucketVersions, bucket içindeki nesne sürümlerinin metaverisini döndürürGET /?uploads, yanis3:ListMultipartUploads, devam eden multipart upload listesini döndürür
HeadBucketbelgelerinde bucket’ın varlığını ve erişim yetkisini kontrol etmeye dair ifadeler vardır; ancak pratikteListBucketişlemini yapma yetkisi olup olmadığını kontrol eder- Yalnızca
ListBucket’ın reddedilip reddedilmediğini doğrularsanız S3 nesne anahtarlarının açığa çıkma olasılığını kaçırabilirsiniz
Tamamlanmamış multipart upload’ların maliyeti ve sızıntısı
- Multipart upload,
create-multipart-uploadile başlatılır ve parçalarupload-partile yüklenir - Tamamlanmamış multipart upload’ları web konsolunda görmek kolay değildir;
/?uploadsveyaaws s3api list-multipart-uploads --bucket [bucket-name]ile kontrol edilebilir - Tamamlama isteği başarıyla gönderilmezse Amazon S3 parçaları birleştirmez ve nesneyi de oluşturmaz
- Yüklenen parçalar multipart upload tamamlanana veya iptal edilene kadar hesapta kalır
- Saklanan parçalar için S3 depolama maliyeti oluşur
- Tamamlanmadan önce nesnenin parçalarını indirmenin bir yolunu bulamadım, ancak silmek mümkündür
- AWS, belirli bir gün sayısından sonra tamamlanmamış upload’ları silen yaşam döngüsü kuralı uygulanmasını önerir
/?uploadsile tamamlanmamış multipart upload’ları listelediğinizde, upload’ı başlatan principal’ın ARN’i döner- Hesap ID’si ve ARN gibi tanımlayıcıları hassas görmeyen bir bakış açısı için bu sorun olmayabilir
- Saldırganlar için faydalı olabilecek tanımlayıcıların açığa çıkmasını istemiyorsanız bunu bir sızıntı olarak görebilirsiniz
ACL ve e-posta tabanlı hesap doğrulama
- S3 ACL belgelerinde, AWS hesaplarının root kullanıcı e-postasıyla tanımlandığı dönemden kalma izler bulunur
PutBucketACLişlemi grantee’yi e-posta adresiyle belirtebilirType: AmazonCustomerByEmailveEmailAddresskullanılır
- Belirtilen e-postaya bağlı bir AWS hesabı yoksa
UnresolvableGrantByEmailAddresshatası oluşur- Hata mesajı “sağlanan e-posta adresi kayıtlardaki hiçbir hesapla eşleşmiyor” biçimindedir
- Bu davranış nedeniyle belirli bir e-posta adresinin kayıtlı bir AWS hesabına sahip olup olmadığı doğrulanabilir
Yükleyicinin seçebileceği storage class ve nesne metaverisi
- S3’ün storage class’ı bucket’a değil, nesneye uygulanır
- Bucket düzeyinde istenen storage class’ı sabitleyen bir ayar yoktur; upload yapan taraf nesnenin storage class’ını belirleyebilir
- Örnek:
aws s3 cp "my.txt" "s3://mybucket/myobject.txt" --storage-class [CLASS]
- Örnek:
- Yükleyici, önceden tanımlanmış liste içinden, bucket sahibinin üstleneceği GB başına depolama ve erişim maliyetlerini etkileyebilir
- IAM politikasında
s3:x-amz-storage-classkoşul anahtarı kullanılırsa izin verilen storage class’lar sınırlandırılabilir- Örnek politika,
s3:PutObjectiçin yalnızcaSTANDARD’a izin verir
- Örnek politika,
- Yaşam döngüsü politikası ayarlanırsa belirli bir süreden sonra tüm nesneler belirli bir storage class’a taşınabilir
- Pre-signed URL kullanan upload’larda AWS Signature Version 4,
X-Amz-ile başlayan tüm header’ların imzalanmasını gerektirir- Storage class,
x-amz-storage-classheader’ı ile belirtilir - Uygulama çok hatalı uygulanmadıysa bunu hemen manipüle etmenin belirgin bir yolu yoktur
- Storage class,
Etiketler, Object Lock ve yönlendirme de yükleyicinin etki alanındadır
- S3 nesneleriyle ilgili birçok özellik yükleyici tarafından kontrol edilir
- Nesne etiketleri upload sırasında belirtilebilir
- Örnek:
--tagging "AllYourTags=AreBelong&To=Us"
- Örnek:
- Etiket değerlerine göre otomasyon yapan sistemler, yükleyicinin oluşturduğu etiket değerlerinden etkilenebilir
- Object Lock, bucket’ta object locking etkinse nesne saklama ve legal hold ayarlamaya olanak tanır
- Örnek komut
--object-lock-retain-until-date "2099-01-01T00:00:00+0000",--object-lock-legal-hold-status "ON",--object-lock-mode "COMPLIANCE"kullanır
- Örnek komut
- Statik web sitesi barındırma etkin olan bucket’larda, yüklenen dosya ayarları kullanılarak open redirect yapılabilir
PutObject’in desteklediği tüm header listesine de dikkat edilmelidir- Pre-signed URL’lerde sınırlamalar vardır
- Cognito identity ve IAM politikalarına dayanan yapılandırmalarda, kimliği doğrulanmış Cognito bağlamıyla istek imzalanabilir
Bucket sahibi ve hesap tanımlayıcılarının açığa çıkması
- Belirli bir hesap ID’sinin erişilebilir bir bucket’ın sahibi olup olmadığını kontrol etmek için
ListBucketisteğinex-amz-expected-bucket-ownerheader’ı eklenebilir- Yanlış hesap ID’si girilirse
AccessDenieddöner - Doğru hesap ID’si girilir ve çağıranın
ListBucketyetkisi varsa normal yanıt döner
- Yanlış hesap ID’si girilirse
ListBucketAPI’sininfetch-owner=trueparametresi kullanıldığında yanıttaki her anahtara Owner öğesi eklenirOwneriçindekiID, AWS belgelerinde canonical user ID olarak adlandırılan 64 karakterlik onaltılık bir dizgedir- AWS hesap ID’sinin gizlenmiş bir biçimidir
- Canonical user ID, IAM politikasının
PrincipalalanınaCanonicalUserolarak eklenip kaydedildikten sonra sayfa yenilenirse AWS hesap ID’si olarak çözümlenir ListBucketVersionsveListMultipartUploadsdafetch-ownerolmadan benzer şekilde davranır
S3 nesne anahtarları dosya adı gibi görünür ama farklı çalışır
- S3 nesne anahtarları büyük/küçük harfe duyarlıdır
- Adları aynı görünse bile büyük/küçük harf farklıysa birden fazla nesne yüklenebilir
- Bir uygulama S3 nesne anahtarlarını büyük/küçük harfe duyarsız dosya adları gibi ele alırsa sorunlar ortaya çıkabilir
- Örnek uygulama kullanıcı parolalarını S3 dosyasında saklar ve dosya adını kullanıcı adı olarak kullanır
- Kayıt sırasında yalnızca dosyanın var olup olmadığını kontrol eder; parola değiştirirken kullanıcı adını küçük harfe çevirip dosyaya yazar
jeffzaten var olsa bileJEFFkaydı yapılabilir;JEFFkullanıcısı parola değiştirerekjeff’in dosyasının üzerine yazabilir
- S3 nesne anahtarlarında herhangi bir UTF-8 karakter kullanılabilir
- Belirli karakterler bazı uygulamalar ve protokollerde sorun çıkarabilir
- Boşluk, eğik çizgi ve yüzde karakteri gibi karakterler de nesne anahtarında geçerlidir
“Özel bucket” gibi görünse de erişim yolları kalabilir
- ACL kapalı, kaynak politikası dar ayarlanmış ve block public access etkin olsa bile bucket herkese açık şekilde erişilebilir olabilir
- En yaygın yol Amazon CloudFront dağıtımıdır
- S3 bucket’ın önüne CDN konduğunda genellikle amaç internet üzerinden içerik sunmaktır
- Güvenlik araçları, bucket kaynak politikası CloudFront ile sınırlandırılmışsa bunu public olarak değerlendirmeyebilir
- Örnekte
get-bucket-policy-status,IsPublic: falsedöndürür- Bucket’a doğrudan istek atıldığında
AccessDenieddöner - Aynı istek CloudFront dağıtım domain’ine gönderildiğinde nesne içeriği döner
- Bucket’a doğrudan istek atıldığında
- Cognito identity pool da sınırlı kaynak politikasına sahip bucket’ları açığa çıkarabilir
- Cognito, başarılı girişten sonra önceden ayarlanmış rolün geçici AWS kimlik bilgilerini sağlar
- Bu rolde
s3:ListBucketves3:GetObjectyetkileri varsa kullanıcı S3 API’yi çağırabilir
- Public access kapsamına girebilecek iki Cognito ayarı vardır
- Self-registration: İnternet kullanıcıları uygulamaya kaydolup giriş yapabiliyorsa bu fiilen public access olur
- Guest access: Kimliği doğrulanmamış kullanıcılara benzersiz tanımlayıcı ve AWS kimlik bilgileri sağlar
- Guest access örneği,
get-idileIdentityIdalıpget-credentials-for-identityile geçici kimlik bilgileri aldıktan sonra ilgili profilleaws s3 lsçalıştırma akışıdır - CloudFront ve Cognito identity pool, internette gerçekten sık kullanılan ancak güvenlik araçlarında nadiren gösterilen public access yollarıdır
1 yorum
Hacker News yorumları
İlginç birçok nokta var, ancak dosya sisteminin büyük/küçük harfe duyarlı olmasını bir şikâyet konusu olarak görmeye katılmak zor
Zaten böyle olması gerektiğini düşünüyorum; macOS’un böyle yapmaması asıl can sıkıcı olan
Dosya adlarında büyük/küçük harf duyarlılığı teknik olmayan kullanıcılar için de şaşırtıcı gelebilir. Biri “Book Draft 1.docx” gönderdiğini söylediğinde posta kutusunda “Book draft 1.docx” varsa, normalde “Sanırım farklı bir dosya göndermişsiniz?” demezsiniz
Yazıda da büyük/küçük harf çoğu zaman anlamı değiştirmez. “Hi, how are you?” ile “hi, how are you?” aynı anlama gelir; büyük harfin anlamı değiştirdiği durumlar da özel adlarla cins adları ayırmak gibi şeylerdir ki dosya adlarında bu nadiren önem verilen bir konudur
Kişisel tercihler bir yana, bir geliştiricinin ya da sistem yöneticisinin dosya sisteminin büyük/küçük harfe duyarlı olmasına şaşırmasını veya sinirlenmesini anlamak zor. Gerekirse geliştirici bunu arama sonuçlarında olduğu gibi son kullanıcı için soyutlayabilir
Kodlamada olduğu gibi kod stilini zorlayıp okunabilirliğe yardımcı olan bir şey de değil. Programlamada bile IDE’ler değişken adı yazım hatalarını yakalayacak kadar akıllı hale gelmeden önce bu bir hata kaynağı olabiliyordu. Pascal’ın C’ye kıyasla güzel yanlarından biri büyük/küçük harfi dert etmemesiydi
Dosya adını istediğiniz stilde yazabilirsiniz ve o yazım korunur; ancak ararken veya işlerken o stili tam olarak hatırlamanız gerekmez. Çünkü arama büyük/küçük harfe duyarlı değildir
Büyük/küçük harf duyarlılığı kolay sayılır; daha az sezgisel olan şey S3 yollarının sahte olmasıdır
S3 “/builds/1/installer.exe” yüklemesini kabul eder ve /builds içindeki listeyi de gösterir, ama gerçekte adına '/' dahil olan '/builds/1/installer.exe' adlı tek bir key yüklemiş olursunuz
Bu yüzden “/builds/1//installer.exe” ve “/builds//1/installer.exe” de yüklenebilir ve tamamen farklı dosyalardır. Bunlar yalnızca key adıdır; gerçek dizin yoktur
[1] https://docs.aws.amazon.com/AmazonS3/latest/userguide/direct...
Bu yıl bizim üretim sistemimiz de tuhaf bir bug yaşadı ve ancak 5 kişi uğraşınca bulabildik. Sebep, adı birebir “/” olan bir nesneydi; yazılım bunu dosya değil yol gibi ele almaya çalışmıştı
S3’e ya da başka AWS hizmetlerine güvenerek kullanmak zor. Sezgisel hiçbir şey yok, çalışan parça sayısı çok fazla, okunması gereken doküman da çok fazla
Bunu yapsanız bile, kaynak yazıda olduğu gibi yanlışlıkla her şeyi dünyaya açık hale getirebilirsiniz. Ben bunun yerine Hetzner Storage Boxes veya DigitalOcean Spaces gibi gerçekten basit hizmetleri kullanırım
Yakın zamanda birkaç MB’tan büyük video dosyalarını pipe ile yükleyince dönen Location içinde https:// kısmını atladığını fark ettim. Bu yüzden her dosya yüklemesinde Location’ın https ile başlayıp başlamadığını kontrol etmek, yoksa eklemek gerekiyor
Elbette S3 Node istemcisi GitHub issue’sunda “DigitalOcean bug’ı gibi görünüyor” deniyor; DigitalOcean forumunda ise “S3 Node istemcisi bug’ı gibi görünüyor” deniyor
Başta bazı özel durumlara yardımcı olmak için tasarlanmış sayısız özellik ve tuhaflık artık genel protokolün parçası haline gelmiş. İş açısından kimsenin geri dönüp vazgeçmemesini sağlamaya çalışınca böyle olmuş gibi görünüyor
On milyarlarca nesneyi silerken de dikkatli olmak gerekir. Silme API'sini doğrudan çağırmak pahalıya mal olabilir
Bunun yerine joker karakterler ya da tüm bucket için sona erme zamanını now olarak ayarlayan yaşam döngüsü kuralını ücretsiz tanımlayabilirsiniz. Böylece depolama ücretlendirmesi hemen durur ve AWS silme işlemini kendi halleder
S3 API sunucusunun saniyedeki istek sayısıyla dövülmesini de önleyebilir
Başarısız multipart upload'ların görünmeden kalması ve açıkça yaşam döngüsü ayarı yapmazsanız depolama maliyeti bile çıkarması gerçekten kötü
“Simple”daki S'nin sadelik anlamına geldiğini sanıyordum
Benim önerim, tamamlanmamış upload'ların parçalarının son etkinlikten sonra yalnızca 24 saat kalması ve bu süre boyunca depolama ücreti de alınmamasıydı. ahenry@ bunu reddetti
Çok eski bir sunucuda, neredeyse 10 yıl boyunca her gece multipart upload başlatan bir cron betiği çalışıyordu. Yedekleri bir bucket'a göndermek içindi; o bucket aynı zamanda kullanıcıların yüklediği içerikleri de sakladığından her gün biraz büyümesi normal görünüyordu
Betik “çalışmıyor” durumdaydı, bu yüzden yedek verilerine güvenmiyorduk; S3'te de dosyalar görünmüyordu ve bucket boyutu düzenli ama aşırı olmayan şekilde artıyordu. Fakat bu ilkbaharda baktığımızda neredeyse 3 TB tamamlanmamış multipart upload sakladığını gördük
Elbette bu anekdotun kötü uygulamalarla dolu olduğunu biliyorum
Büyük/küçük harf duyarlı/duyarsız tartışmaları genel olarak fazla İngilizce merkezli geliyor
Başka bir deyişle, özellikle IT'de dil konulu tartışmalar çoğu zaman aşırı İngilizce merkezli oluyor
Ana dili İngilizce olmayan biri olarak söyleyeyim: programlamada zaten fazlasıyla kavram ve unsur var. Buna 101 farklı dili daha düşünerek karmaşıklık eklememek daha iyi
Unicode ve zaman dilimleri, programlamada daha fazla dil ve kültürü hesaba katmaya çalışan başlıca unsurlar; sonuçta İngilizce konuşmayan programcılar dahil herkes için en büyük acıyı yaratıyorlar
Kendi ana dilimde program yazmak istemiyorum. Bunun bedeli, programlama yaparken tüm büyük dilleri hesaba katmak olacaksa hiç istemem. IT tartışmalarının İngilizce merkezli olması sorun değil. Çeşitlilik karmaşıklıktır; İngilizce de birinin sahip olduğu bir dil değil, insanların iletişim için kullandığı bir araçtır
O ortak dil sayesinde Hindistan, Çin, Japonya, Güney Amerika ve başka pek çok yerdeki insana düşüncelerimi ifade edebiliyorum. İngilizce konuşmaya karar verdikleri anda onlar da İngilizceye sahip olur. IT'ye çeşitlilik siyasetini taşımaya gerek yok; bunu teknik düzlemde bırakmak daha iyi
Bir bakıma bu iki hece yazısı büyük/küçük harfli alfabe gibi hissettiriyor
Birkaç nokta daha var
Multipart upload, instance kimlik bilgilerine sahip birden fazla makineden yapılamaz. Çünkü principal farklı olduğundan birbirlerinin multipart upload’larına erişemezler. Birden fazla makinede tek bir multipart upload’ı birleştirmek istiyorsanız gerçek bir IAM kullanıcısı gerekir
LIST istekleri yalnızca yavaş değil, büyük ölçekte çok pahalıdır. “bucket inventory” gibi geçici çözümler var ama ne kullanışlı ne de ucuz
Bucket oluşturma içeride DNS kullandığı için yazma sonrası okuma tutarlılığı yoktur. Bu yüzden bucket’ı oluşturduktan hemen sonra erişemeyebilir ya da değişikliğin yayılması için yeterince beklemeden yeni oluşturduğunuz bucket’ı silemeyebilirsiniz. Bkz. https://github.com/julik/talks/blob/master/euruko-2019-no-su...
Aynı anda “foo” adlı bir nesne ve “foo/bar” adlı bir nesne oluşturabilirsiniz. Böyle olunca dosyanın dizinin üstüne yazdığı bir yapı oluşur ve bucket verileri dosya sistemi yapısına taşınamaz hale gelir
S3 büyük/küçük harfe duyarlı olduğu için dosya sistemi yapısına taşınması mümkün olmayan nesneler oluşturabilirsiniz. Rails dosya deposu büyük/küçük harfe duyarlı depolama varsaydığı için macOS’ta ciddi şekilde bozulmuştu; sonrasında tanımlayıcıları her zaman küçük harfle kullanacak şekilde düzeltildi
Çoğu S3 ayarı GET’e izin verir ama HEAD’e izin vermez. Bu, nesnenin var olup olmadığının keşfedilmesini engellemek için kullanılan bir yöntem gibi görünüyor ama emin değilim. Her durumda, HEAD isteğiyle nesne boyutunu kontrol eden cache dostu akış, özellikle pre-signed URL’lerde çalışmaz. Bunun yerine Range’i çok küçük tutan bir GET, örneğin yalnızca ilk byte’ı almak gibi bir yöntemle etrafından dolaşmanız gerekir
Çok sayıda pre-signed URL üretiyorsanız üretim hızını 10–40 kat artırma ihtimaliniz var: https://github.com/WeTransfer/wt_s3_signer
Tamamlanmamış multipart upload’ların depolama maliyetini de hâlâ ödersiniz. Kullanıcıların bu tür upload’ları başlatabildiği bir mimariniz varsa özellikle dikkatli olmalısınız. Belirli bir süre sonra tamamlanmamış multipart upload’ları otomatik silen bir ayar var; başınız ağrımasın istiyorsanız açmalısınız
Paradoksal biçimde S3 devrim niteliğindeydi ve hâlâ birçok katmanda harika bir ürün. Ancak çok fazla özelliği olduğu kadar çok fazla tuzağı da var
Elixir’de Stream.transform(https://hexdocs.pm/elixir/Stream.html#transform/3) kullanarak sütunları değiştiren ve ekleyen bir streaming CSV son işleme pipeline’ı oluşturdum. Elixir’in AWS ve CSV modülleri gelen streaming veriyi işliyor; ancak çıkan stream’in toplamı 5MiB’den küçükse AWS modülü multipart upload kullandığı için S3 hata verdi, bu da üzücüydü
Bir iş arkadaşımla birkaç gün analiz edip teşhis ettiğimiz başka ilginç bir sorun daha var. S3, tek bir TCP bağlantısı 100 HTTP isteği gönderdikten sonra sonraki istekleri sessizce çöpe atıyor
https://github.com/aws/aws-sdk-go/issues/2825
Performans nedeniyle keep-alive istemek ama istemcinin çok uzun süre bağlı kalıp yük dengeleyicide hotspot oluşturmasını engellemek istediğinizde bu yaygın bir paterndir
S3’ün standart storage class’ta gecikmesinin yüksek olması nedeniyle web sunumu için uygun olmaması da var
Birçok kişi görseller veya fontlar gibi web sitesi kaynaklarını doğrudan S3’ten host edebileceğini düşünüyor ama kullanıcı deneyimi kötüleşebilir
“applications can achieve consistent small object latencies (and first-byte-out latencies for larger objects) of roughly 100–200 milliseconds.”
Kaynak: https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimi...
CloudFront signed cookies kullanırsanız belirli bir kullanıcıya yalnızca S3’te kendisine ait içeriğe CDN erişimi de verebilirsiniz. Oldukça güzel
Sık erişilen varlıkları cache’leyerek gecikmeyi azaltabilir, maliyeti de epey düşürebilirsiniz
Kuralları uploader’ın belirlemesi epey sert. Ayarları gevşek bir web sitesi söz konusuysa, yeterince motive bir kullanıcının kullanıcı içeriğini Amazon Glacier’a yükletip daha sonra oradan servis edilmesini sağlaması anlamına mı geliyor?
https://docs.aws.amazon.com/service-authorization/latest/ref...
Özellikle condition key’ler burada; storage class veya tagging gibi şeylere erişimi kontrol eden key’leri görebilirsiniz
https://docs.aws.amazon.com/service-authorization/latest/ref...