
Ein kleines Lambda-Skript, das Zugriffsschlüssel deaktiviert, die älter als eine bestimmte Anzahl von Tagen sind.

Der AWS-Key-Deaktivierer ist eine Lambda-Funktion, die AWS-IAM-Benutzerzugriffsschlüssel nach einer festgelegten Zeit deaktiviert, um das Risiko alter Zugriffsschlüssel zu verringern.



report_to in der Build-Konfigurationsdatei /grunt/package.json.Dieses Skript erfordert die folgenden Komponenten zum Ausführen.
Es wird außerdem vorausgesetzt, dass Sie ein AWS-Konto mit aktiviertem SES haben, d. h. Domain verifiziert und Sandbox-Modus entfernt.
Diese Anleitung ist für OSX. Unter Windows und anderen *nix-Systemen können die Ergebnisse abweichen.
/grunt.npm install/grunt/package.json aus.
aws_account_number auf Ihre AWS-Konto-ID, die Sie unter https://portal.aws.amazon.com/gp/aws/manageYourAccount finden.first_warning und last_warning auf das Alter in Tagen, das der Schlüssel haben muss, um eine Warnung auszulösen. Diese Grenzwerte lösen das Senden einer E-Mail an report_to aus.expiry auf das Alter in Tagen, bei dem der Schlüssel abläuft. Bei diesem Alter wird der Schlüssel deaktiviert und eine E-Mail an report_to gesendet, die über diese Änderung informiert.serviceaccount auf den Kontobenutzernamen, den das Skript ignorieren soll.exclusiongroup auf den Namen einer Gruppe, die Benutzern zugewiesen ist, die das Skript ignorieren soll.Führen Sie die Lambda-Funktion mit dem Namen AccessKeyRotation aus und protokollieren Sie die Ausgabe des Scans in einer Datei namens scan.report.log:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
Verwenden Sie jq, um den Inhalt von scan.report.log in der Konsole anzuzeigen:
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 ändern.key_disabler.mask_accesskey_length ändern. Die Zugriffsschlüssel haben eine Länge von 20 Zeichen.Dieses Skript wird wie besehen bereitgestellt. Wir beantworten gerne Fragen, sofern es die Zeit erlaubt, können jedoch keine Versprechungen machen.
Wenn etwas nicht funktioniert, stellen Sie sicher, dass:
Sobald die Lambda-Funktion erfolgreich bereitgestellt wurde, können die folgenden Befehle ausgeführt werden:
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 auf True, um die E-Mail-Zustellung über SES zu aktivieren.report_to auf die E-Mail-Adresse, an die Sie Löschberichte erhalten möchten.report_from auf die E-Mail-Adresse, die Sie als Absenderadresse für Löschberichte verwenden möchten. Beachten Sie, dass die Domain dafür in AWS SES verifiziert sein muss.deployment_region auf eine Region, die Lambda unterstützt.email_region auf die Region, die SES unterstützt. Stellen Sie außerdem sicher, dass in der Region der SES-Sandbox-Modus deaktiviert ist.
aws iam get-user aus, um die erfolgreiche Verbindung zu überprüfen./grunt-Verzeichnis aus grunt bumpup && grunt deployLambda aus, um Ihre Versionsnummer zu erhöhen und einen Build/Deploy der Lambda-Funktion in die ausgewählte Region durchzuführen.