
Outil de collecte d'inventaire AWS multi-threadé axé sur les ressources et métadonnées pertinentes pour la sécurité.
Un outil de collecte d'inventaire AWS orienté sécurité, multi-threadé, écrit en Ruby.
Cet outil a été créé pour faciliter la collecte efficace d'un grand nombre d'attributs et de métadonnées de ressources AWS. Il vise à collecter presque tout ce qui est pertinent pour la configuration de sécurité et la posture d'un environnement AWS.
Les outils existants (par exemple AWS Config) qui effectuent une forme de collecte de ressources manquent de couverture et de spécificité pour mesurer précisément la posture de sécurité (par exemple, données d'attributs de ressources détaillées, documents de politique entièrement analysés et relations de ressources imbriquées).
AWS Recon gère la collecte à partir de grands comptes en profitant des tentatives automatiques (que ce soit en raison de la fiabilité du réseau ou du limitation de l'API), de la pagination automatique des grandes réponses (> 100 ressources par appel API), et de requêtes multi-threadées parallèles pour accélérer la collecte.
** l'utilisation n'implique pas un aval
AWS Recon a besoin d'un rôle ou d'identifiants de compte AWS avec ReadOnlyAccess. Un accès AdministratorAccess complet est trop privilégié, mais fonctionnera aussi. La politique SecurityAudit n'est pas suffisante car elle omet l'accès à de nombreux services.
Utilisez Docker version 19.x ou supérieure pour exécuter l'image pré-construite sans avoir à installer quoi que ce soit.
Si vous avez déjà Ruby installé (2.6.x ou 2.7.x), vous pouvez installer la gem Ruby.
AWS Recon peut être exécuté localement via un conteneur Docker ou en installant la gem Ruby.
Pour exécuter via un conteneur Docker, passez les identifiants AWS nécessaires dans la commande docker run. Par exemple :
$ docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -v -s EC2 -r global,us-east-1,us-east-2
Pour exécuter localement, installez d'abord la gem :
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17
Ou ajoutez-la à votre Gemfile en utilisant bundle :
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17
AWS Recon exploitera tous les identifiants AWS (voir prérequis) actuellement disponibles dans l'environnement où il s'exécute. Si vous collectez à partir de plusieurs comptes, vous pouvez utiliser un outil comme aws-vault pour gérer différents identifiants.
$ aws-vault exec profile -- aws_recon
Les variables d'environnement simples fonctionneront aussi bien.
$ AWS_PROFILE=<profil> aws_recon
Pour exécuter à partir d'un conteneur Docker en utilisant des identifiants gérés par aws-vault (sortie vers stdout) :
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
darkbitio/aws_recon:latest \
aws_recon -j -s EC2 -r global,us-east-1,us-east-2
Pour exécuter à partir d'un conteneur Docker en utilisant des identifiants gérés par aws-vault et sortie vers un fichier, vous devez satisfaire quelques conditions. Tout d'abord, Docker doit avoir accès au montage bind du chemin que vous spécifiez (ou d'un chemin parent). Deuxièmement, vous devez créer un fichier vide pour enregistrer la sortie (par exemple output.json). En effet, seul ce fichier est monté dans le conteneur Docker au moment de l'exécution. Par exemple :
Créez un fichier vide.
$ touch output.json
Exécutez le conteneur aws_recon, en spécifiant le fichier de sortie.
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -s EC2 -v -r global,us-east-1,us-east-2
Vous pouvez utiliser le flag -v ou --verbose au début pour voir l'état et l'activité pendant l'exécution de la collecte.
En mode verbeux, la sortie console affichera :
<thread>.<region>.<service>.<operation>
Le préfixe t indique sous quel thread une requête particulière est exécutée. Region, service et operation indiquent quelle opération de requête est actuellement en cours et où.
$ aws_recon -v
t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances
Finished in 46 seconds. Saving resources to output.json.
# collecter les ressources globales S3 et EC2, ainsi que us-east-1 et us-east-2
$ AWS_PROFILE=<profil> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# collecter les ressources globales S3 et EC2, ainsi que us-east-1 et us-east-2
$ AWS_PROFILE=<profil> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# enregistrer la sortie dans un bucket S3