Sitemap
Samet USTAOGLU

Samet USTAOGLU

S3 (Simple Storage Service)

13 min readNov 5, 2021

--

Daha önce depolama çözümleri olarak EBS ve EFS servislerini anlatmıştım. S3 son depolama çözümümüz. EFS yazısında karşılaştırmalı anlatırken S3'ü de dahil etmiştim burada çok bahsetmeyeceğim çünkü bu kısım uzun olacak.

S3 Obje tabanlı depolama çözümüdür. İşletim sistemi uygulama veya veritabanı kurulamaz ve hacim belirtilmez içine veri koydukça büyür bu özellikleriyle EFS’e benzerken EBS’ten ayrılıyor. Fiyatlandırma anlamında da diğer çözümlerden daha uygun bir servistir. Google drive gibi düşünebiliriz. Ayrıca EBS veya EFS’te olduğu gibi bir EC2 ile ilişkilendirilmez her yerden erişilebilir.

Bucket

S3 servisinin içerisinde bucket denilen yapılarda objeleri muhafaza ederiz. Bucket’lar için mantıksal depolama birimi diyebiliriz. Bucket içerisinde her türlü formatta veri depolayabiliriz. S3 global bir servis olmasına rağmen oluşturulan bucket için bir region seçmemiz gerekir. Oluşturulan bucket içerisindeki veriler region içerisindeki en az 3 AZ’de yedeklenir. Bir hesap ile maksimum 100 bucket oluşturulabilir. Fakat bucket içine konulacak veri için sınır yoktur istediğiniz kadar veri koyabilirsiniz. Tek bir dosyanın maksimum boyutu 5 TB olabilir. Eğer obje 5GB’dan büyükse multi-part upload kullanılmalıdır. Upload edilecek verinin büyüklüğü 160 GB’a kadar ise konsol kullanılabilir ama daha fazla ise AWS CLI, AWS SDK veya Amazon S3 REST API kullanılması gerekir. Bucket ismi global anlamda uniq olmalıdır daha önce kullanılan bir ismi kullanamayız. Ayrıca isim verirken sadece küçük harf, rakam, “-” ve “.” kullanılır. Bucket’a 3 türlü erişim mümkündür. Birincisi kendi IAM user’larınız, ikincisi bir başka AWS accountu, sonuncusu ise public yeni herkesin ulaşabildiği erişim şeklidir. Default olarak dış dünyaya kapalıdır sizin açmanız gerekir. Bucket’ı web sitesi host etmek için kullanabiliriz detayları aşağıda anlatılacak. Konsola geçelim bir bucket oluşturalım ve özelliklerine bakalım.

S3 servisini açalım. Create bucket’a tıklayalım. Aşağıdaki resimde bucket’ımıza isim verelim isim verirken yukarıda bahsettiğimiz kısıtlara dikkat edelim. Bucket için region seçelim. Copy settings from existing bucket — optional > seçeneğiyle yeni oluşturacağınız bucket için daha önce oluşturulmuş bucket ayarlarını kullanabilirsiniz.

Press enter or click to view image in full size

Aşağıdaki resimde public erişim için default olarak kapalı gelen kısıtlamalar mevcut. AWS ilk bucket oluşturduğunuzda dış dünyaya kapalı olacak şekilde seçiyor siz isterseniz açabilirsiniz. Web sitesi host etmek gibi uygulamalarda açacağız. Konu hakkında detaylı bilgi yazının devamında S3'te güvenlik başlığında mevcut.

Press enter or click to view image in full size

