Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
aws-key-disabler — Un petit script lambda qui désactivera les clés d'accès plus anciennes qu'un nombre donné de jours. | Kitploit
Outils/GitHubGitHub/te-papa/aws-key-disabler
Audit de ConfigurationSécurité CloudGestion des Identités et des Accès (IAM)
GitHubte-papa/aws-key-disabler

aws-key-disabler

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

Voir le dépôt
15336il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

AWS Lambda - Désactiveur de clés d'accès IAM

Image of KeyIcon

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.

Architecture AWS Lambda

Image of Arch

Sortie SysOps pour l'utilisateur final

Image of iPhoneEmail

Chaîne d'outils développeur

Image of Toolchain

Limitations actuelles

  • Un rapport contenant la sortie (json) du scan sera envoyé à un seul compte sysadmin défini, reportez-vous à l'attribut report_to dans le fichier de configuration de construction /grunt/package.json.
  • Les clés sont seulement désactivées, ni supprimées ni remplacées.

Prérequis

Ce script nécessite les composants suivants pour fonctionner.

  • Node.js avec NPM installé https://nodejs.org/en/
  • Gruntjs installé http://gruntjs.com/
  • Outil en ligne de commande AWSCLI installé https://aws.amazon.com/cli/

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é.

Instructions d'installation

Ces instructions sont pour OSX. Les résultats peuvent varier sur Windows et autres *nix.

  1. Procurez-vous une copie de ce script
  2. Accédez au dossier /grunt
  3. Configurez le moteur de tâches Grunt, par exemple installez ses dépendances : npm install
  4. Remplissez les informations suivantes dans /grunt/package.json
    1. Définissez la valeur aws_account_number sur votre identifiant de compte AWS trouvé sur https://portal.aws.amazon.com/gp/aws/manageYourAccount
    2. Définissez first_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_to
    3. Définissez expiry à 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 changement
    4. Définissez serviceaccount sur le nom d'utilisateur du compte que vous voulez que le script ignore
    5. Définissez exclusiongroup sur le nom d'un groupe attribué aux utilisateurs que vous voulez que le script ignore.

Invoquer manuellement la fonction Lambda depuis la ligne de commande avec AWSCLI

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

root@kitploit:~
{
    "StatusCode": 200
}

Utilisez jq pour afficher le contenu du fichier scan.report.log dans la console :

jq '.' scan.report.log

root@kitploit:~
{
  "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"
        }
      ]
    }
  ]
}

Option de configuration supplémentaire

  • Vous pouvez choisir de définir le message utilisé pour chaque avertissement et pour la désactivation finale en modifiant les valeurs sous key_disabler.keystates.<state>.message
  • Vous pouvez modifier la longueur du masquage sous key_disabler.mask_accesskey_length. Les clés d'accès font 20 caractères de long.

Dépannage

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 :

  • Vous pouvez vous authentifier avec succès auprès d'AWS en utilisant l'outil en ligne de commande AWSCLI
  • SES n'est pas en mode sandbox et le domaine de l'expéditeur a été vérifié
  • La région sélectionnée propose à la fois Lambda et SES https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/

Points bonus

Une fois la fonction Lambda déployée avec succès, les commandes suivantes peuvent être exécutées :

  1. aws lambda list-functions
  2. openssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64
  3. aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1
  4. jq '.' report.log
  5. jq '.users[] | select(.username=="johndoe")' report.log
  6. jq '.' report.log | grep age | cut -d':' -f2 | sort -n

Points bonus bonus

  1. jq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.log
  2. jq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.log
Télécharger l’outil
  • Définissez la valeur send_completion_report sur True pour activer la livraison d'email via SES
  • Définissez la valeur report_to sur l'adresse email à laquelle vous souhaitez recevoir les rapports de suppression
  • Définissez la valeur report_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.
  • Définissez deployment_region sur une région qui prend en charge Lambda.
  • Définissez 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é.
    • Consultez le tableau des régions AWS pour voir la prise en charge https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
  • Assurez-vous de pouvoir vous connecter avec succès à AWS depuis la CLI, par exemple exécutez aws iam get-user pour vérifier la connexion
  • depuis le répertoire /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