aws_recon 0.2.9 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 748e27233aa80e92e6f74f5685c9620315a649cc425c96186d234650b7c56242
4
- data.tar.gz: ebb4fd703ffa348040d6659b9095c5a8c5ac49e60707f08958a84f43fa46440c
3
+ metadata.gz: 9a778dc405cb41606bd79f7f49fb40f71ac1ad403084a3708bd7910ae60904c1
4
+ data.tar.gz: d719d81f1b14c208f3b182054408ffc4cd1b6a808806fae15e33ee2dfb569b9e
5
5
  SHA512:
6
- metadata.gz: 8bf432c66917846ca2982d566b570d8b1930dff31168847732132ca033c679c9595b2c0729e6d48da13814ef84e76ec4809af288ebb6097e27183b224d8cf30e
7
- data.tar.gz: cd2694d0a363bf37ad38e0ec1c3d0f1dfd9488e85541169ba2cf3c56a078ce9088406e4f58d8dee2b3b87240969532d8dfaf87fa666413cf2c55da69eeeaea9d
6
+ metadata.gz: 52809bcee06bcf81182ce52ac4e8acfcef5a77cb21ec2fd1c82b2fbfd16b704b63f1381c1fb43fb116e94711a541e39286a635e736faf2d1a34ff71c3ae65984
7
+ data.tar.gz: 14781d182dae5b639863a1b2ec388358a04e86d8bc4680faa30494057d6941f3b8fe821021dfdc2f88100db49bd5ad634885bed670920e1498e8d7d0f9567b5c
@@ -0,0 +1,38 @@
1
+ name: docker-build
2
+
3
+ on:
4
+ push:
5
+ branches: build
6
+ paths:
7
+ - 'lib/aws_recon/version.rb'
8
+
9
+ jobs:
10
+ docker-build:
11
+ runs-on: ubuntu-20.04
12
+ steps:
13
+ - name: Checkout
14
+ uses: actions/checkout@v2
15
+ with:
16
+ fetch-depth: 1
17
+ - name: Set up QEMU
18
+ uses: docker/setup-qemu-action@v1
19
+ - name: Set up Docker Buildx
20
+ uses: docker/setup-buildx-action@v1
21
+ - name: Login to DockerHub
22
+ uses: docker/login-action@v1
23
+ with:
24
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
25
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
26
+ - name: Set version tag
27
+ run: |
28
+ echo "VERSION_TAG=$(grep VERSION lib/aws_recon/version.rb | awk -F\" '{print $2}')" >> $GITHUB_ENV
29
+ - name: Build and push
30
+ id: docker_build
31
+ uses: docker/build-push-action@v2
32
+ with:
33
+ push: true
34
+ build-args: |
35
+ VERSION=${{ env.VERSION_TAG }}
36
+ tags: |
37
+ darkbitio/aws_recon:${{ env.VERSION_TAG }}
38
+ darkbitio/aws_recon:latest
@@ -0,0 +1,23 @@
1
+ name: smoke-test
2
+
3
+ on:
4
+ push:
5
+ branches: main
6
+
7
+ jobs:
8
+ smoke-test:
9
+ runs-on: ubuntu-20.04
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v2
13
+ with:
14
+ fetch-depth: 1
15
+ - name: Set version tag
16
+ run: |
17
+ echo "VERSION_TAG=$(grep VERSION lib/aws_recon/version.rb | awk -F\" '{print $2}')" >> $GITHUB_ENV
18
+ - name: Smoke Test :${{ env.VERSION_TAG }}
19
+ run: |
20
+ docker run -t --rm darkbitio/aws_recon:${{ env.VERSION_TAG }} aws_recon
21
+ - name: Smoke Test :latest
22
+ run: |
23
+ docker run -t --rm darkbitio/aws_recon:latest aws_recon
data/Dockerfile CHANGED
@@ -3,9 +3,10 @@ FROM ruby:${RUBY_VERSION}-alpine
3
3
 
