Amazon S3, büyük miktarda veri depolamanıza olanak sağlayan bir hizmettir.
Amazon S3, verilerin dinlenme durumunda korunmasını sağlamak için birden fazla seçenek sunar. Seçenekler arasında İzin (Politika), Şifreleme (İstemci ve Sunucu Tarafı), Bucket Sürümleme ve MFAtemelli silme bulunur. Kullanıcı, veri koruması sağlamak için bu seçeneklerden herhangi birini etkinleştirebilir. Veri replikasyonu, S3'ün her nesneyi tüm Kullanılabilirlik Bölgeleri üzerinde otomatik olarak replike ettiği bir AWS iç tesisidir ve bu durumda organizasyonun bunu etkinleştirmesi gerekmez.
Kaynak tabanlı izinlerle, kovadaki alt dizinler için ayrı ayrı izinler tanımlayabilirsiniz.
Bucket Sürümleme ve MFA temelli silme
Kova sürümleme etkinleştirildiğinde, bir dosyanın içindeki bir dosyayı değiştirmeye çalışan herhangi bir işlem, aynı dosyanın yeni bir sürümünü oluşturacak ve aynı zamanda önceki içeriğini de koruyacaktır. Bu nedenle, içeriğini üzerine yazmayacaktır.
Ayrıca, MFA temelli silme, S3 kovasındaki dosyaların sürümlerinin silinmesini ve aynı zamanda Bucket Sürümleme'nin devre dışı bırakılmasını engelleyecektir, böylece saldırgan bu dosyaları değiştiremeyecektir.
S3 Erişim günlükleri
S3 erişim günlüklerini etkinleştirmek mümkündür (varsayılan olarak devre dışıdır) ve günlükleri farklı bir kovada kaydederek kovaya kimin eriştiğini bilmek mümkündür (her iki kova da aynı bölgede olmalıdır).
S3 Ön İmzalı URL'ler
Genellikle kovadaki belirtilen dosyaya erişmek için kullanılabilecek ön imzalı bir URL oluşturmak mümkündür. Bir ön imzalı URL şuna benzer:
Bir ön imzalı URL, nesneye erişimi olan bir yetkilinin kimlik bilgileri kullanılarak cli'den oluşturulabilir (kullandığınız hesabın erişimi yoksa daha kısa bir ön imzalı URL oluşturulur, ancak işe yaramaz).
Presigned URL oluşturmak için gereken tek izin, verilen izindir, bu nedenle önceki komut için ilgili kişi tarafından gereken tek izin s3:GetObject iznidir.
Ayrıca, diğer izinlerle presigned URL'ler oluşturmak da mümkündür:
DEK, Veri Şifreleme Anahtarı anlamına gelir ve her zaman veriyi şifrelemek için oluşturulan ve kullanılan anahtardır.
Sunucu taraflı S3 yönetilen anahtarlar ile şifreleme, SSE-S3
Bu seçenek minimal yapılandırma gerektirir ve kullanılan şifreleme anahtarlarının tüm yönetimi AWS tarafından yönetilir. Yapmanız gereken tek şey verinizi yüklemek ve S3'ün diğer tüm yönleriyle ilgilenmesine izin vermektir. Bir S3 hesabındaki her kovaya bir kova anahtarı atanır.
Şifreleme:
Nesne Verisi + oluşturulan düz metin DEK --> Şifreli veri (S3 içinde depolanır)
Oluşturulan düz metin DEK + S3 Anahtar Anahtarı --> Şifreli DEK (S3 içinde depolanır) ve düz metin bellekten silinir
Şifre çözme:
Şifreli DEK + S3 Anahtar Anahtarı --> Düz metin DEK
Düz metin DEK + Şifreli veri --> Nesne Verisi
Lütfen bu durumda anahtarın AWS tarafından yönetildiğini unutmayın (sadece her 3 yılda bir döndürülür). Kendi anahtarınızı kullanırsanız, döndürebilir, devre dışı bırakabilir ve erişim kontrolü uygulayabilirsiniz.
Sunucu taraflı KMS yönetilen anahtarlar ile şifreleme, SSE-KMS
Bu yöntem, S3'ün anahtar yönetim hizmetini kullanarak veri şifreleme anahtarlarınızı oluşturmasına izin verir. KMS, anahtarlarınızın nasıl yönetildiği konusunda çok daha fazla esneklik sağlar. Örneğin, CMK'ya erişimi devre dışı bırakabilir, döndürebilir ve erişim kontrolleri uygulayabilir ve AWS Cloud Trail kullanarak kullanımlarına karşı önlem alabilirsiniz.
Şifreleme:
S3, KMS CMK'dan veri anahtarlarını istiyor
KMS, bir CMK kullanarak DEK düz metin ve DEK şifreli çiftini oluşturur ve S3'e gönderir
S3, veriyi şifrelemek için düz metin anahtarını kullanır, şifreli veriyi ve şifreli anahtarı depolar ve düz metin anahtarını bellekten siler
Şifre çözme:
S3, nesnenin şifreli veri anahtarını KMS'e çözmesi için sorar
KMS, CMK ile veri anahtarını çözer ve S3'e geri gönderir
S3, nesne verisini çözer
Sunucu taraflı müşteri tarafından sağlanan anahtarlar ile şifreleme, SSE-C
Bu seçenek, AWS dışında zaten kullandığınız kendi anahtarınızı sağlama imkanı verir. Müşteri tarafından sağlanan anahtarınız daha sonra verinizle birlikte S3'e gönderilir ve S3 şifrelemeyi sizin için gerçekleştirir.
Müşteri anahtarı, veriyi şifrelemek için kullanılır ve şifreli veri depolanır
gelecekteki anahtar doğrulaması için müşteri anahtarının tuzlu HMAC değeri de depolanır
müşteri anahtarı bellekten silinir
Şifre çözme:
Kullanıcı, müşteri anahtarını gönderir
Anahtar, depolanmış HMAC değeriyle doğrulanır
Müşteri tarafından sağlanan anahtar daha sonra veriyi çözmek için kullanılır
İstemci tarafı şifreleme KMS ile, CSE-KMS
SSE-KMS ile benzer şekilde, bu da veri şifreleme anahtarlarınızı oluşturmak için anahtar yönetim hizmetini kullanır. Ancak bu sefer KMS, S3 yerine istemci tarafından çağrılır. Şifreleme daha sonra istemci tarafında gerçekleşir ve şifreli veri S3'e depolanmak üzere gönderilir.
Şifreleme:
İstemci, KMS'ten bir veri anahtarı talep eder
KMS, düz metin DEK ve şifreli DEK'yi CMK ile birlikte döndürür
Her iki anahtar da geri gönderilir
İstemci daha sonra veriyi düz metin DEK ile şifreler ve şifreli veriyi + şifreli DEK'yi (S3 içinde şifreli verinin meta verisi olarak kaydedilir) S3'e gönderir
Şifre çözme:
Şifreli DEK ile şifreli veri DEK istemciye gönderilir
İstemci, CMK kullanarak şifreli anahtarı çözmek için KMS'e başvurur ve KMS düz metin DEK'yi geri gönderir
İstemci şimdi şifreli veriyi çözebilir
İstemci tarafı şifreleme müşteri tarafından sağlanan anahtarlar ile, CSE-C
Bu mekanizmayı kullanarak, kendi sağladığınız anahtarları kullanabilir ve verinizi S3'e depolamadan önce AWS-SDK istemcisini kullanarak verinizi şifreleyebilirsiniz.
Şifreleme:
İstemci, bir DEK oluşturur ve düz metin veriyi şifreler
Ardından, kendi özel CMK'sını kullanarak DEK'yi şifreler
şifreli veriyi + şifreli DEK'yi S3'e gönderir ve depolar
Şifre çözme:
S3, şifreli veriyi ve DEK'yi gönderir
İstemci, DEK'yi şifrelemek için kullandığı CMK'ye zaten sahip olduğu için DEK'yi çözer ve ardından düz metin DEK'yi kullanarak veriyi çözer
# Get buckets ACLsawss3apiget-bucket-acl--bucket<bucket-name>awss3apiget-object-acl--bucket<bucket-name>--keyflag# Get policyawss3apiget-bucket-policy--bucket<bucket-name>awss3apiget-bucket-policy-status--bucket<bucket-name>#if it's public# list S3 buckets associated with a profileawss3lsawss3apilist-buckets# list content of bucket (no creds)awss3lss3://bucket-name--no-sign-requestawss3lss3://bucket-name--recursive# list content of bucket (with creds)awss3lss3://bucket-nameawss3apilist-objects-v2--bucket<bucket-name>awss3apilist-objects--bucket<bucket-name>awss3apilist-object-versions--bucket<bucket-name># copy local folder to S3awss3cpMyFolders3://bucket-name--recursive# deleteawss3rbs3://bucket-name–-force# download a whole S3 bucketawss3syncs3://<bucket>/.# move S3 bucket to different locationawss3syncs3://oldbuckets3://newbucket--source-regionus-west-1# list the sizes of an S3 bucket and its contentsawss3apilist-objects--bucketBUCKETNAME--outputjson--query"[sum(Contents[].Size), length(Contents[])]"# Update Bucket policyawss3apiput-bucket-policy--policyfile:///root/policy.json--bucket<bucket-name>##JSON policy example{"Id":"Policy1568185116930","Version":"2012-10-17","Statement": [{"Sid":"Stmt1568184932403","Action": ["s3:ListBucket"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome","Principal":"*"},{"Sid":"Stmt1568185007451","Action": ["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome/*","Principal":"*"}]}# Update bucket ACLawss3apiget-bucket-acl--bucket<bucket-name># Way 1 to get the ACLawss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://acl.jsonawss3apiget-object-acl--bucket<bucket-name>--keyflag#Way 2 to get the ACLawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://objacl.json##JSON ACL example## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.{"Owner":{"DisplayName":"<DisplayName>","ID":"<ID>"},"Grants": [{"Grantee":{"Type":"Group","URI":"http://acs.amazonaws.com/groups/global/AuthenticatedUsers"},"Permission":"FULL_CONTROL"}]}## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
Çift Yığın
Bir S3 kovasına çift yığın uç noktası aracılığıyla erişebilirsiniz. Bunun için sanal barındırma stili veya yol stili uç nokta adını kullanabilirsiniz. Bunlar, S3'e IPv6 üzerinden erişmek için kullanışlıdır.
Çift yığın uç noktaları aşağıdaki sözdizimini kullanır:
bucketname.s3.dualstack.aws-bölge.amazonaws.com
s3.dualstack.aws-bölge.amazonaws.com/bucketname
İstismar
Aşağıdaki sayfada, ayrıcalıkları yükseltmek için S3 izinlerini kötüye kullanma yöntemlerini kontrol edebilirsiniz:
Bu araştırmaya göre, bir başka kovaya ait yanıtı farklı bir kova gibi önbelleğe almak mümkündü. Bu, örneğin JavaScript dosyası yanıtlarını değiştirmek ve S3'ü kullanarak statik kod depolayan herhangi bir sayfayı tehlikeye atmak için kötüye kullanılabilirdi.
Amazon Athena
Amazon Athena, Amazon Simple Storage Service (Amazon S3) üzerindeki verileri standart SQL kullanarak doğrudan analiz etmeyi kolaylaştıran etkileşimli bir sorgu hizmetidir.
İzlenen S3 kovalarında görünecek içeriğin formatına sahip bir ilişkisel DB tablosu hazırlamanız gerekmektedir. Ardından, Amazon Athena günlüklerden DB'yi doldurabilecek ve sorgulama yapabileceksiniz.
Amazon Athena, zaten şifrelenmiş S3 verilerini sorgulama yeteneğini destekler ve yapılandırıldığı takdirde, sorgunun sonuçlarını da şifreleyebilir ve ardından S3'te depolanabilir.
Bu sonuçların şifrelenmesi, sorgulanan temel S3 verilerinden bağımsızdır, yani S3 verileri şifrelenmemiş olsa bile, sorgulanan sonuçlar şifrelenebilir. Dikkate alınması gereken birkaç nokta şunlardır: Amazon Athena yalnızca aşağıdaki S3 şifreleme yöntemleriyle şifrelenmiş verileri destekler: SSE-S3, SSE-KMS ve CSE-KMS.
SSE-C ve CSE-E desteklenmez. Buna ek olarak, Amazon Athena yalnızca sorgunun kendisiyle aynı bölgede bulunan şifrelenmiş nesneler üzerinde sorguları çalıştırır. KMS kullanarak şifrelenmiş S3 verilerini sorgulamak isterseniz, Athena kullanıcısının sorguyu gerçekleştirmek için belirli izinlere sahip olması gerekmektedir.
Numaralandırma
# Get catalogsawsathenalist-data-catalogs# Get databases inside catalogawsathenalist-databases--catalog-name<catalog-name>awsathenalist-table-metadata--catalog-name<catalog-name>--database-name<db-name># Get query executions, queries and resultsawsathenalist-query-executionsawsathenaget-query-execution--query-execution-id<id># Get query and meta of resultsawsathenaget-query-results--query-execution-id<id># This will rerun the query and get the results# Get workgroups & Prepared statementsawsathenalist-work-groupsawsathenalist-prepared-statements--work-group<wg-name>awsathenaget-prepared-statement--statement-name<name>--work-group<wg-name># Run queryawsathenastart-query-execution--query-string<query>