Aşağıdaki resimde versiyonlamayı açma, etiket verme ve şifreleme seçenekleri var. Versiyonlama objelerin yanlışlıkla silinmesi durumunda veya değiştirilmesi durumunda eski versiyonlarına erişebilme imkanı verir. Enable yapıldığında tekrar kapatılamaz sadece suspend edilir. Supend edilirse eski dosyalarda versiyonlar takip edilir fakat yeni dosyalar için versiyonlama olmaz. Dosya sildiğinizde aslında dosya silinmeyecek sadece size gösterilmeyecek oraya bir işaretçi(delete marker) koyacak. Delete marker’ı bir örtü gibi düşünebiliriz dosyanın üzerini kapatıyor siz dosyayı görememiş oluyorsunuz. Eski haline dönmek istediğimizde ise delete marker’ı silmemiz gerekecek yani örtüyü kaldırdığımızda dosyayı görmüş olacağız. Versiyonlamayı bucket oluştururken yapabildiğimiz gibi daha sonra da değiştirebiliriz. Versiyonlama daha sonra açılmışsa önceki dosyalar için versiyon numarası oluşmayacaktır.

Press enter or click to view image in full size

Yukarıdaki resimde encryption seçeneği ile bucket içerisinde iken verinizin şifreli muhafazası sağlanmış olur. Şifreleme detayları yazının devamında S3'te güvenlik başlında mevcuttur. Burada şifreleme seçeneklerinden Server tarafında yapılabilen SSE-S3 ve SSE-KMS seçilebilir.

Press enter or click to view image in full size

Advanced settings seçeneği ile Object Lock özelliğini açabiliriz. Bu özellikle bucket’ınızı kilitlemiş olursunuz sadece read-only kullanmış olursunuz. Verilerinizin değişmemesini istediğinizde kullanışlı bir özelliktir.

Bitirdikten sonra Create bucket’a tıklayalım. Yeni oluşturduğumuz bucket’ı tıklayarak içine girelim.

Press enter or click to view image in full size

Yukarıdaki menü bucket içindir. İlerde obje için de menü paylaşacağım birbiri ile karıştırmamak gerekir. Buradaki değişiklikler tüm objeleri içerir. Bazı menüleri burada açıklayalım.

Object menüsü

Bucket içerisine yüklemek istediğimiz objeleri Upload seçeneğiyle veya sürükle bırak ile yüklenebilir. Create folder ile bucket içinde klasör oluşturabiliriz. Herhangi bir obje seçili iken action menüsüyle de obje üzerinde localinize indirme, isim değiştirme, objeyi public yapma, şifreleme ve storage özelliklerini değiştirme, kopyalama, taşıma gibi işlemleri yapabiliriz. Ayrıca Query with S3 Select seçeneğiyle veriyi indirmeden SQL sorgusu yapabilirsiniz.

Properties menüsü

Bucket Versioning > Versiyonlama bir S3 bucket’ına kaydedilen herhangi bir nesnenin herhangi bir sürümünü yönetmek, silmek ve geri yüklemek için kullanılır. Bu menü ile bucket oluştururken yaptığımız versiyonlama ayarını değiştirebiliriz. Eğer açık ise kapatılamaz suspend edilebilir. Versioning’de show version esnasında yapılan silme permenent delete olacaktır. Show version kapalı iken silinen dosya delete edilir aslında delete marker eklenir.

Tag > ile etiket verebiliriz. Faturalandırmada kulanılabilir billing servislerden cost allocation tag özelliği açılması gerekir. En fazla 10 adet tag girilebilir.

Default encryption > ile bucket oluştururken yaptığımız şifreleme ayarını değiştirebiliriz. Detaylı bilgi yazı devamında olacak.

Intelligent-Tiering Archive configurations > ile bucket içerisindeki veriler için storage seçeneklerinden birisi olan Intelligent-Tiering arşiv konfigurasyon ayarlarını yapabiliriz. Bucket içindeki tüm dosyaları veya belirli etikete sahip olanlar veyahut da belirli prefix’e sahip olanlar üzerinde işlem yapılabilir. 90–270 gün arasında seçim yapılarak dosyalar Archive Access tier’a daha sonra da istenirse en az 180 gün sonra da Deep Archive Access tier’a dosyaların otomatik gönderilmesini sağlayabiliriz. Bunu verileri daha uygun fiyatla saklayabilmek için yapıyoruz.

Server access logging > Bucket içindeki verilere kim, nasıl erişmiş logları görebilmek için kullanılır. Enable yaptığınızda bu logların kaydı için bucket seçmek gerekir.

