
Un petit script lambda qui désactivera les clés d'accès plus anciennes qu'un nombre donné de jours.

Le désactiveur de clés AWS est une fonction Lambda qui désactive les clés d'accès des utilisateurs IAM AWS après un certain temps afin de réduire les risques associés aux anciennes clés d'accès.



report_to dans le fichier de configuration de construction /grunt/package.json.Ce script nécessite les composants suivants pour fonctionner.
Il suppose également que vous possédez un compte AWS avec SES activé, c'est-à-dire un domaine vérifié et le mode sandbox supprimé.
Ces instructions sont pour OSX. Les résultats peuvent varier sur Windows et autres *nix.
/gruntnpm install/grunt/package.json
aws_account_number sur votre identifiant de compte AWS trouvé sur https://portal.aws.amazon.com/gp/aws/manageYourAccountfirst_warning et last_warning à l'âge en jours de la clé pour déclencher un avertissement. Ces limites déclenchent un envoi d'email à report_toexpiry à l'âge en jours auquel la clé expire. À cet âge, la clé est désactivée et un email est envoyé à report_to pour notifier ce changementserviceaccount sur le nom d'utilisateur du compte que vous voulez que le script ignoreexclusiongroup sur le nom d'un groupe attribué aux utilisateurs que vous voulez que le script ignore.Exécutez la fonction lambda par son nom, AccessKeyRotation, en enregistrant la sortie du scan dans un fichier nommé scan.report.log :
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
Utilisez jq pour afficher le contenu du fichier scan.report.log dans la console :
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. Les clés d'accès font 20 caractères de long.Ce script est fourni tel quel. Nous sommes heureux de répondre aux questions dans la mesure du temps disponible, mais nous ne pouvons donner aucune garantie.
Si les choses ne fonctionnent pas, assurez-vous que :
Une fois la fonction Lambda déployée avec succès, les commandes suivantes peuvent être exécutées :
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 sur True pour activer la livraison d'email via SESreport_to sur l'adresse email à laquelle vous souhaitez recevoir les rapports de suppressionreport_from sur l'adresse email que vous souhaitez utiliser comme adresse d'expéditeur pour les rapports de suppression. Notez que le domaine de celle-ci doit être vérifié dans AWS SES.deployment_region sur une région qui prend en charge Lambda.email_region sur la région qui prend en charge SES. Assurez-vous également que la région a le mode sandbox SES désactivé.
aws iam get-user pour vérifier la connexion/grunt, exécutez grunt bumpup && grunt deployLambda pour incrémenter votre numéro de version et effectuer une construction/déploiement de la fonction Lambda vers la région sélectionnée