
एक छोटा lambda स्क्रिप्ट जो दिए गए दिनों की संख्या से अधिक पुरानी एक्सेस कुंजियों को अक्षम करता है।

AWS कुंजी अक्षमकर्ता एक Lambda फ़ंक्शन है जो पुरानी एक्सेस कुंजियों से जुड़े जोखिम को कम करने के लिए एक निर्धारित समय के बाद AWS IAM उपयोगकर्ता एक्सेस कुंजियों को अक्षम करता है।



/grunt/package.json बिल्ड कॉन्फ़िगरेशन फ़ाइल में report_to विशेषता देखें।इस स्क्रिप्ट को चलाने के लिए निम्नलिखित घटकों की आवश्यकता है।
यह यह भी मानता है कि आपके पास AWS खाता है जिसमें SES सक्षम है, अर्थात डोमेन सत्यापित है और सैंडबॉक्स मोड हटा दिया गया है।
ये निर्देश OSX के लिए हैं। Windows और अन्य *nix पर आपका अनुभव भिन्न हो सकता है।
/grunt फ़ोल्डर में जाएँnpm install/grunt/package.json में निम्नलिखित जानकारी भरें
aws_account_number मान को अपने AWS खाता आईडी पर सेट करें जो https://portal.aws.amazon.com/gp/aws/manageYourAccount पर मिलता हैfirst_warning और last_warning को उस आयु (दिनों में) पर सेट करें जिस पर कुंजी को चेतावनी ट्रिगर करनी होती है। ये सीमाएँ report_to को एक ईमेल भेजने को ट्रिगर करती हैंexpiry को उस आयु (दिनों में) पर सेट करें जब कुंजी समाप्त होती है। इस आयु पर कुंजी अक्षम कर दी जाती है और report_to को इस परिवर्तन की सूचना देने वाला एक ईमेल ट्रिगर किया जाता हैserviceaccount को उस खाता उपयोगकर्ता नाम पर सेट करें जिसे स्क्रिप्ट अनदेखा करना चाहती हैexclusiongroup को उस समूह के नाम पर सेट करें जो उन उपयोगकर्ताओं को सौंपा गया है जिन्हें स्क्रिप्ट अनदेखा करना चाहती है।Lambda फ़ंक्शन को नाम से निष्पादित करें, AccessKeyRotation, स्कैन के आउटपुट को scan.report.log नामक फ़ाइल में लॉग करें:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
scan.report.log की सामग्री को कंसोल पर प्रस्तुत करने के लिए jq का उपयोग करें:
jq '.' scan.report.log
{
"reportdate": "2016-06-26 10:37:24.071091",
"users": [
{
"username": "TestS3User",
"userid": "1",
"keys": [
{
"age": 72,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************Q3GA1"
},
{
"age": 12,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************F3AA2"
}
]
},
{
"username": "BlahUser22",
"userid": "2",
"keys": []
},
{
"username": "LambdaFake1",
"userid": "3",
"keys": [
{
"age": 23,
"changed": false,
"state": "key is due to expire in 1 week (7 days)",
"accesskeyid": "**************DFG12"
},
{
"age": 296,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************4ZASD"
}
]
},
{
"username": "apiuser49",
"userid": "4",
"keys": [
{
"age": 30,
"changed": true,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************ER2E2"
},
{
"age": 107,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************AWQ4K"
}
]
},
{
"username": "UserEMRKinesis",
"userid": "5",
"keys": [
{
"age": 30,
"changed": false,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************MGB41A"
}
]
},
{
"username": "CDN-Drupal",
"userid": "6",
"keys": [
{
"age": 10,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************ZDSQ5A"
},
{
"age": 5,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************E3ODA"
}
]
},
{
"username": "ChocDonutUser1",
"userid": "7",
"keys": [
{
"age": 59,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************CSA123"
}
]
},
{
"username": "ChocDonut2",
"userid": "8",
"keys": [
{
"age": 60,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************FDGD2"
}
]
},
{
"username": "[email protected]",
"userid": "9",
"keys": [
{
"age": 45,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************BLQ5GJ"
},
{
"age": 71,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************GJFF53"
}
]
}
]
}
key_disabler.keystates.<state>.message के अंतर्गत मान बदलकर सेट कर सकते हैंkey_disabler.mask_accesskey_length के अंतर्गत मास्किंग की लंबाई बदल सकते हैं। एक्सेस कुंजियाँ 20 वर्ण लंबी होती हैं।यह स्क्रिप्ट जैसी है वैसी प्रदान की गई है। हम समय मिलने पर प्रश्नों का उत्तर देने में प्रसन्न हैं, लेकिन कोई वादा नहीं कर सकते।
यदि चीजें काम नहीं करती हैं, तो सुनिश्चित करें कि:
एक बार Lambda फ़ंक्शन सफलतापूर्वक तैनात हो जाने के बाद - निम्नलिखित कमांड निष्पादित किए जा सकते हैं:
aws lambda list-functionsopenssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1jq '.' report.logjq '.users[] | select(.username=="johndoe")' report.logjq '.' report.log | grep age | cut -d':' -f2 | sort -njq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.logjq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.logsend_completion_report मान को True पर सेट करें ताकि SES के माध्यम से ईमेल वितरण सक्षम होreport_to मान को उस ईमेल पते पर सेट करें जिस पर आप विलोपन रिपोर्ट प्राप्त करना चाहते हैंreport_from मान को उस ईमेल पते पर सेट करें जिसे आप विलोपन रिपोर्ट के लिए प्रेषक पते के रूप में उपयोग करना चाहते हैं। ध्यान दें कि इसके लिए डोमेन को AWS SES में सत्यापित करने की आवश्यकता है।deployment_region को एक ऐसे क्षेत्र पर सेट करें जो Lambda का समर्थन करता है।
10 email_region को उस क्षेत्र पर सेट करें जो SES का समर्थन करता है। यह भी सुनिश्चित करें कि क्षेत्र में SES सैंडबॉक्स मोड अक्षम है।
aws iam get-user चलाएँ/grunt निर्देशिका से grunt bumpup && grunt deployLambda चलाएँ ताकि आपका संस्करण संख्या बढ़े और चयनित क्षेत्र में Lambda फ़ंक्शन का बिल्ड/डिप्लॉय करें