Event notifications > ile bucket içinde herhangi bir işlem oluğunda(ekleme, çıkartma, değişiklik gibi) bu işlem ile bir lambda fonksiyonunun otomatik çalışması sağlanabilir.

Transfer acceleration > Çok büyük verilerin transferi için kullanılır. Normal url den göndermek yerine yeni verilen end point ile aktarım yapıyorsunuz eğer AWS aktarımı hızlandırabilirse extra ücreti ödüyorsunuz.

Object Lock > ile verilerin yanlışlıkla silinmesi belirli süre veya sonsuza kadar engellenebilir. Sadece bucket yaratılırken uygulanabilir daha sonra uygulanamaz.

Requester pays > ile koyulan dosyaya birisi erişip download ederse ücreti karşı tarafın AWS hesabından kesilebilme özelliği açılabilir. Public access kapatılması gerekir.

Static website hosting > ile web hosting yapılabilir aşağıda detaylı anlatılacak.

Permissions menüsü

Block public access (bucket settings) > Bu kısmı bucket oluşurma esnasında karşımıza çıktında anlatmıştık. Dış dünyadan erişimi kapatıp açmaya yarar.

Bucket policy > Bucket’ınıza erişim için kullanılacak kurallar belirlenir. Yukarıdaki seçenekten dış kapıyı açmış olacaksınız. Bucket’ınızdaki veriye birisi erişmek isterse veya web hosting için kullanacaksanız burda policy girmeniz gerekiyor. Policy girme ile ilgili aşağıda Bucker Policy Girilmesi başlığında örnek görebilirsiniz.

Object ownership > Dosyaların sahipliğini değiştirebilirsiniz. Burada Access control list (ACL) ayarlarını yapmamız gerekir.

Access control list (ACL) > Dosyaların okuma, yazma, listeleme erişim yetkilerini belirli bir gruba veya tüm herkese açma şeklinde ayarlar yapabilirsiniz.

Cross-origin resource sharing (CORS) > Bu başlık bu yazının en son kısmında anlatılmıştır.

Management Menüsü

Lifecycle rules >>S3 Storage Sınıfları başlığında depolama için farklı özellikli çözümleri inceledikten sonra bu kısma bakabilirsiniz. Lifecycle rules ile biz depolama çözümleri arasında geçişleri bir kurala bağlayarak otomatize etmiş oluyoruz. Daha uygun bir fiyatlandırma için yaptığımız bir ayar diyebiliriz. Storage değişimleri pahalıdan ucuza yönünde yani Standard’tan Glacier Deep Archive yönünde olur tek yönlüdür tersine kural verilemez. Create lifecycle rule diyerek sayfaya girelim.

Press enter or click to view image in full size

Lifecycle rule name >>öncelikle bir kural ismi girelim.

Choose a rule scope >> Bu kuralı tüm bucket için mi yoksa filtre kullanarak mı yapmak istiyoruz. Filtre tipi olarak da iki seçenek mevcut. Birincisi Prefix kullanmak bucket içinde belli klasör içindekileri veya dosya adı xxxx ile başlayanlar diye filtre koyabiliriz. Diğer seçenek Tag yöntemi bu yöntemle bucket’a objeyi atarken tag giriyoruz belirlediğimiz tag ile giriş yapan objeler için kural belirlemiş oluyoruz.

Lifecycle rule actions >> Burada hangi versiyon üzerinde işlem yapacağımızı seçiyoruz. İki versiyon var birincisi son versiyon yani current version diğeri ise geçmiş versiyonlar yani noncurrent version. Her ikisi içinde ayrı kural belirleyebiliyoruz.

Move current versions of objects between storage classes >>> Son versiyon için storege değiştirme kuralı

Move noncurrent versions of objects between storage classes >>> Eski versiyonlar için storege değiştirme kuralı

Expire current versions of objects >>> Bu seçenekle eski versiyoları kalıcı silme son versiyon içinse delete marker ekleme kuralı

Permanently delete noncurrent versions of objects >>> Eski versiyonlar için kalıcı silme kuralı

