
Cloudsplaining एक AWS IAM सुरक्षा मूल्यांकन उपकरण है जो न्यूनतम विशेषाधिकार के उल्लंघनों की पहचान करता है और जोखिम-प्राथमिकता वाली रिपोर्ट उत्पन्न करता है।
Cloudsplaining एक AWS IAM सुरक्षा मूल्यांकन उपकरण है जो न्यूनतम विशेषाधिकार के उल्लंघनों की पहचान करता है और जोखिम-प्राथमिकता वाली HTML रिपोर्ट तैयार करता है।
' > custom-guidance.html ' > custom-appendices.html ``` # कस्टम सामग्री के साथ रिपोर्ट तैयार करें cloudsplaining scan --input-file account-data.json --output reports/पूर्ण दस्तावेज़ीकरण के लिए, कृपया ReadTheDocs पर प्रोजेक्ट पर जाएँ।
Cloudsplaining AWS IAM नीतियों में न्यूनतम विशेषाधिकार के उल्लंघनों की पहचान करता है और एक सुंदर HTML रिपोर्ट तैयार करता है। यह आपके AWS खाते में सभी नीतियों, कई AWS खातों में, या एकल नीति फ़ाइल को स्कैन कर सकता है।
यह उन IAM क्रियाओं की पहचान करने में मदद करता है जो संसाधन बाधाओं का लाभ नहीं उठाती हैं। यह IAM नीतियों को चिह्नित करके सुधार प्रक्रिया को प्राथमिकता देने में भी मदद करता है जो संबंधित AWS खाते के लिए निम्नलिखित जोखिम प्रस्तुत करती हैं बिना किसी प्रतिबंध के:
s3:GetObject, ssm:GetParameter, secretsmanager:GetSecretValue)Cloudsplaining उन IAM भूमिकाओं की भी पहचान करता है जिन्हें AWS कम्प्यूट सेवाओं (जैसे EC2, ECS, EKS, या Lambda) द्वारा मान लिया जा सकता है, क्योंकि वे उपयोगकर्ता-परिभाषित भूमिकाओं की तुलना में अधिक जोखिम प्रस्तुत कर सकती हैं - विशेष रूप से यदि AWS कम्प्यूट सेवा किसी ऐसे इंस्टेंस पर है जो प्रत्यक्ष या अप्रत्यक्ष रूप से इंटरनेट से जुड़ा है। कुछ परिदृश्यों में इन भूमिकाओं को चिह्नित करना पेनिट्रेशन टेस्टर्स (या हमलावरों) के लिए विशेष रूप से उपयोगी है। उदाहरण के लिए, यदि कोई हमलावर ssm:SendCommand निष्पादित करने के विशेषाधिकार प्राप्त करता है और SSM एजेंट स्थापित विशेषाधिकारित EC2 इंस्टेंस हैं, तो वे प्रभावी रूप से उन EC2 इंस्टेंस के विशेषाधिकार प्राप्त कर सकते हैं। AWS Systems Manager Agent के माध्यम से रिमोट कोड निष्पादन पहले से ही एक ज्ञात वृद्धि/शोषण पथ था, लेकिन Cloudsplaining इन मामलों की पहचान करने की प्रक्रिया को आसान बना सकता है। कुछ उदाहरणों के लिए नमूना रिपोर्ट देखें।
आप विभिन्न कारणों से झूठी सकारात्मक परिणामों को फ़िल्टर करने के लिए एक कस्टम बहिष्करण फ़ाइल भी निर्दिष्ट कर सकते हैं। उदाहरण के लिए, उपयोगकर्ता नीतियाँ डिज़ाइन द्वारा अनुमतिपूर्ण होती हैं, जबकि सिस्टम भूमिकाएँ आम तौर पर अधिक प्रतिबंधात्मक होती हैं। आपके पास ऐसे बहिष्करण भी हो सकते हैं जो आपके संगठन की बहु-खाता रणनीति या AWS एप्लिकेशन आर्किटेक्चर के लिए विशिष्ट हों।
Policy Sentry ने हमें बताया कि अंततः एक स्केलेबल तरीके से IAM नीतियों को न्यूनतम विशेषाधिकार के अनुसार लिखना संभव है। Policy Sentry जारी होने से पहले, IAM नीति दस्तावेज़ों को ढूँढना बहुत आसान था जिनमें संसाधन बाधाओं का अभाव था। नीचे दी गई नीति पर विचार करें, जो IAM प्रिंसिपल (एक भूमिका या उपयोगकर्ता) को AWS खाते में किसी भी S3 बकेट पर s3:PutObject चलाने की अनुमति देती है:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
}
]
}
यह बुरा है। आदर्श रूप में, पहुंच को resource ARNs के अनुसार प्रतिबंधित किया जाना चाहिए, जैसे कि:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Policy Sentry इसे करना वास्तव में बहुत आसान बनाता है. एक बार जब Infrastructure as Code डेवलपर्स या AWS प्रशासक इस उपकरण से परिचित हो जाते हैं (जो कि उपयोग करना काफी आसान है), हमने पाया है कि इसका उपयोग बहुत जल्दी शुरू हो जाता है। हालाँकि, यदि आप AWS का उपयोग कर रहे हैं, तो संभवतः IAM नीतियों का एक बहुत बड़ा बैकलॉग है जिसे उन्नत करने की आवश्यकता है। यदि आपके पास सैकड़ों AWS खाते हैं और प्रत्येक में दर्जनों नीतियाँ हैं, तो हम प्रोग्रामेटिक रूप से उन नीतियों की पहचान करके AWS खातों को कैसे सुरक्षित कर सकते हैं जिन्हें ठीक किया जाना चाहिए?
यही कारण है कि हमने Cloudsplaining बनाया।
Cloudsplaining AWS IAM नीतियों में न्यूनतम विशेषाधिकार के उल्लंघनों की पहचान करता है और एक सुंदर HTML रिपोर्ट तैयार करता है। यह आपके AWS खाते में सभी नीतियों, एकाधिक AWS खातों में, या एकल नीति फ़ाइल को स्कैन कर सकता है।
brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining
#### Pip3```bash
pip3 install --user cloudsplaining
cloudsplaining को cloudsplaining --help चलाकर निष्पादित कर सकते हैं।Bash पूर्णता सक्षम करने के लिए, इसे अपने .bashrc में डालें:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"
ZSH पूर्णता सक्षम करने के लिए, अपने .zshrc में यह डालें:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"
आप संपूर्ण खाते के बजाय जोखिमों की पहचान करने के लिए एकल नीति फ़ाइल को भी स्कैन कर सकते हैं।```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json
आउटपुट में एक फ़ाइंडिंग विवरण और उन IAM क्रियाओं की सूची शामिल होगी जो resource constraints का लाभ नहीं उठाती हैं।
आउटपुट निम्नलिखित जैसा दिखेगा:```console
Issue found: Data Exfiltration
Actions: s3:GetObject
Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl
Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus
हम एक पूरे AWS खाते को स्कैन कर सकते हैं और रिपोर्ट तैयार कर सकते हैं। ऐसा करने के लिए, हम AWS IAM get-account-authorization-details API कॉल का उपयोग करते हैं, जो खाते के सभी IAM विवरणों वाली एक बड़ी JSON फ़ाइल (प्रति खाता लगभग 100KB) डाउनलोड करता है। इसमें उपयोगकर्ताओं, समूहों, भूमिकाओं, ग्राहक-प्रबंधित नीतियों और AWS-प्रबंधित नीतियों का डेटा शामिल है।
आपके पास AWS क्रेडेंशियल्स कॉन्फ़िगर होने चाहिए जिन्हें CLI द्वारा उपयोग किया जा सके।
आपके पास iam:GetAccountAuthorizationDetails चलाने की अनुमतियाँ होनी चाहिए। arn:aws:iam::aws:policy/SecurityAudit नीति में यह शामिल है, साथ ही IAM सेवा तक पढ़ने की पहुँच देने वाली कई अन्य नीतियों में भी यह शामिल है।
खाता प्राधिकरण विवरण डाउनलोड करने के लिए, सुनिश्चित करें कि आप AWS में प्रमाणित हैं, फिर cloudsplaining का download कमांड चलाएँ:```bash
cloudsplaining download
* यदि आप अपने `~/.aws/credentials` फ़ाइल का उपयोग वातावरण चर के बजाय करना पसंद करते हैं, तो आप प्रोफ़ाइल नाम निर्दिष्ट कर सकते हैं:```bash
cloudsplaining download --profile myprofile
यह आपकी वर्तमान निर्देशिका में एक JSON फ़ाइल डाउनलोड करेगा जिसमें आपके खाते के प्राधिकरण विवरण की जानकारी होगी।
Cloudsplaining उपकरण आपके AWS खाते में हर चीज़ के पीछे के संदर्भ को समझने का प्रयास नहीं करता है। प्रोग्रामेटिक रूप से इनमें से कुछ चीज़ों के पीछे के संदर्भ को समझना संभव है - कि नीति किसी इंस्टेंस प्रोफ़ाइल पर लागू की गई है या नहीं, क्या नीति संलग्न है, क्या इनलाइन IAM नीतियाँ उपयोग में हैं, और क्या AWS प्रबंधित नीतियाँ उपयोग में हैं या नहीं। केवल आप अपने AWS बुनियादी ढाँचे और IAM रणनीति के डिज़ाइन के पीछे के संदर्भ को जानते हैं।
इस प्रकार, संदर्भ-निर्भर गलत सकारात्मक परिणामों को समाप्त करना महत्वपूर्ण है। आप इसे एक अपवाद फ़ाइल के माध्यम से कर सकते हैं। हमने एक कमांड शामिल किया है जो आपके लिए एक अपवाद फ़ाइल टेम्पलेट तैयार करेगा ताकि आपको आवश्यक प्रारूप याद न रखना पड़े।
आप निम्नलिखित कमांड के माध्यम से एक अपवाद टेम्पलेट बना सकते हैं:```bash cloudsplaining create-exclusions-file
यह आपके वर्तमान निर्देशिका में `exclusions.yml` नामक एक फ़ाइल उत्पन्न करेगा।
अब जब आप `scan` कमांड चलाते हैं, तो आप बहिष्करण फ़ाइल का उपयोग इस प्रकार कर सकते हैं:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
बहिष्करण फ़ाइल की संरचना के बारे में अधिक जानकारी के लिए, देखें गलत सकारात्मक को फ़िल्टर करना
अब जब हमने खाता प्राधिकरण फ़ाइल डाउनलोड कर ली है, तो हम cloudsplaining के साथ सभी AWS IAM नीतियों को स्कैन कर सकते हैं।
निम्नलिखित कमांड चलाएँ:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
यह [इस](https://opensource.salesforce.com/cloudsplaining/) तरह का एक HTML रिपोर्ट बनाएगा:
> 
यह एक रॉ JSON डेटा फ़ाइल भी बनाएगा:
* `default-iam-results.json`: इसमें रिपोर्ट का रॉ JSON आउटपुट होता है। आप इस डेटा फ़ाइल का उपयोग विभिन्न उद्देश्यों के लिए स्कैन परिणामों पर काम करने के लिए कर सकते हैं। उदाहरण के लिए, आप एक Python स्क्रिप्ट लिख सकते हैं जो इस डेटा को पार्स करता है और स्वचालित JIRA मुद्दों या Salesforce कार्य आइटम को खोलता है। एक उदाहरण प्रविष्टि नीचे दिखाई गई है। पूरा उदाहरण [examples/files/iam-results-example.json](https://github.com/salesforce/cloudsplaining/blob/master/examples/files/iam-results-example.json) पर देखा जा सकता है।```json
{
"example-authz-details": [
{
"AccountID": "012345678901",
"ManagedBy": "Customer",
"PolicyName": "InsecureUserPolicy",
"Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
"ActionsCount": 2,
"ServicesCount": 1,
"Actions": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Services": [
"s3"
]
}
]
}
examples/files फ़ोल्डर में नमूना आउटपुट देखें।
संसाधन बाधाएं सर्वोत्तम अभ्यास हैं - विशेष रूप से सिस्टम भूमिकाओं/इंस्टेंस प्रोफ़ाइलों के लिए - लेकिन कभी-कभी, ये डिज़ाइन द्वारा होती हैं। उदाहरण के लिए, एक ऐसी स्थिति पर विचार करें जहां Terraform प्रावधान करने वाले EC2 इंस्टेंस के लिए इंस्टेंस प्रोफ़ाइल पर एक कस्टम IAM नीति का उपयोग किया जाता है। इस मामले में, व्यापक अनुमतियां डिज़ाइन आवश्यकताएं हैं - इसलिए हम इन्हें परिणामों में शामिल नहीं करना चाहते हैं।
आप निम्नलिखित कमांड के माध्यम से एक बहिष्करण टेम्पलेट बना सकते हैं:```bash cloudsplaining create-exclusions-file
यह आपके वर्तमान निर्देशिका में `exclusions.yml` नामक एक फ़ाइल उत्पन्न करेगा।
डिफ़ॉल्ट बहिष्करण फ़ाइल इस प्रकार दिखती है:```yaml
# Policy names to exclude from evaluation
# Suggestion: Add policies here that are known to be overly permissive by design, after you run the initial report.
policies:
- "AWSServiceRoleFor*"
- "*ServiceRolePolicy"
- "*ServiceLinkedRolePolicy"
- "AdministratorAccess" # Otherwise, this will take a long time
- "service-role*"
- "aws-service-role*"
# Don't evaluate these roles, users, or groups as part of the evaluation
roles:
- "service-role*"
- "aws-service-role*"
users:
- ""
groups:
- ""
# Read-only actions to include in the results, such as s3:GetObject
# By default, it includes Actions that could lead to Data Exfiltration
include-actions:
- "s3:GetObject"
- "ssm:GetParameter"
- "ssm:GetParameters"
- "ssm:GetParametersByPath"
- "secretsmanager:GetSecretValue"
# Write actions to include from the results, such as kms:Decrypt
exclude-actions:
- ""
policies के अंतर्गत, उन नीति नामों का पथ सूचीबद्ध करें जिन्हें आप बाहर करना चाहते हैं।MyRole शीर्षक वाली भूमिका को बाहर करना चाहते हैं, तो roles सूची में MyRole या MyR* सूचीबद्ध करें।users और groups सूची के लिए भी यही दृष्टिकोण अपना सकते हैं।अब जब आप scan कमांड चलाते हैं, तो आप बहिष्करण फ़ाइल का उपयोग इस प्रकार कर सकते हैं:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
### एकाधिक AWS खातों को स्कैन करना
यदि आपके IAM उपयोगकर्ता या IAM भूमिका के पास एक सामान्य IAM भूमिका के लिए `sts:AssumeRole` अनुमतियाँ हैं जो कई AWS खातों में उपलब्ध है, तो आप `scan-multi-account` कमांड का उपयोग कर सकते हैं।
यह आरेख दर्शाता है कि प्रक्रिया कैसे काम करती है:

