
نص برمجي صغير لـ Lambda يعطل مفاتيح الوصول الأقدم من عدد معين من الأيام.

أداة تعطيل مفاتيح AWS هي دالة Lambda تقوم بتعطيل مفاتيح الوصول لمستخدمي IAM في AWS بعد فترة زمنية محددة بهدف تقليل المخاطر المرتبطة بالمفاتيح القديمة.



report_to في ملف تكوين البناء /grunt/package.json.يتطلب تشغيل هذا البرنامج النصي المكونات التالية:
كما يفترض أن لديك حساب AWS مع تمكين SES، أي تم التحقق من النطاق وإزالة وضع الحماية (sandbox).
هذه التعليمات مخصصة لنظام OSX. قد تختلف النتائج على Windows وأنظمة *nix الأخرى.
/gruntnpm install/grunt/package.json
aws_account_number إلى معرف حساب AWS الخاص بك الموجود على https://portal.aws.amazon.com/gp/aws/manageYourAccountfirst_warning و last_warning إلى عمر المفتاح بالأيام لتشغيل تحذير. هذه الحدود ترسل بريدًا إلكترونيًا إلى report_toexpiry إلى العمر بالأيام عندما ينتهي المفتاح. في هذا العمر يتم تعطيل المفتاح ويتم إرسال بريد إلكتروني إلى report_to يخطر بهذا التغييرserviceaccount إلى اسم حساب المستخدم الذي تريد أن يتجاهله البرنامج النصيexclusiongroup إلى اسم مجموعة مخصصة للمستخدمين الذين تريد أن يتجاهلهم البرنامج النصيقم بتنفيذ دالة Lambda بالاسم AccessKeyRotation، مع تسجيل مخرجات الفحص في ملف يسمى scan.report.log:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
استخدم jq لعرض محتويات scan.report.log في وحدة التحكم:
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>.messagekey_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 لتمكين تسليم البريد الإلكتروني عبر SESreport_to إلى عنوان البريد الإلكتروني الذي ترغب في تلقي تقارير الحذف إليهreport_from إلى عنوان البريد الإلكتروني الذي ترغب في استخدامه كعنوان مرسل لتقارير الحذف. لاحظ أن النطاق الخاص بهذا العنوان يجب أن يكون موثقًا في AWS SES.deployment_region إلى منطقة تدعم Lambda.email_region إلى المنطقة التي تدعم SES. تأكد أيضًا من أن المنطقة لديها وضع الحماية (sandbox) في SES معطل.
aws iam get-user للتحقق من الاتصال الناجح/grunt قم بتشغيل grunt bumpup && grunt deployLambda لزيادة رقم الإصدار وإجراء بناء/نشر لدالة Lambda إلى المنطقة المحددة