Delete expired object delete markers or incomplete multipart uploads >>> Bu seçenek ile boşta kalan delete marker’lar ve parçalı yüklemelerde tamamlanamayan dosyaların silinme kuralı belirlenir.

Expire current versions of objects >> Yukarıda seçtiğimiz kurala göre ilk iki seçenek için storage ve gün seçimi diğer üç adet silme kuralları için ise gün seçimi yapıyoruz.

Review transition and expiration actions >> Aynı anda birden fazla kural seçilebilir veya bir kural için birden fazla storage değişimi yapılabilir. Yukarıda seçilen tüm kuralları gözden geçireceğimiz bölüm burası.

Replication rules > Bu özellik sayesinde oluşturduğunuz bucketların kopyasını aynı veya farklı regionda tutabilirsiniz. Bu size yedeklilik ve farklı bölgelerdeki kullanıcılarınızın verilere daha hızlı erişmesini sağlar. Bu özellik yasal zorunluluk veya kurumsal kısıtlamalar sebebi ile de kullanılabilir. Öncelikle replikasyon için hem kaynak hem de hedef bucket’larda versiyonlama açık olmalı. Versiyonlama için de kurallar oluşturmamız gerekiyor. Neleri yedekleyecek nerelere yedekleyecek şeklinde. Bir önemli konu daha var burada o da bir S3 bucket’ının başka bir S3 bucket’ına erişmesi için yetki alması gerekiyor. Bunu da IAM role olarak tanımlıyoruz. IAM role oluşturmadan önce de ilgili yetkileri tanımlayan policy oluşturmamız gerekiyor. Daha sonra oluşturduğumuz policy’i IAM role atıyoruz. Ayrıca replika esnasında objenin metadata’sı korunur.

Press enter or click to view image in full size

Replication rule name > ile bir isim verelim.

Choose a rule scope > Lifecycle’da olduğu gibi prefix veya tag ile filtreleme yapabilir veya tüm bucket olarak seçebiliriz.

Destination > Nereye yedek almak isterseniz daha önce oluşturduğunuz bucket’ı seçiyoruz.

IAM role > ilgili yetkilendirme yapılmış IAM role seçilir.

Encryption > Replica’sı alınan dosyalar için bucket içi şifreleme yaptırılabilir.

Destination storage class > Bu seçenek değiştirilmez ise Kaynak bucket storage class’ı hedef için de geçerli olur veya istediğiniz class tipi seçilerek replika muhafaza edilebilir.

Additional replication options

Replication Time Control (RTC) >> Büyük veriler için ücreti mukabil15 dakika içinde tamamlanması sağlanabilir.

Replication metrics and notifications >> Ücreti mukabil cloudwatch servisinden veriler takip edilebilir.

Replication metrics and notifications >> Normalde delete markerler replika edilmez edilsin isterseniz tikleyebilirsiniz.

Menü kısmını bitirdik. Birkaç ek bilgi verelim. Dolu bucket silinemez. İçini boşaltmak için empty bucket yöntemi kullanılabilir. Bu şekilde hem verison tarafı hem normal taraf silinir.

S3 Storage Sınıfları

S3 içerisindeki veriyi seçebileceğimiz 6 farklı seçenekle tutabiliriz.

Press enter or click to view image in full size

Standard > Sık erişilen veriler için tercih edilir. Default değerdir dosya yüklerken aksi seçilmez ise standard olarak muhafaza edilir. Hızlı erişim sağlanır ve ücret olarak en pahalı seçenektir. Güven anlamında % 99.99999999 (11 9) luk güvenilirlik sağlar. Bu şu anlama gelir bir yılda 10 milyar objeden 1 tanesinin kaybolma riski vardır. Erişilebilirlik anlamında 99,99% oran vardır. Yani 10 bin saatte 1 saat erişilememe riski olabilir. Bulut uygulamaları ve web servisleri, mobil oyun ve uygulamalar, web sitesi barındırma, içerik dağıtımı gibi ihtiyaçlar için en uygun kullanım alanları olarak sayılabilir.

