Amazon S3, büyük miktarda veri depolamanıza olanak tanıyan bir hizmettir.
Amazon S3, verilerin dinlenme halindeki korunmasını sağlamak için birden fazla seçenek sunar. Seçenekler arasında İzin (Politika), Şifreleme (İstemci ve Sunucu Tarafı), Kova Sürümleme ve MFAtabanlı silme bulunmaktadır. Kullanıcı, veri korumasını sağlamak için bu seçeneklerden herhangi birini etkinleştirebilir. Veri çoğaltma, AWS tarafından sağlanan bir iç olanak olup, S3 her nesneyi tüm Erişilebilirlik Alanları arasında otomatik olarak çoğaltır ve bu durumda organizasyonun bunu etkinleştirmesi gerekmez.
Kaynak tabanlı izinlerle, kovanızın alt dizinleri için izinleri ayrı ayrı tanımlayabilirsiniz.
Kova Sürümleme ve MFA tabanlı silme
Kova sürümleme etkinleştirildiğinde, bir dosyanın içindeki bir dosyayı değiştirmeye çalışan herhangi bir işlem, dosyanın yeni bir sürümünü oluşturacak ve aynı zamanda önceki içeriği de koruyacaktır. Bu nedenle, içeriğini üzerine yazmayacaktır.
Ayrıca, MFA tabanlı silme, S3 kovasındaki dosya sürümlerinin silinmesini ve ayrıca Kova Sürümlemenin devre dışı bırakılmasını engelleyecektir, böylece bir saldırgan bu dosyaları değiştiremeyecektir.
S3 Erişim günlükleri
Bir kovaya S3 erişim kaydını etkinleştirmek (varsayılan olarak devre dışıdır) ve günlükleri farklı bir kovada saklamak mümkündür, böylece kovanın kimler tarafından erişildiğini öğrenebilirsiniz (her iki kova da aynı bölgede olmalıdır).
S3 Önceden İmzalı URL'ler
Kovadaki belirtilen dosyaya erişmek için genellikle kullanılabilecek bir önceden imzalı URL oluşturmak mümkündür. Bir önceden imzalı URL şu şekilde görünür:
A presigned URL, bir nesneye erişimi olan bir yetkilinin kimlik bilgileri kullanılarak cli'dan oluşturulabilir (kullandığınız hesap erişime sahip değilse, daha kısa bir presigned URL oluşturulacak ancak bu işe yaramayacaktır)
Önceden imzalanmış bir URL oluşturmak için gereken tek izin, verilen izindir, bu nedenle önceki komut için anahtarın ihtiyaç duyduğu tek izin s3:GetObject'dır.
Ayrıca diğer izinlerle önceden imzalanmış URL'ler oluşturmak da mümkündür:
DEK, Veri Şifreleme Anahtarı anlamına gelir ve verileri şifrelemek için her zaman oluşturulan ve kullanılan anahtardır.
S3 yönetilen anahtarlarla sunucu tarafı şifreleme, SSE-S3
Bu seçenek, minimum yapılandırma gerektirir ve kullanılan şifreleme anahtarlarının tüm yönetimi AWS tarafından yapılır. Tek yapmanız gereken verilerinizi yüklemek ve S3 diğer tüm yönleriyle ilgilenecektir. Bir S3 hesabındaki her bir kovaya bir kova anahtarı atanır.
Şifreleme:
Nesne Verisi + oluşturulan düz metin DEK --> Şifrelenmiş veri (S3 içinde saklanır)
Oluşturulan düz metin DEK + S3 Anahtarları --> Şifrelenmiş DEK (S3 içinde saklanır) ve düz metin bellekten silinir
Şifre çözme:
Şifrelenmiş DEK + S3 Anahtarları --> Düz metin DEK
Düz metin DEK + Şifrelenmiş veri --> Nesne Verisi
Lütfen, bu durumda anahtarın AWS tarafından yönetildiğini unutmayın (sadece 3 yılda bir döndürme). Kendi anahtarınızı kullanırsanız döndürebilir, devre dışı bırakabilir ve erişim kontrolü uygulayabilirsiniz.
KMS yönetilen anahtarlarla sunucu tarafı şifreleme, SSE-KMS
Bu yöntem, S3'ün veri şifreleme anahtarlarınızı oluşturmak için anahtar yönetim hizmetini kullanmasına olanak tanır. KMS, anahtarlarınızın nasıl yönetileceği konusunda çok daha fazla esneklik sağlar. Örneğin, CMK'yı devre dışı bırakabilir, döndürebilir ve erişim kontrolleri uygulayabilirsiniz ve bunların kullanımına karşı AWS Cloud Trail kullanarak sipariş verebilirsiniz.
Şifreleme:
S3, KMS CMK'dan veri anahtarları talep eder
KMS, düz metin DEK ve şifrelenmiş DEK çiftini oluşturmak için bir CMK kullanır ve bunları S3'e gönderir
S3, düz metin anahtarı kullanarak verileri şifreler, şifrelenmiş veriyi ve şifrelenmiş anahtarı saklar ve düz metin anahtarı bellekten siler
Şifre çözme:
S3, nesnenin şifrelenmiş veri anahtarını KMS'ten çözmesini ister
KMS, veri anahtarını CMK ile çözer ve S3'e geri gönderir
S3, nesne verisini çözer
Müşteri sağladığı anahtarlarla sunucu tarafı şifreleme, SSE-C
Bu seçenek, AWS dışında zaten kullanıyor olabileceğiniz kendi anahtarınızı sağlamanıza olanak tanır. Müşteri sağladığı anahtar, verilerinizle birlikte S3'e gönderilir ve S3 sizin için şifrelemeyi gerçekleştirir.
Müşteri anahtarı verileri şifrelemek için kullanılır ve şifrelenmiş veri saklanır
Gelecekteki anahtar doğrulaması için müşteri anahtarının tuzlu bir HMAC değeri de saklanır
Müşteri anahtarı bellekten silinir
Şifre çözme:
Kullanıcı müşteri anahtarını gönderir
Anahtar, saklanan HMAC değeri ile doğrulanır
Müşteri sağladığı anahtar, verileri çözmek için kullanılır
KMS ile istemci tarafı şifreleme, CSE-KMS
SSE-KMS'ye benzer şekilde, bu da veri şifreleme anahtarlarınızı oluşturmak için anahtar yönetim hizmetini kullanır. Ancak, bu sefer KMS, S3 değil, istemci aracılığıyla çağrılır. Şifreleme istemci tarafında gerçekleşir ve şifrelenmiş veri daha sonra saklanmak üzere S3'e gönderilir.
Şifreleme:
İstemci, KMS'ten bir veri anahtarı talep eder
KMS, düz metin DEK ve CMK ile şifrelenmiş DEK'i geri döner
Her iki anahtar geri gönderilir
İstemci, düz metin DEK ile verileri şifreler ve şifrelenmiş veriyi + şifrelenmiş DEK'i S3'e gönderir (bu, S3 içindeki şifrelenmiş verinin meta verisi olarak saklanır)
Şifre çözme:
Şifrelenmiş veri ve şifrelenmiş DEK istemciye gönderilir
İstemci, CMK kullanarak şifrelenmiş anahtarı çözmek için KMS'e başvurur ve KMS düz metin DEK'i geri gönderir
İstemci artık şifrelenmiş veriyi çözebilir
Müşteri sağladığı anahtarlarla istemci tarafı şifreleme, CSE-C
Bu mekanizmayı kullanarak, kendi sağladığınız anahtarları kullanabilir ve verilerinizi S3'e göndermeden önce şifrelemek için bir AWS-SDK istemcisi kullanabilirsiniz.
Şifreleme:
İstemci bir DEK oluşturur ve düz metin verileri şifreler
Ardından, kendi özel CMK'sini kullanarak DEK'i şifreler
Şifrelenmiş veriyi + şifrelenmiş DEK'i S3'e gönderir ve burada saklanır
Şifre çözme:
S3, şifrelenmiş veriyi ve DEK'i gönderir
İstemci, DEK'i şifrelemek için kullanılan CMK'ya zaten sahip olduğundan, DEK'i çözer ve ardından düz metin DEK'i verileri çözmek için kullanır
Numaralandırma
AWS organizasyonlarını tehlikeye atmanın geleneksel ana yollarından biri, kamuya açık erişilebilir kovaları tehlikeye atmaktır. Bulabilirsinizaçık kova numaralandırıcıları bu sayfada.
# 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
dual-stack
Bir S3 bucket'a, sanal barındırma tarzı veya yol tarzı bir uç nokta adı kullanarak çift yığın uç noktası aracılığıyla erişebilirsiniz. Bunlar, S3'e IPv6 üzerinden erişmek için faydalıdır.
Çift yığın uç noktaları aşağıdaki sözdizimini kullanır:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
Aşağıdaki sayfada S3 izinlerini kötüye kullanarak ayrıcalıkları artırma yöntemini kontrol edebilirsiniz:
Bu araştırmaya göre rastgele bir bucket'ın yanıtını, farklı birine aitmiş gibi önbelleğe almak mümkündü. Bu, örneğin javascript dosyası yanıtlarını değiştirmek ve S3'ü statik kod depolamak için kullanan rastgele sayfaları tehlikeye atmak için kötüye kullanılabilirdi.
Amazon Athena
Amazon Athena, verileri doğrudan Amazon Basit Depolama Servisi (Amazon S3) kullanarak standart SQL ile analiz etmeyi kolaylaştıran etkileşimli bir sorgu hizmetidir.
Gözetlenen S3 bucket'larında görünecek içeriğin formatında bir ilişkisel DB tablosu hazırlamanız gerekir. Ardından, Amazon Athena log'lardan DB'yi doldurabilecektir, böylece sorgulayabilirsiniz.
Amazon Athena, zaten şifrelenmiş S3 verilerini sorgulama yeteneğini destekler ve eğer yapılandırılmışsa, Athena ayrıca sorgu sonuçlarını şifreleyebilir ve bunlar daha sonra S3'te saklanabilir.
Bu sonuçların şifrelenmesi, sorgulanan S3 verilerinin altında yatan şifrelemeden bağımsızdır, yani S3 verileri şifrelenmemiş olsa bile, sorgulanan sonuçlar şifrelenebilir. Bilinmesi gereken birkaç nokta, Amazon Athena'nın yalnızca aşağıdaki S3 şifreleme yöntemleriyle şifrelenmiş verileri desteklediğidir: SSE-S3, SSE-KMS ve CSE-KMS.
SSE-C ve CSE-E desteklenmemektedir. Bunun yanı sıra, Amazon Athena'nın yalnızca sorgunun kendisiyle aynı bölgede bulunan şifrelenmiş nesneler üzerinde sorgu çalıştıracağını anlamak önemlidir. KMS kullanılarak şifrelenmiş S3 verilerini sorgulamanız gerekiyorsa, Athena kullanıcısının sorguyu gerçekleştirebilmesi için belirli izinlere sahip olması gerekmektedir.
Enumeration
# 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>