4
4
  LABEL maintainer="Darkbit <info@darkbit.io>"
5
5
 
6
+ # Supply AWS Recon version at build time
7
+ ARG VERSION
6
8
  ARG USER=recon
7
9
  ARG GEM=aws_recon
8
- ARG VERSION=0.2.8
9
10
  ARG BUNDLER_VERSION=2.1.4
10
11
 
11
12
  # Install new Bundler version
@@ -33,4 +33,5 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'solargraph', '~> 0.39.11'
34
34
  spec.add_development_dependency 'rubocop', '~> 0.87.1'
35
35
  spec.add_development_dependency 'pry', '~> 0.13.1'
36
+ spec.add_development_dependency 'byebug', '~> 11.1'
36
37
  end
@@ -0,0 +1,24 @@
1
+ class AccessAnalyzer < Mapper
2
+ #
3
+ # Returns an array of resources.
4
+ #
5
+ def collect
6
+ resources = []
7
+
8
+ #
9
+ # list_analyzers
10
+ #
11
+ @client.list_analyzers.each_with_index do |response, page|
12
+ log(response.context.operation_name, page)
13
+
14
+ # analyzers
15
+ response.analyzers.each do |analyzer|
16
+ struct = OpenStruct.new(analyzer.to_h)
17
+ struct.type = 'analyzer'
18
+ resources.push(struct.to_h)
19
+ end
20
+ end
21
+
22
+ resources
23
+ end
24
+ end
@@ -31,6 +31,18 @@ class EC2 < Mapper
31
31
 
32
32
  # regional calls
33
33
  if @region != 'global'
34
+ #
35
+ # get_ebs_encryption_by_default
36
+ #
37
+ @client.get_ebs_encryption_by_default.each do |response|
38
+ log(response.context.operation_name)
39
+
40
+ struct = OpenStruct.new(response.to_h)
41
+ struct.type = 'ebs_encryption_settings'
42
+
43
+ resources.push(struct.to_h)
44
+ end
45
+
34
46
  #
35
47
  # describe_instances
36
48
  #
@@ -142,6 +142,24 @@ class IAM < Mapper
142
142
  end
143
143
  end
144
144
 
145
+ #
146
+ # generate_credential_report
147
+ #
148
+ unless @options.skip_credential_report
149
+ status = 'STARTED'
150
+ interval = 5
151
+
152
+ # wait for report to generate
153
+ while status != 'COMPLETE'
154
+ @client.generate_credential_report.each do |response|
155
+ log(response.context.operation_name)
156
+ status = response.state
157
+ end
158
+
159
+ sleep interval unless status == 'COMPLETE'
160
+ end
161
+ end
162
+
145
163
  #
146
164
  # get_credential_report
147
165
  #
@@ -31,6 +31,21 @@ class Organizations < Mapper
31
31
  end
32
32
  end
33
33
 
34
+ #
35
+ # list_policies
36
+ #
37
+ @client.list_policies({ filter: 'SERVICE_CONTROL_POLICY' }).each_with_index do |response, page|
38
+ log(response.context.operation_name, page)
39
+
40
+ response.policies.each do |policy|
41
+ struct = OpenStruct.new(policy.to_h)
42
+ struct.type = 'service_control_policy'
43
+ struct.content = JSON.parse(CGI.unescape(@client.describe_policy({ policy_id: policy.id }).policy.content))
44
+
45
+ resources.push(struct.to_h)
46
+ end
47
+ end
48
+
34
49
  resources
35
50
  end
36
51
  end
@@ -18,6 +18,7 @@ class SQS < Mapper
18
18
  struct = OpenStruct.new(@client.get_queue_attributes({ queue_url: queue, attribute_names: ['All'] }).attributes.to_h)
19
19
  struct.type = 'queue'
20
20
  struct.arn = struct.QueueArn