Intelligent-Tiering > Dosyaların kullanım sıklığına göre storege class değişimini otomatik gerçekleştirir. Öncelikle standard storage’da veri bekletilir. 30 gün erişilmeyen bir dosya Standart-IA’ya aktarılır. Dosyaya erişim olduğunda tekrar standard’a taşır. Bucket properties menüsünden Intelligent-Tiering Archive configurations kısmından diğer storage’lara taşınması için gün ayarlaması yapılabilir.

Standart-IA > Daha az erişilen veriler Standart IA’da saklanır. Erişim hızı anlamında standard ile aynıdır. Fiyat anlamında standard’dan uygundur. Erişilebilirlik anlamında 99,9% oran vardır. Yani 10 bin saatte 10 saat erişilememe riski olabilir. Dosyaya her eriştiğinizde normalden daha fazla ücret ödeneceği için sık erişilen dosyalar için tercih edilmez.

One Zone-IA > Standard IA’den yüzde 20 daha ucuzdur. Veriler tek AZ’de tutulur yedeklilik yoktur. Kaybolması sıkıntı yaratmayacak sık erişmediğiniz veriler için uygun fiyatlı çözümdür.

Glacier > S3 servisinden bağımsızdır. Uzun süre saklamanız gereken ve çok çok nadir erişim ihtiyacı duyulabilen dosyalar için kullanılır. Fiyat anlamında diğerlerine göre çok uygundur. Minimum 90 gün dosyaya dokunmamanız gerekir. Eğer daha önce işlem yaparsanız 90 gün ücreti ödersiniz. İhtiyaç halinde 1–5 dk içinde erişebilirsiniz.

Get Samet USTAOGLU’s stories in your inbox

Join Medium for free to get updates from this writer.

Glacier Deep Archive > En düşük fiyatlı çözümdür. Ulaşmak zorunda kalmayacağınız dosyalar için uygulanabilir. Ulaşmak istenildiğinde 12 saat ile 48 saat arasında çağrılma süresi vardı . Minimum 180 gün boyunca dokunmayacağınız dosyalar için kullanılır. Eğer daha erken çağrılırsa 180 gün ücreti ödenir.

Ücretlendirme

Fiyatlandırma 3 aşamalı gerçekleşir. Birincisi depoladığınız veri için GB başına ücret ödersiniz. ikinci aşamada depolanan veriye dış dünyadan erişim içinde GB başına ücret ödersiniz. Son olarak dış dünyadan yapılan istek başına da ücret ödenir. Ayrıca upload için ücretlendirme yapılmaz. Son olarak aynı region içinde transfer işlemleri için de ücretlendirme olmaz. Bu hesap karmaşık olduğu için AWS’in hesaplama için yaptığı calculator’dan yardım alınabilir.

Objelerin Şifrelenmesi

Bucket oluşturma aşamasında default şifreleme çeşiti seçilebilir. Objeyi şifrelemek için ise obje seçildiğinde Properties menüsünden > Server-side encryption settings > Edit ile giriş yapılabilir. Ayrıca herhangi bir obje seçili değil iken bucket’ın properties menüsünden > Default encryption > Edit seçilerek bucket kurulurken atladığımız default ayarı buradan yapabiliriz. Enable edildiği taktirde yeni eklenen dosyalar belirlenen yöntemle şifrelenmiş olacak. Ayrıca dosya upload edilirken properties kısmından da yükleme esnasında şifrelenmesi ve türü seçilebilir. Objeleri encryption için 4 method vardır. İlk üçü server tarafında(SSE) şifreleme türüdür.

1.SSE-S3 : AWS S3 tarafından yönetilen anahtar kullanılır. Objeler Server tarafında şifrelenir. HTTP veye HTTPs ile upload yapılabilir.

Press enter or click to view image in full size

2.SSE-KMS : AWS in Key Management Servisi kullanılarak anahtar yönetimi yapılır. HTTP veye HTTPs ile upload yapılabilir.

Press enter or click to view image in full size

3.SSE-C : Kendi Şİfreleme anahtarınızı kullanırsınız. Sadece HTTPs ile upload yapılabilir. Anahtar S3'te depolanmaz. Bu seçenek konsoolda gözükmeyecek. CLI kullanarak yapabilirsiniz.

