
एक टर्मिनल-आधारित AWS सुरक्षा स्कैनर जिसमें VPC, IAM, S3, CloudTrail, कंटेनर (ECS/EKS), और AI हमला पहचान पर 102+ सुरक्षा जाँचें हैं। खतरनाक IAM अनुमतियाँ, उजागर रहस्य, गलत कॉन्फ़िगर किए गए S3 बकेट, कंटेनर कमजोरियाँ, और उभरते LLMjacking खतरों का पता लगाता है।
एक टर्मिनल-आधारित AWS सुरक्षा स्कैनर जिसमें VPC, IAM, S3, CloudTrail, कंटेनर (ECS/EKS) और AI हमले का पता लगाने के लिए 100+ सुरक्षा जाँच शामिल हैं। यह खतरनाक IAM अनुमतियाँ, उजागर रहस्य, गलत कॉन्फ़िगर किए गए S3 बकेट, कंटेनर कमजोरियाँ और उभरते LLMjacking खतरों का पता लगाता है।
उत्पाद अवलोकन: docs/CAPABILITIES_OVERVIEW.md
*:*).env, .git, क्रेडेंशियल्स)फरवरी 2025 के खतरे की खुफिया जानकारी पर आधारित: 8 मिनट का AWS उल्लंघन
| श्रेणी | गणना |
|---|---|
| कोर (IAM, VPC, S3, CloudTrail, रहस्य) | 38 |
# macOS
brew install awscli
# Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install
aws configure
# या नामित प्रोफ़ाइल का उपयोग करें
aws configure --profile myprofile
आपके AWS क्रेडेंशियल्स में स्कैन की जा रही सेवाओं तक केवल-पढ़ने की पहुँच होनी चाहिए। AWS प्रबंधित नीति ReadOnlyAccess काम करती है, या नीचे आवश्यक अनुमतियाँ देखें।
नोट: aws-perimeter केवल पढ़ने के संचालन करता है और आपके AWS संसाधनों को कभी संशोधित नहीं करता।
curl -sSfL https://raw.githubusercontent.com/thirukguru/aws-perimeter/main/install.sh | sh
go install github.com/thirukguru/aws-perimeter@latest
aws-perimeter # पूर्ण सुरक्षा स्कैन चलाएँ
aws-perimeter --output json # JSON आउटपुट
aws-perimeter --profile prod # विशिष्ट AWS प्रोफ़ाइल
aws-perimeter --region us-west-2 # विशिष्ट क्षेत्र
aws-perimeter --regions us-east-1,us-west-2 # बहु-क्षेत्रीय स्कैन
aws-perimeter --regions us-east-1,us-west-2 --max-parallel 4 # नियंत्रित समवर्ती के साथ बहु-क्षेत्रीय
aws-perimeter --regions us-east-1,us-west-2 --max-parallel 4 --best-effort # कम से कम एक क्षेत्र सफल होने पर सफलता से बाहर निकलें
aws-perimeter --rules # stdout पर RULES.md प्रिंट करें (Markdown)
aws-perimeter --capabilities # stdout पर क्षमताओं का अवलोकन प्रिंट करें (Markdown)
aws-perimeter --all-regions # सभी सक्षम क्षेत्रों को स्कैन करें
aws-perimeter --org-scan --org-role-name OrganizationAccountAccessRole # बहु-खाता संगठन स्कैन
aws-perimeter --org-scan --max-parallel 5 # Org+region fanout समवर्ती
aws-perimeter --output html --output-file report.html # HTML रिपोर्ट उत्पन्न करें
aws-perimeter --store --profile prod --region us-west-2 # स्कैन चलाएँ + स्थायी रखें
aws-perimeter --trends --trend-days 30 --account-id 123456789012 # ऐतिहासिक प्रवृत्ति तालिका दिखाएँ
aws-perimeter history list --db-path ~/.aws-perimeter/history.db
aws-perimeter dashboard --port 8080
फैनआउट मोड (--regions, --all-regions, --org-scan) के लिए --output html --output-file ... के साथ, aws-perimeter प्रति स्कैन इकाई क्षेत्र/खाता + टाइमस्टैम्प प्रत्यय के साथ एक रिपोर्ट लिखता है (उदाहरण के लिए security-report-us-east-1-20260210-213045.html या security-report-123456789012-us-east-1-20260210-213045.html)।
HTML मोड में, टर्मिनल तालिका आउटपुट दबा दिया जाता है और केवल संक्षिप्त सारांश पंक्तियाँ मुद्रित होती हैं।
जब --output json का उपयोग किया जाता है, तो aws-perimeter बिना किसी बैनर/स्पिनर शोर के एक एकल मान्य JSON दस्तावेज़ उत्सर्जित करता है, इसलिए यह पाइपलाइनों के लिए सुरक्षित है।
aws-perimeter --profile prod --region us-west-2 --output json | jq .
# बहु-क्षेत्रीय JSON एक एकत्रित शीर्ष-स्तरीय JSON दस्तावेज़ उत्सर्जित करता है:
aws-perimeter --profile prod --regions us-east-1,us-west-2 --output json | jq .
# stdout रीडायरेक्शन के माध्यम से दस्तावेज़ निर्यात करें
aws-perimeter --rules > rules.md
aws-perimeter --capabilities > capabilities.md
बहु-क्षेत्रीय JSON पेलोड में शामिल हैं:
summary (total_regions, success, failed, skipped)results (प्रति-क्षेत्र समेकित स्कैन पेलोड)failures (क्षेत्र + त्रुटि विवरण जब कोई क्षेत्र स्कैन विफल होता है)गैर-JSON आउटपुट मोड में बहु-क्षेत्रीय और संगठन स्कैन के लिए, aws-perimeter निष्पादन के अंत में एक समेकित सारांश प्रिंट करता है:
account_id, account_name, region, status, duration, और error के साथ।TOTAL, SUCCESS, FAILED, SKIPPED)।--max-parallel और --best-effort--max-parallel फैनआउट मोड (--regions, --all-regions, --org-scan) में एक साथ चलने वाली क्षेत्र/खाता स्कैन इकाइयों की संख्या को नियंत्रित करता है।--max-parallel 3 या --max-parallel 4।--best-effort बहु-क्षेत्रीय स्कैन पर लागू होता है: जब कम से कम एक क्षेत्र सफल होता है तो कमांड सफलता (0) के साथ बाहर निकलता है, भले ही कुछ क्षेत्र विफल हों।--best-effort के बिना, कोई भी विफल क्षेत्र गैर-शून्य निकास कोड लौटाता है।failures के अंतर्गत दिखाई देते हैं।पूर्ण सुविधा कवरेज (बहु-क्षेत्रीय और संगठन स्कैन सहित) के लिए निम्नलिखित अनुमतियाँ आवश्यक हैं:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"organizations:DescribeOrganization",
"organizations:ListAccounts",
"ec2:Describe*",
"ec2:GetEbsEncryptionByDefault",
"iam:List*",
"iam:Get*",
"iam:GenerateCredentialReport",
"s3:ListAllMyBuckets",
"s3:GetBucket*",
"s3:GetEncryptionConfiguration",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudtrail:LookupEvents",
"lambda:ListFunctions",
"lambda:GetFunctionConfiguration",
"lambda:GetFunction",
"ecr:DescribeRepositories",
"ecr:DescribeImages",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer",
"ecs:ListClusters",
"ecs:DescribeClusters",
"ecs:ListServices",
"ecs:DescribeServices",
"ecs:DescribeTaskDefinition",
"eks:ListClusters",
"eks:DescribeCluster",
"eks:ListNodegroups",
"eks:DescribeNodegroup",
"bedrock:ListProvisionedModelThroughputs",
"bedrock:ListCustomModels",
"bedrock:GetModelInvocationLoggingConfiguration",
"guardduty:ListDetectors",
"guardduty:GetDetector",
"guardduty:ListFindings",
"guardduty:GetFindings",
"securityhub:DescribeHub",
"securityhub:GetFindings",
"config:Describe*",
"kms:ListKeys",
"kms:DescribeKey",
"kms:GetKeyRotationStatus",
"kms:Decrypt",
"rds:DescribeDB*",
"dynamodb:ListTables",
"dynamodb:DescribeTable",
"dynamodb:DescribeContinuousBackups",
"secretsmanager:ListSecrets",
"elasticloadbalancing:Describe*",
"backup:List*",
"apigateway:GET",
"cloudfront:List*",
"cloudfront:Get*",
"cloudwatch:GetMetricStatistics",
"sns:ListTopics",
"sqs:ListQueues"
],
"Resource": "*"
}
]
}
kms:Decrypt केवल एन्क्रिप्टेड ऑब्जेक्ट्स/पैकेजों (उदाहरण के लिए SSE-KMS S3 ऑब्जेक्ट रीड) को स्कैन करते समय आवश्यक है। उत्पादन में इसे आवश्यक KMS कुंजियों तक सीमित करें।
--org-scan के लिए, प्रबंधन प्रिंसिपल को सदस्य-खाता भूमिका (डिफ़ॉल्ट: OrganizationAccountAccessRole) ग्रहण करने की अनुमति होनी चाहिए, उदाहरण के लिए:
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::*:role/OrganizationAccountAccessRole"
}
सदस्य खाता भूमिका विश्वास नीति को आपके स्कैनर प्रिंसिपल (उपयोगकर्ता/भूमिका) को इसे ग्रहण करने की अनुमति देनी चाहिए (और यदि आप --external-id का उपयोग करते हैं तो sts:ExternalId शर्त शामिल करें)।
सुझाव: त्वरित शुरुआत के लिए, अपने IAM उपयोगकर्ता/भूमिका में AWS प्रबंधित नीति
arn:aws:iam::aws:policy/ReadOnlyAccessसंलग्न करें।
Apache License 2.0
| विस्तारित (Lambda, ELB, Route53, Inspector, आदि) | 35 |
| कंटेनर सुरक्षा (ECS + EKS) | 22 |
| AI हमले का पता लगाना | 7 |
| कुल | 102 |
| जाँच | गंभीरता | विवरण |
|---|
| विशेषाधिकार वृद्धि | 🔴 गंभीर | उपयोगकर्ता व्यवस्थापक तक बढ़ सकता है |
| व्यवस्थापक पहुँच (:) | 🔴 गंभीर | पूर्ण AWS पहुँच प्रदान |
| उजागर रहस्य | 🔴 गंभीर | Lambda/EC2 में API कुंजियाँ/टोकन |
| सार्वजनिक S3 बकेट | 🔴 गंभीर | बकेट सार्वजनिक रूप से सुलभ |
| कोई CloudTrail नहीं | 🔴 गंभीर | कोई ऑडिट लॉगिंग नहीं |
| खुला SSH/RDP | 🔴 गंभीर | पोर्ट 22/3389 इंटरनेट के लिए |
| विशेषाधिकार प्राप्त कंटेनर | 🔴 गंभीर | ECS कंटेनर रूट पहुँच के साथ |
| GPU IMDSv1 | 🔴 गंभीर | GPU इंस्टेंस क्रेडेंशियल संवेदनशील |
| क्रॉस-अकाउंट विश्वास | 🟠 उच्च | बाहरी खाता भूमिका ग्रहण कर सकता है |
| EKS सार्वजनिक एंडपॉइंट | 🟠 उच्च | Kubernetes API सार्वजनिक रूप से सुलभ |
| Bedrock कोई लॉगिंग नहीं | 🟠 उच्च | AI मॉडल उपयोग ऑडिट नहीं किया गया |
| फ़्लैग | छोटा | विवरण |
|---|
--profile | -p | उपयोग करने के लिए AWS प्रोफ़ाइल |
--region | -r | AWS क्षेत्र |
--regions | अल्पविराम से अलग किए गए क्षेत्र | |
--all-regions | सभी सक्षम क्षेत्रों को स्कैन करें | |
--org-scan | सभी सक्रिय AWS संगठन खातों को स्कैन करें | |
--org-role-name | सदस्य खातों में ग्रहण करने के लिए IAM भूमिका का नाम | |
--external-id | क्रॉस-अकाउंट भूमिका ग्रहण के लिए बाहरी ID | |
--output | -o | आउटपुट प्रारूप: table, json, या html |
--rules | नियम सूची Markdown प्रिंट करें और बाहर निकलें | |
--capabilities | क्षमताएँ Markdown प्रिंट करें और बाहर निकलें | |
--output-file | -f | आउटपुट फ़ाइल (html के लिए आवश्यक) |
--store | SQLite में स्कैन परिणाम स्थायी रखें | |
--db-path | कस्टम SQLite DB पथ | |
--trends | ऐतिहासिक रुझान दिखाएँ | |
--trend-days | दिनों में रुझान विंडो (डिफ़ॉल्ट 30) | |
--compare | दो हालिया स्कैन की तुलना करें | |
--export-json | रुझान JSON फ़ाइल निर्यात करें | |
--export-csv | रुझान CSV फ़ाइल निर्यात करें | |
--account-id | रुझान/इतिहास के लिए खाता फ़िल्टर | |
--max-parallel | अधिकतम समवर्ती क्षेत्र/खाता स्कैन इकाइयाँ | |
--best-effort | बहु-क्षेत्रीय स्कैन के लिए, यदि कम से कम एक क्षेत्र सफल होता है तो सफलता लौटाएँ | |
--dry-run | सुधार पूर्वावलोकन मोड | |
--remediate | समर्थित सुधार लागू करें | |
--dashboard-port | डैशबोर्ड पोर्ट (रूट फ़्लैग; डैशबोर्ड उपकमांड --port का उपयोग करता है) | |
--version | -v | संस्करण जानकारी |
| चरण | स्थिति | नियम |
|---|
| चरण 1 | ✅ पूर्ण | 73 |
| चरण 2 | 🔲 प्रगति पर | +20 |
| चरण 2.5 | 🆕 AI हमले का पता लगाना | +13 |
| चरण 3 | 🔲 योजनाबद्ध | +15 |
| चरण 4 | 🔲 योजनाबद्ध | सुविधाएँ |