> ध्यान दें: यदि आप क्रॉस-अकाउंट एक्सेस सेट करने में नए हैं, तो [AWS का आधिकारिक ट्यूटोरियल: IAM भूमिकाओं का उपयोग करके AWS खातों में पहुँच प्रत्यायोजित करना](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) देखें। इससे आप उपरोक्त आर्किटेक्चर सेट करने में सहायता प्राप्त कर सकते हैं।
* सबसे पहले, आपको मल्टी-अकाउंट कॉन्फ़िग फ़ाइल बनानी होगी। निम्नलिखित कमांड चलाएँ:```bash
cloudsplaining create-multi-account-config-file \
-o multi-account-config.yml
multi-account-config.yml कहा जाता है जिसमें निम्नलिखित सामग्री होगी:```yaml
accounts:
default_account: 123456789012
prod: 123456789013
test: 123456789014> नोट: ध्यान दें कि उपरोक्त फ़ाइल का प्रारूप `account_name: accountID` शामिल करता है। अपने इच्छित खाता नाम और खाता आईडी से मेल खाने के लिए फ़ाइल सामग्री संपादित करें। जितने चाहें उतने खाता आईडी शामिल करें।
अगले चरण के लिए, मान लें कि:
* लक्ष्य खातों में एक भूमिका है जिसे `CommonSecurityRole` कहा जाता है।
* आपके IAM उपयोगकर्ता के लिए क्रेडेंशियल्स `scanning-user` नामक AWS क्रेडेंशियल्स प्रोफ़ाइल के अंतर्गत हैं।
* उस उपयोगकर्ता के पास पहले बनाई गई YAML फ़ाइल में निर्दिष्ट सभी लक्ष्य खातों में `CommonSecurityRole` को ग्रहण करने की `sts:AssumeRole` अनुमति है।
* आप आउटपुट को `my-results-bucket` नामक S3 बकेट में सहेजना चाहते हैं।
उपरोक्त डेटा का उपयोग करके, आप निम्नलिखित कमांड चला सकते हैं:```bash
cloudsplaining scan-multi-account \
-c multi-account-config.yml \
--profile scanning-user \
--role-name CommonSecurityRole \
--output-bucket my-results-bucket
ध्यान दें कि यदि आप उपरोक्त
--profileफ़्लैग के बिना चलाते हैं, तो यह मानक AWS क्रेडेंशियल्स प्राथमिकता क्रम (अर्थात, पर्यावरण चर, क्रेडेंशियल प्रोफ़ाइल, ECS कंटेनर क्रेडेंशियल, और अंत में EC2 इंस्टेंस प्रोफ़ाइल क्रेडेंशियल) में निष्पादित होगा।
Cloudsplaining HTML रिपोर्ट के मार्गदर्शन और परिशिष्ट अनुभागों को संगठन-विशिष्ट सुरक्षा अनुशंसाओं और दस्तावेज़ीकरण को शामिल करने के लिए अनुकूलित करने का समर्थन करता है।
अपने प्रोजेक्ट रूट निर्देशिका में HTML फ़ाइलें रखें:
custom-guidance.html - कस्टम सुरक्षा मार्गदर्शन सामग्रीcustom-appendices.html - कस्टम परिशिष्ट सामग्रीecho '
Follow these organization-specific steps:
echo '
Additional company resources:
cloudsplaining download
cloudsplaining download --profile someprofile
cloudsplaining scan --input-file default.json
cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml
cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml
cloudsplaining create-multi-account-config-file -o accounts.yml cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./
## FAQ
**क्या यह डिफ़ॉल्ट रूप से सभी नीतियों को स्कैन करेगा?**
नहीं, यह केवल उन नीतियों को स्कैन करेगा जो IAM प्रिंसिपलों से संलग्न हैं।
**क्या डाउनलोड कमांड सभी नीति संस्करणों को डाउनलोड करेगा?**
डिफ़ॉल्ट रूप से नहीं। यदि आप ऐसा करना चाहते हैं, तो `--include-non-default-policy-versions` फ़्लैग निर्दिष्ट करें। ध्यान दें कि `scan` उपकरण वर्तमान में गैर-डिफ़ॉल्ट संस्करणों पर काम नहीं करता है।
**मैंने इंस्टॉलेशन निर्देशों का पालन किया लेकिन कमांड लाइन के माध्यम से प्रोग्राम को बिल्कुल भी निष्पादित नहीं कर सकता। मुझे क्या करना चाहिए?**
यह संभवतः आपके PATH से संबंधित समस्या है। आपका PATH एनवायरनमेंट वेरिएबल `pip3` द्वारा स्थापित बाइनरी पैकेजों पर विचार नहीं कर रहा है। Mac पर, आप नीचे दिए गए कमांड को दर्ज करके इसे ठीक कर सकते हैं, यह आपके स्थापित संस्करणों पर निर्भर करता है। YMMV।```bash
export PATH=$HOME/Library/Python/3.7/bin/:$PATH
मैंने इंस्टॉलेशन निर्देशों का पालन किया, लेकिन मुझे एक ModuleNotFoundError प्राप्त हो रही है जो कहती है No module named policy_sentry.analysis.expand। मुझे क्या करना चाहिए?
Cloudsplaining के नवीनतम संस्करण में अपग्रेड करने का प्रयास करें। यह त्रुटि संस्करण 0.0.10 में ठीक कर दी गई थी।