Press enter or click to view image in full size

4.Client Side Encription: Obje şifrelenerek gönderilir. Şifrenin tekrar açılmasından da client sorumludur. Bu seçenek de konsolda gözükmeyecek.

Press enter or click to view image in full size

Şifrelenen objenin properties menüsüne gelindiğinde detayları görebiliriz. Edit ile değişiklik yapabiliriz.

Press enter or click to view image in full size

S3'te Güvenlik

İki türü vardır bunlardan birisi açıksa bucket’a erişim mümkün olur.

  1. Kullanıcı tabanlı erişim IAM Policy ile düzenlenir.
  2. Kaynak tabanlı erişim bunu da kendi içinde ikiye ayırıyoruz.

a. Bucket Policy : Json formatında olmalı

b. Access Control List(ACL).

Kaynakta düzenlemeyi policy ile yapabileceğimiz gibi obje veya bucket özelinde ACL de ayarlanabilir. S3 bucket’ına erişim için herhangi açıkça belirtilmiş bir engelleme yok ise ya IAM izinleri verilmiş olmalı veya Kaynak izin vermiş olmalıdır.

Public erişimi engellemek için 4 farklı seçenek mevcut.

  1. Block public access to buckets and objects granted through new access control lists (ACLs) >> Bucket ve objelere yeni eklenen ACL’ler aracılığıyla erişimi engeller.
  2. Block public access to buckets and objects granted through any access control lists (ACLs) >> Bucket ve objelere herhangi ACL’ler aracılığıyla erişimi engeller.
  3. Block public access to buckets and objects granted through new public bucket or access point policies >> Yeni public bucket’ların veya yeni accsess pointlerin erişimini engeller.
  4. Block public and cross-account access to buckets and objects through any public bucket or access point policies >> cross-account erişimlerini engeller.

Bucker Policy Girilmesi

Bucket içinde şifrelenmiş veri girmesin istenirse;

Yukarıdaki örnekte bucket’a SSE ile şifrelenmemiş obje upload etmeyi engelleyen policy ürettik. Buna ilave şifreleme türü de sadece AES256 olanlar deseydik aşağıdaki gibi ayarlayacaktık.

