Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-s3-a

This commit is contained in:
Translator
2026-02-12 13:06:23 +00:00
parent 93822dcc4d
commit db743199eb

View File

@@ -4,36 +4,36 @@
## S3
Amazon S3 एक सेवा है जो आपको **बड़े मात्रा में डेटा** **स्टोर** करने की अनुमति देती है।
Amazon S3 एक ऐसी सेवा है जो आपको **बड़े पैमाने पर डेटा स्टोर करने की अनुमति देती है**
Amazon S3 डेटा क REST में **सुरक्षित** करने के लिए कई विकल्प प्रदान करता है। विकल्पों में **अनुमति** (नीति), **एन्क्रिप्शन** (क्लाइंट और सर्वर साइड), **बकेट संस्करणन** और **MFA** **आधारित हटाना** शामिल हैं। **उपयोगकर्ता इन विकल्पों में से किसी को भी सक्षम कर सकता है** ताकि डेटा सुरक्षा प्राप्त की जा सके। **डेटा प्रतिकृति** AWS द्वारा एक आंतरिक सुविधा है जहा **S3 स्वचालित रूप से प्रत्येक वस्तु को सभी उपलब्धता क्षेत्रों में प्रतिकृत करता है** और इस मामले में संगठन को इसे सक्षम करने की आवश्यकता नहीं ह
Amazon S3 डेटा क REST पर **सुरक्ष** हासिल करने के लिए कई विकल्प प्रदान करता है। विकल्पों में **Permission** (Policy), **Encryption** (Client and Server Side), **Bucket Versioning** और **MFA** **based delete** शामिल हैं। कोई भी **user इन विकल्पों को सक्षम कर सकता है** ताकि डेटा सुरक्षा प्राप्त की जा सके। **Data replication** AWS की एक आंतरिक सुविधा है जहा **S3 अपने प्रत्येक object को सभी Availability Zones में स्वचालित रूप से replicate करता है** और इस मामले में संगठन को इसे सक्षम करने की आवश्यकता नहीं होती
संसाधन-आधारित अनुमतियों के साथ, आप अपने बकेट के उप-निर्देशिकाओं के लिए अनुमतियों को अलग से परिभाषित कर सकते हैं।
With resource-based permissions, you can define permissions for sub-directories of your bucket separately.
### बकेट संस्करणन और MFA आधारित हटाना
### Bucket Versioning and MFA based delete
जब बकेट संस्करणन सक्षम होता है, तो कोई भी क्रिया जो एक फ़ाइल के अंदर एक फ़ाइल को बदलने की कोशिश करती है, फ़ाइल का एक नया संस्करण उत्पन्न करेगी, साथ ही उसकी पिछली सामग्री को भी बनाए रखेगी। इसलिए, यह सकी सामग्री को अधिलेखित नहीं करेगा।
जब Bucket Versioning सक्षम होता है, तो किसी भी कार्रवाई जो किसी फ़ाइल को बदलने की कोशिश करती है, फ़ाइल का नया version जनरेट करेगी और साथ ही उसकी पिछली सामग्री भी रखेगी। इसलिए यह सकी सामग्री को overwrite नहीं करेगा।
इसके अलावा, MFA आधारित हटाना S3 बकेट में फ़ाइल के संस्करणों को हटने से रोकेगा और बकेट संस्करणन को अक्षम करने से भी रोकेगा, इसलिए एक हमलावर इन फ़ाइलों को बदल नहीं सकेगा।
Moreover, MFA based delete S3 bucket में फ़ाइलों के versions को हटने से रोकेगा और साथ ही Bucket Versioning को disabled होने से भी रोकेगा, इसलिए कोई attacker इन फ़ाइलों को बदल नहीं पाएगा।
### S3 एक्सेस लॉग
### S3 Access logs
यह संभव है कि आप कुछ बकेट के लिए **S3 एक्सेस लॉगिन** (जो डिफ़ॉल्ट रूप से अक्षम है) को **सक्षम** करें और लॉग को एक अलग बकेट में सहेजें ताकि यह पता चल सके कि कौन बकेट का उपयोग कर रहा है (दोनों बकेट को एक ही क्षेत्र में होन चाहिए)।
किसी bucket पर **S3 access login** सक्षम करना (जो डिफ़ॉल्ट रूप से disabled होता है) और logs को किसी अलग bucket में save करना संभव है ताकि यह पता चल सके कि कौन bucket को access कर रहा है (दोनों buckets एक ही region में होन चाहिए)।
### S3 प्रीसाइनड URLs
### S3 Presigned URLs
यह संभव है कि आप एक प्रीसाइनड URL उत्पन्न करें जिसे आमतौर पर बकेट में **निर्धारित फ़ाइल** तक पहुँचने के लिए उपयोग किया जा सकता है। एक **प्रीसाइनड URL इस तरह दिखता है**:
यह संभव है कि आप एक presigned URL जनरेट करें जिसे आमतौर पर bucket में निर्दिष्ट फ़ाइल को **access** करने के लिए उपयोग किया जा सकता है। एक **presigned URL इस तरह दिखता है**:
```
https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa
```
एक प्री-साइन किया गया URL **CLI से उस प्रिंसिपल के क्रेडेंशियल्स का उपयोग करके बनाया जा सकता है जिसपास ऑब्जेक्ट तक पहुंच है** (यदि आप जिस खाते का उपयोग करे हैं, उसके पास पहुंच नहीं है, तो एक छोटा प्री-साइन किया गया URL बनाया जाएगा लेकिन ह बेकार होगा)
A presigned URL को **cli से उस principal के credentials का उपयोग करके बनाया जा सकता है जिसे object तक access है** (यदि जिस account का आप उपयोग कर रहे हैं उसके पास access नहीं है, तो एक छोटा presigned URL बनाया जाएगा लेकिन ह बेकार होगा)
```bash
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
```
> [!NOTE]
> एक प्रीसाइन किए गए URL को उत्पन्न करने के लिए केवल आवश्यक अनुमति वह अनुमति है जो दी जा रही है, इसलिए पिछले कमांड के लिए मुख्य व्यक्ति को केवल `s3:GetObject` की अनुमति की आवश्यकता है
यह **अन्य अनुमतियों** के साथ प्रीसाइन किए गए URLs बनाने के लिए भी संभव है:
> presigned URL बनाने के लिए केवल आवश्यक permission वही permission है जो दी जा रही है, इसलिए पिछले कमांड के लिए principal को केवल `s3:GetObject` permission की ही ज़रूरत है
>
It's also possible to create presigned URLs with **other permissions**:
```python
import boto3
url = boto3.client('s3').generate_presigned_url(
@@ -42,99 +42,99 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
```
### S3 एन्क्रिप्शन तंत्र
### S3 एन्क्रिप्शन मैकेनिज़्म
**DEK का मतलब डेटा एन्क्रिप्शन कुंजी** है और यह कुंजी है जो हमेशा उत्पन्न होती है और डेटा को एन्क्रिप्ट करने के लिए उपयोग की जाती है।
**DEK means Data Encryption Key** और यह वह key है जो हमेशा जेनरेट की जाती है और डेटा को एन्क्रिप्ट करने के लिए उपयोग होती है।
<details>
<summary><strong>सर्वर-साइड एन्क्रिप्शन S3 प्रबंधित कुंजियों के साथ, SSE-S3</strong></summary>
<summary><strong>Server-side encryption with S3 managed keys, SSE-S3</strong></summary>
यह विकल्प न्यूनतम कॉन्फ़िगरेशन की आवश्यकता है और उपयोग की जाने वाली एन्क्रिप्शन कुंजियों का सभी प्रबंधन AWS द्वारा प्रबंधित किया जाता है। आपको केवल **अपन डेटा को अपलोड करना है और S3 सभी अन्य पहलुओं को संभालेगा**। S3 खाते में प्रत्येक बाल्टी को एक बाल्टी कुंजी सौंपा जात है।
यह विकल्प न्यूनतम कॉन्फ़िगरेशन मांगता है और encryption keys का पूरा प्रबंधन AWS द्वारा किया जाता है। आपको बस अपन डेटा अपलोड करना है और S3 बाकी सब संभालेगा। प्रत्येक bucket को S3 account में एक bucket key असाइन की जात है।
- एन्क्रिप्शन:
- ऑब्जेक्ट डेटा + उत्पन्न प्लेनटेक्स्ट DEK --> एन्क्रिप्टेड डेटा (S3 के अंदर संग्रहीत)
- उत्पन्न प्लेनटेक्स्ट DEK + S3 मास्टर कुंजी --> एन्क्रिप्टेड DEK (S3 के अंदर संग्रहीत) और प्लेन टेक्स्ट मेमोरी से हटा दिया जाता है
-िक्रिप्शन:
- एन्क्रिप्टेड DEK + S3 मास्टर कुंजी --> प्लेनटेक्स्ट DEK
- प्लेनटेक्स्ट DEK + एन्क्रिप्टेड डेटा --> ऑब्जेक्ट डेटा
- ऑब्जेक्ट डेटा + created plaintext DEK --> Encrypted data (stored inside S3)
- Created plaintext DEK + S3 Master Key --> Encrypted DEK (stored inside S3) और plain text मेमोरी से डिलीट कर दिया जाता है
-क्रिप्शन:
- Encrypted DEK + S3 Master Key --> Plaintext DEK
- Plaintext DEK + Encrypted data --> Object Data
कृपया ध्यान दें कि इस मामले में **कुंजी AWS द्वारा प्रबंधित की जाती है** (रोटेशन केवल हर 3 वर्ष में)। यदि आप अपनी कुंजी का उपयोग करते हैं, तो आप रोटेट, अक्षम और एक्सेस नियंत्रण लागू कर सकेंगे।
कृपया ध्यान दें कि इस केस में **key AWS द्वारा मैनेज की जाती है** (rotation केवल हर 3 साल)। अगर आप अपनी खुद की key इस्तेमाल करेंगे तो आप उसे rotate, disable और access control लागू कर सकेंगे।
</details>
<details>
<summary><strong>सर्वर-साइड एन्क्रिप्शन KMS प्रबंधित कुंजियों के साथ, SSE-KMS</strong></summary>
<summary><strong>Server-side encryption with KMS managed keys, SSE-KMS</strong></summary>
यह विधि S3 को कुंजी प्रबंधन सेवा का उपयोग करके आपकी डेटा एन्क्रिप्शन कुंजियों को उत्पन्न करने की अनुमति देती है। KMS आपको अपनी कुंजियों के प्रबंधन के लिए बहुत अधिक लचीलापन देता है। उदाहरण के लिए, आप CMK को अक्षम, रोटेट और एक्सेस नियंत्रण लागू कर सकते हैं, और AWS क्लाउड ट्रेल का उपयोग करके उनके उपयोग के खिलाफ आदेश दे सकते हैं।
यह मेथड S3 को key management service का उपयोग करके आपके data encryption keys जेनरेट करने की अनुमति देती है। KMS आपको keys के प्रबंधन में काफी अधिक लचीलापन देता है। उदाहरण के लिए, आप CMK को disable, rotate और उस पर access controls लागू कर सकते हैं, तथा उनके उपयोग के खिलाफ ऑर्डर करने के लिए AWS Cloud Trail का उपयोग कर सकते हैं।
- एन्क्रिप्शन:
- S3 KMS CMK से डेटा कुंजी का अनुरोध करता है
- KMS एक CMK का उपयोग करके DEK प्लेनटेक्स्ट और DEK एन्क्रिप्टेड जोड़ी उत्पन्न करता है और उन्हें S3 को भेजता है
- S3 प्लेनटेक्स्ट कुंजी का उपयोग करके डेटा को एन्क्रिप्ट करता है, एन्क्रिप्टेड डेटा और एन्क्रिप्टेड कुंजी को संग्रहीत करता है और मेमोरी से प्लेनटेक्स्ट कुंजी को हटा देता है
-िक्रिप्शन:
- S3 KMS से ऑब्जेक्ट के एन्क्रिप्टेड डेटा कुंजी को डिक्रिप्ट करने के लिए पूछता है
- KMS CMK के साथ डेटा कुंजी को डिक्रिप्ट करता है और से S3 को वापस भेजता है
- S3 ऑब्जेक्ट डेटा को डिक्रिप्ट करता है
- S3 KMS CMK से data keys रिक्वेस्ट करता है
- KMS एक CMK का उपयोग करके DEK plaintext और DEK encrypted का पेयर जनरेट करता है और उन्हें S£ को भेजता है
- S3 plaintext key का उपयोग करके डेटा को एन्क्रिप्ट करता है, एन्क्रिप्टेड डेटा और encrypted key स्टोर करता है और plaintext key को मेमोरी से डिलीट कर देता है
-क्रिप्शन:
- S3 ऑब्जेक्ट के encrypted data key को decrypt करने के लिए KMS से अनुरोध करता है
- KMS CMK के साथ data key को decrypt करता है और से S3 को भेजता है
- S3 ऑब्जेक्ट डेटा को decrypt करता है
</details>
<details>
<summary><strong>सर्वर-साइड एन्क्रिप्शन ग्राहक द्वारा प्रदान की गई कुंजियों के साथ, SSE-C</strong></summary>
<summary><strong>Server-side encryption with customer provided keys, SSE-C</strong></summary>
यह विकल्प आपको अपनी मास्टर कुंजी प्रदान करने का अवसर देता है जिसे आप पहले से AWS के बाहर उपयोग कर रहे होंगे। आपकी ग्राहक द्वारा प्रदान की गई कुंजी फिर आपके डेटा के साथ S3 को भेजी जाएगी, जहा S3 आपके लिए एन्क्रिप्शन करेगा।
यह विकल्प आपको अपनी खुद की master key प्रदान करने का मौका देता है जिसे आप AWS के बाहर उपयोग कर रहे होंगे। आपकी customer-provided key तब आपके डेटा के साथ S3 को भेजी जाएगी, जहा S3 आपके लिए एन्क्रिप्शन करेगा।
- एन्क्रिप्शन:
- उपयोगकर्ता ऑब्जेक्ट डेटा + ग्राहक कुंजी को S3 को भेजता है
- ग्राहक कुंजी का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है और एन्क्रिप्टेड डेटा संग्रहीत किया जाता है
- भविष्य की कुंजी मान्यता के लिए ग्राहक कुंजी का एक सॉल्टेड HMAC मान भी संग्रहीत किया जाता है
- ग्राहक कुंजी को मेमोरी से हटा दिया जात है
-िक्रिप्शन:
- उपयोगकर्ता ग्राहक कुंजी भेजता है
- कुंजी को संग्रहीत HMAC मान के खिलाफ मान्य किया जाता है
- ग्राहक द्वारा प्रदान की गई कुंजी का उपयोग डेटा को डिक्रिप्ट करने के लिए किया जाता है
- उपयोगकर्ता ऑब्जेक्ट डेटा + Customer key को S3 पर भेजता है
- Customer key का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है और एन्क्रिप्टेड डेटा स्टोर किया जाता है
- customer key का एक salted HMAC value भी भविष्य के key validation के लिए स्टोर किया जाता है
- customer key मेमोरी से डिलीट कर दी जात है
-क्रिप्शन:
- उपयोगकर्ता customer key भेजता है
- key को स्टोर किए गए HMAC value के खिलाफ validate किया जाता है
- उसके बाद customer provided key का उपयोग डेटा को decrypt करने के लिए किया जाता है
</details>
<details>
<summary><strong>क्लाइंट-साइड एन्क्रिप्शन KMS के साथ, CSE-KMS</strong></summary>
<summary><strong>Client-side encryption with KMS, CSE-KMS</strong></summary>
SSE-KMS के समान, यह भी आपकी डेटा एन्क्रिप्शन कुंजियोंत्पन्न करे के लिए कुंजी प्रबंधन सेवा का उपयोग करता है। हालाँकि, इस बार KMS को क्लाइंट के माध्यम से बुलाया जाता है न कि S3 के माध्यम से। एन्क्रिप्शन फिर क्लाइंट-साइड होता है और एन्क्रिप्टेड डेटा को S3 को संग्रहीत करने के लिए भेजा जाता है।
SSE-KMS की तरह ही, यह भी key management serviceपयोग करआपके data encryption keys जेनरेट करता है। हालाँकि इस बार KMS को client द्वारा कॉल किया जाता है, न कि S3 द्वारा। एन्क्रिप्शन क्लाइंट-साइड होता है और एन्क्रिप्टेड डेटा को स्टोर करने के लिए S3 पर भेज दिया जाता है।
- एन्क्रिप्शन:
- क्लाइंट KMS से डेटा कुंजी का अनुरोध करता है
- KMS प्लेनटेक्स्ट DEK और CMK के साथ एन्क्रिप्टेड DEK लौटाता है
- दोनों कुंजियाँ वापस भेज जात हैं
- क्लाइंट फिर प्लेनटेक्स्ट DEK के साथ डेटा को एन्क्रिप्ट करता है और S3 को एन्क्रिप्टेड डेटा + एन्क्रिप्टेड DEK (जो S3 के अंदर एन्क्रिप्टेड डेटा के मेटाडेटा के रूप में सहेजा जाता है) भेजता है
-िक्रिप्शन:
- एन्क्रिप्टेड डेटा और एन्क्रिप्टेड DEK क्लाइंट को भेजा जाता है
- क्लाइंट KMS से CMK का उपयोग करके एन्क्रिप्टेड कुंजी को डिक्रिप्ट करने के लिए पूछता है और KMS प्लेनटेक्स्ट DEK वापस भेजता है
- क्लाइंट अब एन्क्रिप्टेड डेटा को डिक्रिप्ट कर सकता है
- Client KMS से data key के लिए request करता है
- KMS plaintext DEK और CMK के साथ encrypted DEK रिटर्न करता है
- दोनों keys वापस भेज जात हैं
- क्लाइंट फिर plaintext DEK से डेटा को एन्क्रिप्ट करता है और S3 को encrypted data + encrypted DEK भेजता है (जो कि S3 के अंदर encrypted डेटा के metadata के रूप में सेव होता है)
-क्रिप्शन:
- encrypted data के साथ encrypted DEK क्लाइंट को भेजा जाता है
- क्लाइंट KMS से CMK का उपयोग करके encrypted key को decrypt करने के लिए कहता है और KMS plaintext DEK वापस भेजता है
- क्लाइंट अब encrypted डेटा को decrypt कर सकता है
</details>
<details>
<summary><strong>क्लाइंट-साइड एन्क्रिप्शन ग्राहक द्वारा प्रदान की गई कुंजियों के साथ, CSE-C</strong></summary>
<summary><strong>Client-side encryption with customer provided keys, CSE-C</strong></summary>
इस तंत्र का उपयोग कर हुए, आप अपनी प्रदान की गई कुंजियों का उपयोग कर सकते हैं और S3 के लिए डेटा भेजने से पहले अपने डेटा को एन्क्रिप्ट करने के लिए AWS-SDK क्लाइंट का उपयोग कर सकते हैं।
इस मेकेनिज़्म का उपयोग करे आप अपनी स्वयं की प्रदान की हुई keys का उपयोग कर सकते हैं और AWS-SDK client का उपयोग करके डेटा भेजने से पहले उसे encrypt कर सकते हैं।
- एन्क्रिप्शन:
- क्लाइंट एक DEK उत्पन्न करता है और प्लेनटेक्स्ट डेटा को एन्क्रिप्ट करता है
- फिर, अपनी कस्टम CMK का उपयोग करके DEK को एन्क्रिप्ट करता है
- एन्क्रिप्टेड डेटा + एन्क्रिप्टेड DEK को S3 में जमा करता है जहां इसे संग्रहीत किया जाता है
-िक्रिप्शन:
- S3 एन्क्रिप्टेड डेटा और DEK भेजता है
- चूकि क्लाइंट के पास पहले से DEK को एन्क्रिप्ट करने के लिए उपयोग की गई CMK है, ह DEK को डिक्रिप्ट करता है और फिर प्लेनटेक्स्ट DEK का उपयोग करके डेटा को डिक्रिप्ट करता है
- क्लाइंट एक DEK जेनरेट करता है और plaintext डेटा को एन्क्रिप्ट करता है
- फिर, अपनी custom CMK का उपयोग करके वह DEK को एन्क्रिप्ट करता है
- encrypted data + encrypted DEK को S3 पर सबमिट करता है जहाँ यह स्टोर होता है
-क्रिप्शन:
- S3 encrypted data और DEK भेजता है
- चूकि क्लाइंट के पास वह CMK पहले से मौजूद है जिसका उपयोग DEK को एन्क्रिप्ट करने के लिए हुआ था, ह DEK को decrypt करता है और फिर plaintext DEK से डेटा को decrypt करता है
</details>
### **गणना**
### **Enumeration**
AWS संगठनों से समझौता करने के पारंपरिक मुख्य तरीकों में से एक सार्वजनिक रूप से सुलभ बाल्टियों से समझौता करना शुरू होता है। **आप पा सकते हैं** [**सार्वजनिक बाल्टी गणक इस पृष्ठ पर**](../aws-unauthenticated-enum-access/#s3-buckets)**.**
AWS orgs को compromise करने के पारंपरिक प्रमुख तरीकों में से एक सार्वजनिक रूप से accessible buckets को compromise करना है। **You can find** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
```bash
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -229,16 +229,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### dual-stack <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>
आप एक S3 बकेट को डुअल-स्टैक एंडपॉइंट के माध्यम से वर्चुअल होस्टेड-स्टाइल या पाथ-स्टाइल एंडपॉइंट नाम का उपयोग करके एक्सेस कर सकते हैं। ये IPv6 के माध्यम से S3 तक पहुँचने के लिए उपयोगी हैं।
आप virtual hosted-style या path-style endpoint नाम का उपयोग करके dual-stack endpoint के माध्यम से किसी S3 bucket तक पहुँच सकते हैं। ये S3 को IPv6 के माध्यम से एक्सेस करने के लिए उपयोगी हैं।
डुअल-स्टैक एंडपॉइंट निम्नलिखित सिंटैक्स का उपयोग करते हैं:
Dual-stack endpoints निम्नलिखित सिंटैक्स का उपयोग करते हैं:
- `bucketname.s3.dualstack.aws-region.amazonaws.com`
- `s3.dualstack.aws-region.amazonaws.com/bucketname`
### Privesc
अगली पृष्ठ में आप **S3 अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाने** के तरीके की जांच कर सकते हैं:
नीचे दिए पृष्ठ में आप देख सकते हैं कि कैसे **abuse S3 permissions to escalate privileges**:
{{#ref}}
../aws-privilege-escalation/aws-s3-privesc/README.md
@@ -266,19 +266,19 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
### S3 HTTP Cache Poisoning Issue <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>
[**इस शोध के अनुसार**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) यह संभव था कि किसी मनमाने बकेट के उत्तर को इस तरह कैश किया जाए जैसे कि यह किसी अन्य का हो। इसका दुरुपयोग करके उदाहरण के लिए जावास्क्रिप्ट फ़ाइल के उत्तरों को बदलना और S3 का उपयोग करके स्थिर कोड को स्टोर करने वाले मनमाने पृष्ठों को समझौता करना संभव था।
[**इस रिसर्च के अनुसार**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) यह संभव था कि किसी भी bucket की response को cache किया जाए मानो वह किसी अन्य bucket की हो। इसका दुरुपयोग करके, उदाहरण के लिए javascript file responses को बदलकर और S3 का उपयोग करके static code स्टोर करने वाले किसी भी पृष्ठ को compromise किया जा सकता था।
## Amazon Athena
Amazon Athena एक इंटरएक्टिव क्वेरी सेवा है जो **डेटा का विश्लेषण** करना आसान बनाती है सीधे Amazon Simple Storage Service (Amazon **S3**) **का उपयोग करके** मानक **SQL**
Amazon Athena एक interactive query service है जो Amazon Simple Storage Service (Amazon **S3**) में सीधे standard **SQL** का उपयोग करके **डेटा का विश्लेषण** करना आसान बनाती है
आपको **एक रिलेशनल DB टेबल तैयार करने** की आवश्यकता है जिसमें उस सामग्री का प्रारूप हो जो निगरानी किए गए S3 बकेट में दिखाई देने वाली है। और फिर, Amazon Athena लॉग से DB को भरने में सक्षम होगी, ताकि आप इसे क्वेरी कर सकें।
आपको उन monitored S3 buckets में आने वाली सामग्री के फ़ॉर्मेट के साथ एक **relational DB table तैयार करना** होगा। और फिर, Amazon Athena logs से DB को populate कर सकेगा, ताकि आप उस पर query चला सकें।
Amazon Athena **पहले से एन्क्रिप्टेड S3 डेटा को क्वेरी करने की क्षमता का समर्थन करत है** और यदि इसे इस तरह से कॉन्फ़िगर किया गया है, तो **Athena क्वेरी के परिणामों को भी एन्क्रिप्ट कर सकत है जिन्हें फिर S3 में स्टोर किया जा सकता है**
Amazon Athena पहले से encrypted S3 data को query करने की क्षमता का समर्थन करत है और यदि इसे configure किया गया है, तो **Athena queried results को encrypt भी कर सकत है जिन्हें बाद में S3 में store किया जा सकता है**
**परिणामों का यह एन्क्रिप्शन आधारभूत क्वेरी किए गए S3 डेटा से स्वतंत्र है**, जिसका अर्थ है कि भले ही S3 डेटा एन्क्रिप्ट न हो, क्वेरी किए गए परिणाम एन्क्रिप्ट कि जा सकत है कुछ बिंदुओं पर ध्यान देने की आवश्यकता है कि Amazon Athena केवल उन डेटा का समर्थन करत है जो **निम्नलिखित S3 एन्क्रिप्शन विधियों** के साथ **एन्क्रिप्टेड** हैं, **SSE-S3, SSE-KMS, और CSE-KMS**
**परिणामों का यह एन्क्रिप्शन underlying queried S3 डेटा से स्वतंत्र है**, अर्थात् भले ही S3 डेटा encrypted न हो, queried results को encrypt किया जा सकत है। ध्यान रखने योग्य कुछ बातें हैं: Amazon Athena केवल उन डेटा का समर्थन करत है जो निम्नलिखित S3 encryption methods के साथ **encrypted** किए गए हैं, **SSE-S3, SSE-KMS, and CSE-KMS**
SSE-C और CSE-E का समर्थ नहीं किया जाता है। इसके अलावा, यह समझना महत्वपूर्ण है कि Amazon Athena केवल **एन्क्रिप्टेड ऑब्जेक्ट्स पर क्वेरी चलाएग जो क्वेरी के स्वयं के क्षेत्र में हैं**। यदि आपको KMS का उपयोग करके एन्क्रिप्टेड S3 डेटा को क्वेरी करने की आवश्यकता है, तो क्वेरी करने के लिए Athena उपयोगकर्ता द्वारा विशिष्ट अनुमतियों की आवश्यकता होती है
SSE-C और CSE-C समर्थित नहीं है। इसके अतिरिक्त, यह समझना महत्वपूर्ण है कि Amazon Athena केवल उन **encrypted objects पर ही queries चलाएग जो query के समान region में हैं**। यदि आपको KMS का उपयोग करके encrypted S3 data को query करने की आवश्यकता है, तो Athena user को query करने में सक्षम बनाने के लिए विशिष्ट permissions की आवश्यकता होगी
### Enumeration
```bash