21
+ struct.Policy = JSON.parse(CGI.unescape(struct.Policy))
21
22
 
22
23
  resources.push(struct.to_h)
23
24
  end
@@ -17,6 +17,7 @@ class Parser
17
17
  :threads,
18
18
  :collect_user_data,
19
19
  :skip_slow,
20
+ :skip_credential_report,
20
21
  :stream_output,
21
22
  :verbose,
22
23
  :debug
@@ -45,6 +46,7 @@ class Parser
45
46
  false,
46
47
  false,
47
48
  false,
49
+ false,
48
50
  false
49
51
  )
50
52
 
@@ -115,6 +117,11 @@ class Parser
115
117
  args.skip_slow = true
116
118
  end
117
119
 
120
+ # skip generating IAM credential report
121
+ opts.on('-g', '--skip-credential-report', 'Skip generating IAM credential report (default: false)') do
122
+ args.skip_credential_report = true
123
+ end
124
+
118
125
  # stream output (forces JSON lines, doesn't output handled warnings or errors )
119
126
  opts.on('-j', '--stream-output', 'Stream JSON lines to stdout (default: false)') do
120
127
  args.output_file = nil
@@ -2,6 +2,8 @@
2
2
  - name: Organizations
3
3
  global: true
4
4
  alias: organizations
5
+ - name: AccessAnalyzer
6
+ alias: aa
5
7
  - name: ConfigService
6
8
  alias: config
7
9
  - name: CodeBuild
@@ -1,3 +1,3 @@
1
1
  module AwsRecon
2
- VERSION = "0.2.9"
2
+ VERSION = "0.2.14"
3
3
  end
data/readme.md CHANGED
@@ -1,3 +1,4 @@
1
+ ![smoke-test](https://github.com/darkbitio/aws-recon/workflows/smoke-test/badge.svg)
1
2
  [![Gem Version](https://badge.fury.io/rb/aws_recon.svg)](https://badge.fury.io/rb/aws_recon)
2
3
 
3
4
  # AWS Recon
@@ -158,6 +159,12 @@ $ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
158
159
  $ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
159
160
  ```
160
161
 
162
+ Example [OpenCSPM](https://github.com/OpenCSPM/opencspm) formatted output.
163
+
164
+ ```
165
+ $ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2 -f custom > output.json
166
+ ```
167
+
161
168
  #### Errors
162
169
 
163
170
  An exception will be raised on `AccessDeniedException` errors. This typically means your user/role doesn't have the necessary permissions to get/list/describe for that service. These exceptions are raised so troubleshooting access issues is easier.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws_recon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Larsen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-11-10 00:00:00.000000000 Z
12
+ date: 2020-11-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -137,6 +137,20 @@ dependencies:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: 0.13.1
140
+ - !ruby/object:Gem::Dependency
141
+ name: byebug
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '11.1'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '11.1'
140
154
  description: AWS Recon is a command line tool to collect resources from an Amazon
141
155
  Web Services (AWS) account. The tool outputs JSON suitable for processing with other
142
156
  tools.
@@ -149,6 +163,8 @@ extensions: []
149
163
  extra_rdoc_files: []
150
164
  files:
151
165
  - ".github/stale.yml"
166
+ - ".github/workflows/docker-build.yml"
167
+ - ".github/workflows/smoke-test.yml"
152
168
  - ".gitignore"
153
169
  - ".rubocop.yml"
154
170
  - ".travis.yml"
@@ -164,6 +180,7 @@ files:
164
180
  - lib/aws_recon.rb
165
181
  - lib/aws_recon/aws_recon.rb
166
182
  - lib/aws_recon/collectors.rb
183
+ - lib/aws_recon/collectors/accessanalyzer.rb
167
184
  - lib/aws_recon/collectors/acm.rb
168
185
  - lib/aws_recon/collectors/apigateway.rb
169
186
  - lib/aws_recon/collectors/apigatewayv2.rb