Policy tipi > S3
Effect > Deny
Actions > PutObject
Amazon Resource Name > ARN/*
Condition > StringEquals
Key > s3:x-amz-server-side-encryption
Value > AES256

Seçimleri yukarıdaki gibi yaptıktan sonra Generate Policy dedikten sonra çıkan json kodlarını kopyalayıp policy bölümüne yapıştıacağız.

S3 ile Statik Web Sitesi Hosting

Öncelikle oluşturduğunuz bucket’a html dosyanızı ve varsa bağlı fotoğrafları upload edelim. Dilerseniz hata durumunda karşınıza çıkması için bir error.html de yükleyebilirsiniz.

Bucket Menüsünden > Properties > Static website hosting > kısmına gelelim;

Press enter or click to view image in full size

Static website hosting > enable

Hosting type > Host a static website. Diğer seçenek sitenizin URL’ine ulaşmak isteyen kullanıcıları farklı bir siteye yönlendirmek için kullanılır. Seçim yapıldığında adres yazmanız için alan açılır.

Index document > html uzantışı hazırladığınız dosya ismi yazılır.

Error document — optional > istenirse hata durumunda karşınıza çıkmasını istediğiniz html uzantılı dosya adı yazılır.

Properties menüsünün en alt kısmında aşağıdaki gibi bir endpoint sitenizin URl ini görebilirisiniz.

Press enter or click to view image in full size

Kopyalayıp açmaya çalıştığınızda hata ile karşılaşacaksınız çünkü dış dünyadan erişime açmadınız henüz.

Permission menüsüne gelelim;

Block public access (bucket settings) > edit seçerek off konumuna yani tikler kalkmış pozisyona getirelim. Bu hareketle evinizin dışındaki çiti açmış oldunuz eviniz hala kapalı.

Bucket policy > edit diyerek yeni bir policy oluşturalım. Dış dünyadan herkesin erişmesi için bir policy yazacağız. Generator kullanalım.

Select Type of Policy > S3

Effect > Allow

Principal > *

Actions >GetObject

Amazon Resource Name> ARN/* (içindeki herşey anlamında ARN sonuna /* ekle)

Artık sitenize erişebilirsiniz. Policy yazmadan da aşağıdaki resimde gösterildiği gibi bucket’ınızın içindekiler make public yapabilirsiniz.

Press enter or click to view image in full size

Cross-origin resource sharing (CORS)

Öncelikle ne olduğunu anlayalım konunun. Origin yani köken protokol(HTTP, HTTPs gibi), host(domain), ve port değerlerinden oluşur. Kökenler arası kaynak paylaşımı anlamına gelir.

Örnek: https://www.example.com ( port 443 HTTPS, 80 HTTP)

CORS ise bir web uygulamasının içerisinde farklı bir kökende yer alan web uygulamasına erişim kontrolü sağlayan mekanizmadır.

Press enter or click to view image in full size

Yukarıda örnekte görüldüğü gibi diyelim sizin domain-a.com isimli web uygulamanız var. Siz domain-b.com web uygulamasındaki içeriğer erişmek istediğinizde domain-b CORS ayarlarıyla size bu izni vermesi gerekmektedir.

S3 bucket’larında nasıl oluyor bu olay? Herhangi bir istemci sizin buucket’ınızda bulunan web sitesine erişmek istediğinde siz bunu CORS ayarların belirtmenin gerekiyor CORS izinleri ile spesifik bir istemciye izin verebilirken “*” karakteri ile tüm istemcilere izin verebilirsiniz.

Bir uygulama yapalım daha iyi oturacaktır. Çok fazla resim kullanmayacağım çok uzamış olacak madde madde tarif edeceğim.

  1. Yeni bir bucket oluşturalım kokbucket ismini verdim siz faklı vereceksiniz ve içine bir adet html dosyası attım.
  2. Bucket ayarlarından Block public access (bucket settings) > hepsini off yapalım.
  3. Bucket policy kısmına gelip getobject izin veren bir policy belirleyelim. Bucket policy anlattığım yere dönebilirsiniz. Veya action kısmından make public de yapabilirsiniz.
  4. Properties menüsünden Static website hosting ksımına gelelim enable yapalım ve html dosyamızın adını yazalım. End point ile kontrol edin sayfanızı görebildi iseniz devam edelim.
  5. Yeni bir bucket daha oluşturalım ben digerbucket ismini kullandım ve aynı web hosting için gerekli işlemleri onun için de yapalım.
  6. kokbucket içindeki index.html içerine bir kod ekleyim tekrar yükleyeceğiz. Kodu aşağıda paylaşacağım deger bucket olarak yazdığım url kısmını kendinize göre değiştiriniz. fetch ile diger bucket içirisindeki veriye ulaşmaya çalışıyoruz.

<div id="tofetch"/> <script> var tofetch = document.getElementById("tofetch"); fetch('http://digerbucket.s3-website-us-east-1.amazonaws.com/extra-page.html') .then((response) => { return response.text(); }) .then((html) => { tofetch.innerHTML = html }); </script>

7. kokbucket sayfanızı yenildiğinizde bu içeriği göremeyeceksiniz. Çünkü CORS izni vermedik. Error çıkmacak geliştirici ayarları kısmında hataya bakabilirisiniz.

8. digerbucket permission menüsünde CORS kısmına gelelim. Edit diyelim ve aşağıdaki kodu yapıştıralım.

[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "http://kokbucket.s3-website-us-east-1.amazonaws.com" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]

AllowedOrigins > kısmına hangi web uygulaması erişmek istiyorsa onu yazın vaya “*” yazarsanız da tüm istemciler erişebilir.

Uzun bir yazı oldu buraya kadar geldi iseniz teşekkür ederim :)

𝒮𝒜Ğ𝐿𝐼𝒞𝒜𝒦𝐿𝒜 𝒦𝒜𝐿𝐼𝒩

--

--