
Herramienta de recolección de inventario de AWS multi-hilo con enfoque en recursos y metadatos relevantes para la seguridad.
Una herramienta de recolección de inventario de AWS orientada a la seguridad y con múltiples hilos, escrita en Ruby.
Esta herramienta se creó para facilitar la recolección eficiente de una gran cantidad de atributos y metadatos de recursos de AWS. Su objetivo es recopilar casi todo lo relevante para la configuración de seguridad y la postura de un entorno AWS.
Las herramientas existentes (por ejemplo, AWS Config) que realizan algún tipo de recolección de recursos carecen de la cobertura y especificidad necesarias para medir con precisión la postura de seguridad (p. ej., datos detallados de atributos de recursos, documentos de política completamente analizados y relaciones anidadas entre recursos).
AWS Recon maneja la recolección de cuentas grandes aprovechando reintentos automáticos (ya sea por confiabilidad de red o limitación de API), paginación automática de respuestas grandes (> 100 recursos por llamada API) y solicitudes paralelas con múltiples hilos para acelerar la recolección.
** el uso no implica respaldo
AWS Recon necesita un rol de cuenta AWS o credenciales con ReadOnlyAccess. El acceso completo de AdministratorAccess es demasiado privilegiado, pero también funcionará. La política SecurityAudit no es suficiente, ya que omite el acceso a muchos servicios.
Use la versión 19.x o superior de Docker para ejecutar la imagen preconstruida sin necesidad de instalar nada.
Si ya tiene Ruby instalado (2.6.x o 2.7.x), es posible que desee instalar la gema de Ruby.
AWS Recon se puede ejecutar localmente a través de un contenedor Docker o instalando la gema de Ruby.
Para ejecutarlo mediante un contenedor Docker, pase las credenciales AWS necesarias al comando run de Docker. Por ejemplo:
$ 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
Para ejecutarlo localmente, primero instale la gema:
$ 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
O agréguela a su Gemfile usando 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 aprovechará cualquier credencial AWS (consulte requisitos) disponible actualmente en el entorno donde se ejecuta. Si está recolectando de varias cuentas, es posible que desee usar algo como aws-vault para gestionar diferentes credenciales.
$ aws-vault exec profile -- aws_recon
Las variables de entorno simples también funcionarán bien.
$ AWS_PROFILE=<profile> aws_recon
Para ejecutar desde un contenedor Docker usando credenciales gestionadas por aws-vault (salida a 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
Para ejecutar desde un contenedor Docker usando credenciales gestionadas por aws-vault y salida a un archivo, deberá cumplir con un par de requisitos. Primero, Docker necesita acceso para montar en enlace la ruta que especifique (o una ruta superior). Segundo, debe crear un archivo vacío para guardar la salida (por ejemplo, output.json). Esto se debe a que solo ese archivo se monta en el contenedor Docker en tiempo de ejecución. Por ejemplo:
Cree un archivo vacío.
$ touch output.json
Ejecute el contenedor aws_recon, especificando el archivo de salida.
$ 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
Es posible que desee usar la bandera -v o --verbose inicialmente para ver el estado y la actividad mientras se ejecuta la recolección.
En modo verbose, la salida de la consola mostrará:
<thread>.<region>.<service>.<operation>
El prefijo t indica qué hilo está ejecutando una solicitud en particular. Región, servicio y operación indican qué operación de solicitud está actualmente en curso y dónde.
$ 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
Finalizado en 46 segundos. Guardando recursos en output.json.
# recolectar recursos globales de S3 y EC2, así como us-east-1 y us-east-2
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# recolectar recursos globales de S3 y EC2, así como us-east-1 y us-east-2
$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# guardar salida en un bucket S3