百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
A

aws-recon

> 安全
开源

多线程的 AWS 库存采集工具,重点关注与安全相关的资源和元数据。

558 stars0 点赞2 次浏览
访问官网GitHub

工具介绍

多线程的 AWS 库存采集工具,重点关注与安全相关的资源和元数据。

AWS Recon

A multi-threaded AWS security-focused inventory collection tool written in Ruby.

This tool was created to facilitate efficient collection of a large amount of AWS resource attributes and metadata. It aims to collect nearly everything that is relevant to the security configuration and posture of an AWS environment.

Existing tools (e.g. AWS Config) that do some form of resource collection lack the coverage and specificity to accurately measure security posture (e.g. detailed resource attribute data, fully parsed policy documents, and nested resource relationships).

AWS Recon handles collection from large accounts by taking advantage of automatic retries (either due to network reliability or API throttling), automatic paging of large responses (> 100 resources per API call), and multi-threading parallel requests to speed up collection.

Project Goals

  • More complete resource coverage than available tools (especially for ECS & EKS)
  • More granular resource detail, including nested related resources in the output
  • Flexible output (console, JSON lines, plain JSON, file, S3 bucket, and standard out)
  • Efficient (multi-threaded, rate limited, automatic retries, and automatic result paging)
  • Easy to maintain and extend

Awesome companies using AWS Recon**

  • Netflix
  • HashiCorp
  • Workday
  • Stripe
  • PayPal
  • Typeform
  • Amazon Web Services
  • Plaid
  • Expel
  • Mozilla
  • Bugcrowd
  • Dropbox
  • Pinterest
  • HackerOne
  • MuleSoft
  • Slack
  • Drata
  • Google
  • Sophos
  • Sumo Logic
  • Coalfile
  • Xero

** usage does not imply endorsement

Setup

Requirements

AWS Recon needs an AWS account role or credentials with ReadOnlyAccess. Full AdministratorAccess is over-privileged, but will work as well. The SecurityAudit policy is not sufficient as it omits access to many services.

Running via Docker

Use Docker version 19.x or above to run the pre-built image without having to install anything.

Running locally via Ruby

If you already have Ruby installed (2.6.x or 2.7.x), you may want to install the Ruby gem.

Installation

AWS Recon can be run locally via a Docker container or by installing the Ruby gem.

To run via a Docker a container, pass the necessary AWS credentials into the Docker run command. For example:

$ 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

To run locally, first install the 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

Or add it to your Gemfile using 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

Usage

AWS Recon will leverage any AWS credentials (see requirements) currently available to the environment it runs in. If you are collecting from multiple accounts, you may want to leverage something like aws-vault to manage different credentials.

$ aws-vault exec profile -- aws_recon

Plain environment variables will work fine too.

$ AWS_PROFILE= aws_recon

To run from a Docker container using aws-vault managed credentials (output to stdout):

$ aws-vault exec  -- 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

To run from a Docker container using aws-vault managed credentials and output to a file, you will need to satisfy a couple of requirements. First, Docker needs access to bind mount the path you specify (or a parent path above). Second, you need to create an empty file to save the output into (e.g. output.json). This is because only that one file is mounted into the Docker container at run time. For example:

Create an empty file.

$ touch output.json

Run the aws_recon container, specifying the output file.

$ aws-vault exec  -- 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

You may want to use the -v or --verbose flag initially to see status and activity while collection is running.

In verbose mode, the console output will show:

...

The t prefix indicates which thread a particular request is running under. Region, service, and operation indicate which request operation is currently in progress and where.

…

Example command line options

# collect S3 and EC2 global resources, as well as us-east-1 and us-east-2

$ AWS_PROFILE= aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# collect S3 and EC2 global resources, as well as us-east-1 and us-east-2

$ AWS_PROFILE= aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# save output to S3 bucket

$ AWS_PROFILE= aws_recon \
  --services S3,EC2 \
  --regions global,us-east-1,us-east-2 \
  --verbose \
  --s3-bucket my-recon-bucket
# save output to S3 bucket with a home region other than us-east-1

$ AWS_PROFILE= aws_recon \
  --services S3,EC2 \
  --regions global,us-east-1,us-east-2 \
  --verbose \
  --s3-bucket my-recon-bucket:us-west-2

Example OpenCSPM formatted (NDJSON) output.

$ AWS_PROFILE= aws_recon -l \
  -s S3,EC2 \
  -r global,us-east-1,us-east-2 \
  -f custom

or

$ AWS_PROFILE= aws_recon -j \
  -s S3,EC2 \
  -r global,us-east-1,us-east-2 \
  -f custom > output.json

Errors

API exceptions related to permissions are silently ignored in most cases. These errors are usually due to one of these cases:

  • using a role without sufficient permissions
  • querying an account with SCPs in place that prevent usage of certain services
  • trying to query a service that isn't enabled/available in your region/account

In verbose mode, you will see exception logs in the output:

…

$ git clone [email protected]:darkbitio/aws-recon.git $ cd aws-recon


Create a sticky gemset if using RVM:

$ rvm use 2.7.2@aws_recon_dev --create --ruby-version


Run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

### TODO

- [ ] Test coverage with AWS SDK stubbed resources

## Kudos

AWS Recon was inspired by the excellent work of the people and teams behind these tools:

- CloudMapper [https://github.com/duo-labs/cloudmapper](https://github.com/duo-labs/cloudmapper)
- Prowler [https://github.com/toniblyx/prowler](https://github.com/toniblyx/prowler)
- CloudSploit [https://github.com/cloudsploit/scans](https://github.com/cloudsploit/scans)

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Rubyawsclicollectioninventory

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类安全
定价开源

> 相关工具

O
OWASP ZAP
开源 Web 应用安全扫描器
O
owasp-wstg-tracker
Simple web app to track OWASP WSTG security testing progress
H
homebridge-mi-gateway-security
XiaoMi Gateway Security plugin for HomeBridge.