
मल्टी-थ्रेडेड AWS इन्वेंटरी संग्रह उपकरण जिसमें सुरक्षा-प्रासंगिक संसाधनों और मेटाडेटा पर ध्यान केंद्रित किया गया है।
Ruby में लिखा गया एक बहु-थ्रेडेड AWS सुरक्षा-केंद्रित इन्वेंट्री संग्रह उपकरण।
यह उपकरण बड़ी मात्रा में AWS संसाधन विशेषताओं और मेटाडेटा के कुशल संग्रह की सुविधा के लिए बनाया गया था। इसका उद्देश्य AWS वातावरण के सुरक्षा कॉन्फ़िगरेशन और मुद्रा से संबंधित लगभग सब कुछ एकत्र करना है।
मौजूदा उपकरण (जैसे AWS Config) जो किसी प्रकार का संसाधन संग्रह करते हैं, उनमें सुरक्षा मुद्रा (जैसे विस्तृत संसाधन विशेषता डेटा, पूरी तरह से पार्स की गई नीति दस्तावेज़, और नेस्टेड संसाधन संबंध) को सटीक रूप से मापने के लिए आवश्यक कवरेज और विशिष्टता का अभाव है।
AWS Recon बड़े खातों से संग्रह को स्वचालित पुनर्प्रयास (नेटवर्क विश्वसनीयता या API थ्रॉटलिंग के कारण), बड़े प्रतिक्रियाओं का स्वचालित पेजिंग (> 100 संसाधन प्रति API कॉल), और संग्रह को गति देने के लिए बहु-थ्रेडेड समानांतर अनुरोधों का लाभ उठाकर संभालता है।
** उपयोग का अर्थ समर्थन नहीं है
AWS Recon को ReadOnlyAccess वाली AWS खाता भूमिका या क्रेडेंशियल्स चाहिए। पूर्ण AdministratorAccess अत्यधिक विशेषाधिकार प्राप्त है, लेकिन यह भी काम करेगा। SecurityAudit नीति पर्याप्त नहीं है क्योंकि यह कई सेवाओं तक पहुँच को छोड़ देती है।
बिना कुछ स्थापित किए पूर्व-निर्मित इमेज चलाने के लिए Docker संस्करण 19.x या उससे ऊपर का उपयोग करें।
यदि आपके पास पहले से Ruby स्थापित है (2.6.x या 2.7.x), तो आप Ruby gem स्थापित करना चाह सकते हैं।
AWS Recon को Docker कंटेनर के माध्यम से स्थानीय रूप से या Ruby gem स्थापित करके चलाया जा सकता है।
Docker कंटेनर के माध्यम से चलाने के लिए, आवश्यक AWS क्रेडेंशियल्स को Docker run कमांड में पास करें। उदाहरण के लिए:
$ docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -v -s EC2 -r global,us-east-1,us-east-2
स्थानीय रूप से चलाने के लिए, पहले gem स्थापित करें:
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17
या इसे bundle का उपयोग करके अपनी Gemfile में जोड़ें:
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17
AWS Recon किसी भी AWS क्रेडेंशियल्स (आवश्यकताएँ देखें) का लाभ उठाएगा जो वर्तमान में उस वातावरण में उपलब्ध है जिसमें यह चलता है। यदि आप कई खातों से संग्रह कर रहे हैं, तो आप विभिन्न क्रेडेंशियल्स प्रबंधित करने के लिए aws-vault जैसी किसी चीज़ का लाभ उठाना चाह सकते हैं।
$ aws-vault exec profile -- aws_recon
सादे पर्यावरण चर भी ठीक काम करेंगे।
$ AWS_PROFILE=<profile> aws_recon
aws-vault प्रबंधित क्रेडेंशियल्स का उपयोग करके Docker कंटेनर से चलाने के लिए (stdout पर आउटपुट):
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
darkbitio/aws_recon:latest \
aws_recon -j -s EC2 -r global,us-east-1,us-east-2
aws-vault प्रबंधित क्रेडेंशियल्स का उपयोग करके Docker कंटेनर से चलाने और आउटपुट को फ़ाइल में सहेजने के लिए, आपको कुछ आवश्यकताओं को पूरा करना होगा। पहले, Docker को उस पथ (या उसके ऊपर के पैरेंट) को बाइंड माउंट करने की पहुँच चाहिए जिसे आप निर्दिष्ट करते हैं। दूसरे, आपको आउटपुट सहेजने के लिए एक खाली फ़ाइल बनानी होगी (जैसे output.json)। ऐसा इसलिए है क्योंकि चलने के समय केवल वही एक फ़ाइल Docker कंटेनर में माउंट की जाती है। उदाहरण के लिए:
एक खाली फ़ाइल बनाएँ।
$ touch output.json
aws_recon कंटेनर चलाएँ, आउटपुट फ़ाइल निर्दिष्ट करते हुए।
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -s EC2 -v -r global,us-east-1,us-east-2
आप संग्रह चलने के दौरान स्थिति और गतिविधि देखने के लिए शुरू में -v या --verbose ध्वज का उपयोग करना चाह सकते हैं।
वर्बोज़ मोड में, कंसोल आउटपुट दिखाएगा:
<thread>.<region>.<service>.<operation>
t उपसर्ग इंगित करता है कि कोई विशेष अनुरोध किस थ्रेड के तहत चल रहा है। क्षेत्र, सेवा, और संचालन इंगित करते हैं कि वर्तमान में कौन सा अनुरोध संचालन प्रगति पर है और कहाँ।
$ aws_recon -v
t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances
Finished in 46 seconds. Saving resources to output.json.
# S3 और EC2 वैश्विक संसाधनों के साथ-साथ us-east-1 और us-east-2 एकत्र करें
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# S3 और EC2 वैश्विक संसाधनों के साथ-साथ us-east-1 और us-east-2 एकत्र करें
$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# आउटपुट को S3 बकेट में सहेजें
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket
# us-east-1 के अलावा किसी अन्य होम क्षेत्र के साथ S3 बकेट में आउटपुट सहेजें
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket:us-west-2
उदाहरण OpenCSPM स्वरूपित (NDJSON) आउटपुट।
$ AWS_PROFILE=<profile> aws_recon -l \
-s S3,EC2 \
-r global,us-east-1,us-east-2 \
-f custom
या
$ AWS_PROFILE=<profile> aws_recon -j \
-s S3,EC2 \
-r global,us-east-1,us-east-2 \
-f custom > output.json
अनुमतियों से संबंधित API अपवादों को अधिकांश मामलों में चुपचाप अनदेखा कर दिया जाता है। ये त्रुटियाँ आमतौर पर निम्नलिखित में से किसी एक कारण से होती हैं:
verbose मोड में, आप आउटपुट में अपवाद लॉग देखेंगे:
t2.us-east-1.EC2.describe_subnets.0
t4.us-east-1.SSM.describe_instance_information.0
t6.us-east-1.SecurityHub.InvalidAccessException <-----
t2.us-east-1.EC2.describe_addresses.0
t4.us-east-1.SSM.describe_parameters.0
t1.us-east-1.GuardDuty.list_detectors.0
इन अपवादों को फिर से उठाने के लिए -q कमांड लाइन विकल्प का उपयोग करें ताकि पहुँच संबंधी समस्याओं का निवारण आसान हो।
Traceback (most recent call last):
arn:aws:sts::1234567890:assumed-role/role/my-audit-role is not authorized to perform:
codepipeline:GetPipeline on resource: arn:aws:codepipeline:us-west-2:1234567890:pipeline
(Aws::CodePipeline::Errors::AccessDeniedException)
स्टैक ट्रेस की अंतिम पंक्ति पर वह सटीक API संचालन इंगित किया गया है जिसने अपवाद को ट्रिगर किया। यदि आप आवश्यक पहुँच को हल नहीं कर सकते हैं, तो आपको उन सेवाओं को -x या --not-services के साथ बाहर करना चाहिए, या संग्रह जारी रखने के लिए -q विकल्प को छोड़ देना चाहिए।
AWS Recon दुनिया भर के एंडपॉइंट्स पर कई API कॉल करने की I/O चुनौतियों को दूर करने के लिए कई थ्रेड्स का उपयोग करता है।
IAM, Shield, और Support जैसी वैश्विक सेवाओं के लिए, अनुरोध बहु-थ्रेडेड नहीं हैं। S3 मॉड्यूल बहु-थ्रेडेड है क्योंकि प्रत्येक बकेट को पूर्ण मेटाडेटा एकत्र करने के लिए कई अतिरिक्त कॉल की आवश्यकता होती है।
क्षेत्रीय सेवाओं के लिए, एक क्षेत्र में प्रत्येक सेवा के लिए एक थ्रेड (थ्रेड सीमा तक) उत्पन्न होता है। डिफ़ॉल्ट रूप से, अधिकतम 8 थ्रेड का उपयोग किया जाएगा। यदि आपके खाते में कई क्षेत्रों में संसाधन फैले हुए हैं, तो आप -t X के साथ थ्रेड बढ़ाकर गति में सुधार देख सकते हैं, जहाँ X थ्रेड की संख्या है।
AWS Recon एक नए/खाली खाते में न्यूनतम ~2,000 API कॉल करेगा, केवल सभी 20 मानक (गैर-GovCloud, गैर-चीन) क्षेत्रों में समर्थित सेवाओं को क्वेरी करने के लिए। यदि आप डिफ़ॉल्ट (8) से अधिक थ्रेड सक्षम करते हैं तो बड़े खातों पर API दर-सीमा (थ्रॉटलिंग) का सामना करने की बहुत संभावना है।
Recon स्वचालित रूप से बैक-ऑफ़ करेगा और API प्रतिक्रिया में पुनर्प्रयास सीमाओं का सम्मान करेगा। यदि आप संग्रह के दौरान लंबे विराम देखते हैं, तो यह संभवतः ऐसा हो रहा है। वायर ट्रेस का निरीक्षण करने और यह देखने के लिए कि क्या आप थ्रॉटल हो रहे हैं, -d या --debug विकल्प के साथ संग्रह पुनः प्रयास करें। यदि आप नियमित रूप से दर-सीमित हो रहे हैं, तो कम थ्रेड का उपयोग करने या AWS से उच्च दर सीमा का अनुरोध करने पर विचार करें।
अधिकांश उपयोगकर्ता संग्रह को प्रासंगिक सेवाओं और क्षेत्रों तक सीमित करना चाहेंगे। बिना किसी बहिष्करण के चलाने से खाते के लिए सक्षम सभी क्षेत्रों से सभी संसाधनों को एकत्र करने का प्रयास होगा।
$ aws_recon -h
AWS Recon - AWS Inventory Collector (0.5.17)
Usage: aws_recon [options]
-r, --regions [REGIONS] स्कैन करने के लिए क्षेत्र, अल्पविराम से अलग (डिफ़ॉल्ट: सभी)
-n, --not-regions [REGIONS] छोड़ने के लिए क्षेत्र, अल्पविराम से अलग (डिफ़ॉल्ट: कोई नहीं)
-s, --services [SERVICES] स्कैन करने के लिए सेवाएँ, अल्पविराम से अलग (डिफ़ॉल्ट: सभी)
-x, --not-services [SERVICES] छोड़ने के लिए सेवाएँ, अल्पविराम से अलग (डिफ़ॉल्ट: कोई नहीं)
-c, --config [CONFIG] सेवाओं और क्षेत्रों के लिए कॉन्फ़िग फ़ाइल निर्दिष्ट करें (जैसे config.yaml)
-b, --s3-bucket [BUCKET:REGION] आउटपुट फ़ाइल S3 बकेट में लिखें (डिफ़ॉल्ट: '')
-o, --output [OUTPUT] आउटपुट फ़ाइल निर्दिष्ट करें (डिफ़ॉल्ट: output.json)
-f, --format [FORMAT] आउटपुट फ़ॉर्मेट निर्दिष्ट करें (डिफ़ॉल्ट: aws)
-t, --threads [THREADS] अधिकतम थ्रेड निर्दिष्ट करें (डिफ़ॉल्ट: 8, अधिकतम: 128)
-l, --json-lines NDJSON/JSONL फ़ॉर्मेट आउटपुट करें (डिफ़ॉल्ट: false)
-u, --user-data EC2 इंस्टेंस उपयोगकर्ता डेटा एकत्र करें (डिफ़ॉल्ट: false)
-z, --skip-slow धीमे संचालन छोड़ें (डिफ़ॉल्ट: false)
-g, --skip-credential-report IAM क्रेडेंशियल रिपोर्ट जनरेट करना छोड़ें (डिफ़ॉल्ट: false)
-j, --stream-output JSON लाइन्स को stdout पर स्ट्रीम करें (डिफ़ॉल्ट: false)
-v, --verbose क्लाइंट प्रगति और वर्तमान संचालन आउटपुट करें
-q, --quit-on-exception यदि API त्रुटि का सामना हो तो संग्रह रोकें (डिफ़ॉल्ट: false)
-d, --debug वायर ट्रेस जानकारी के साथ डीबग आउटपुट करें
-h, --help यह सहायता जानकारी प्रिंट करें
आउटपुट हमेशा JSON के किसी न किसी रूप में होता है - या तो JSON लाइन्स या सादा JSON। आउटपुट या तो फ़ाइल में लिखा जाता है (डिफ़ॉल्ट), या stdout पर लिखा जाता है (-j के साथ)।
S3 बकेट में लिखते समय, JSON आउटपुट स्वचालित रूप से gzip से संपीड़ित होता है।
यदि आपने मैन्युअल रूप से सक्षम क्षेत्रों को सक्षम किया है:
और आप किसी खाते में भूमिका मानने के लिए STS का उपयोग कर रहे हैं, तो आपको उस खाते में v2 STS टोकन सक्षम करने की आवश्यकता होगी जहाँ से आप भूमिका मान रहे हैं ताकि उन क्षेत्रों के विरुद्ध AWS Recon चला सकें।
संस्करण 1 टोकन केवल AWS क्षेत्रों में मान्य हैं जो डिफ़ॉल्ट रूप से उपलब्ध हैं। ये टोकन मैन्युअल रूप से सक्षम क्षेत्रों, जैसे एशिया प्रशांत (हांगकांग) में काम नहीं करते हैं। संस्करण 2 टोकन सभी क्षेत्रों में मान्य हैं। हालाँकि, संस्करण 2 टोकन लंबे होते हैं और उन सिस्टमों को प्रभावित कर सकते हैं जहाँ आप अस्थायी रूप से टोकन संग्रहीत करते हैं।
यदि आप स्थैतिक एक्सेस कुंजी/गुप्त का उपयोग कर रहे हैं, तो आप STS टोकन संस्करण की परवाह किए बिना इन क्षेत्रों से संग्रह कर सकते हैं।
सेवा द्वारा वर्तमान "कवरेज" नीचे सूचीबद्ध है। बिना कवरेज वाली सेवाओं को अंततः जोड़ा जाएगा। PR निश्चित रूप से स्वागत योग्य हैं। :)
AWS Recon का उद्देश्य उन सभी संसाधनों और मेटाडेटा को एकत्र करना है जो आपके AWS खाते (खातों) की सुरक्षा मुद्रा निर्धारित करने में प्रासंगिक हैं। हालाँकि, यह वास्तव में सुरक्षा मुद्रा के लिए संसाधनों की जाँच नहीं करता है - यह अन्य उपकरणों का काम है जो AWS Recon के आउटपुट को इनपुट के रूप में लेते हैं।
AWS Recon के प्रमुख प्रेरणाओं में से एक एक ऐसा उपकरण बनाना था जिसे बनाए रखना और विस्तारित करना आसान हो। यदि आपको लगता है कि किसी विशेष सेवा के लिए कवरेज में सुधार किया जा सकता है, तो हम इस प्रभाव के लिए PR का स्वागत करेंगे। Ruby से मध्यम परिचितता वाला कोई भी व्यक्ति मौजूदा संग्राहकों द्वारा उपयोग किए गए पैटर्न का अनुकरण करके किसी विशिष्ट सेवा को क्वेरी करने और परिणामों को संसाधन संग्रह में जोड़ने में सक्षम होगा।
इस रिपॉजिटरी को क्लोन करें:
$ git clone [email protected]:darkbitio/aws-recon.git
$ cd aws-recon
यदि RVM का उपयोग कर रहे हैं तो एक स्टिकी gemset बनाएँ:
$ rvm use 2.7.2@aws_recon_dev --create --ruby-version
निर्भरताएँ स्थापित करने के लिए bin/setup चलाएँ। फिर, परीक्षण चलाने के लिए rake test चलाएँ। आप प्रयोग करने के लिए एक इंटरैक्टिव प्रॉम्प्ट के लिए bin/console भी चला सकते हैं।
इस gem को अपनी स्थानीय मशीन पर स्थापित करने के लिए, bundle exec rake install चलाएँ। एक नया संस्करण जारी करने के लिए, version.rb में संस्करण संख्या अपडेट करें, और फिर bundle exec rake release चलाएँ, जो संस्करण के लिए एक git टैग बनाएगा, git कमिट और टैग पुश करेगा, और .gem फ़ाइल को rubygems.org पर पुश करेगा।
AWS Recon इन उपकरणों के पीछे के लोगों और टीमों के उत्कृष्ट कार्य से प्रेरित था: