aws_recon 0.5.3 → 0.5.8

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: c32ae658ad80c3f24f28a7428f8511526edaf3034c9e6e193361cb55b6788840
4
- data.tar.gz: 2927c2351efb59cbb24d2e4c36c188b6fbbf6dcd631c1569e27814e39a546b10
3
+ metadata.gz: cacdfedc9b86afcaaa776b95751ddbd3799dde854ed190b7e79668cbda08ce8d
4
+ data.tar.gz: 30f07c6ab93754deb298981aa3f8f2d71692c4537dc0de98f4e259208b734395
5
5
  SHA512:
6
- metadata.gz: d5450a2d2fb68bc1a33787c550f094b2449474023045304fe0c00da432be3818963cc3285bfed572147890fcf05a02de4c57837d5ec8a7963e00976f7f362003
7
- data.tar.gz: b2708a5c9d02b0f2bb226b04c0a86356658c843c75721d102ca9364802ac847c632346bf16c93428dcc5346414457c78e8a39c80d9461b4f373bc2fe92cdee2d
6
+ metadata.gz: 55370f9a76e8fb31e426c5af9b9cd768ae201305aed403abfd7f1e5c724aae9c88bd49c233c928bf64d7e5ded395b1741a0663c0264a8c62b3ea08363d5c228f
7
+ data.tar.gz: 63e30b67a206a3ee631eaddb3aa558e85f2d1f7316d1b3a75b9079c18af4a5e98d234900bc75e69615609d646c8ccd17d3d9c7dc39ff5f5bc3a564bc64c0ee7e
@@ -1,6 +1,7 @@
1
1
  name: check-service-regions
2
2
 
3
3
  on:
4
+ workflow_dispatch:
4
5
  schedule:
5
6
  - cron: '0 10 * * *'
6
7
 
@@ -12,6 +13,6 @@ jobs:
12
13
  uses: actions/checkout@v2
13
14
  with:
14
15
  fetch-depth: 1
15
- - name: Set version tag
16
+ - name: Check AWS service regions
16
17
  run: |
17
18
  cd utils/aws ; ruby check_region_exclusions.rb
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- ARG RUBY_VERSION=2.6.6
1
+ ARG RUBY_VERSION=2.7.3
2
2
  FROM ruby:${RUBY_VERSION}-alpine
3
3
 
4
4
  LABEL maintainer="Darkbit <info@darkbit.io>"
data/aws_recon.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'aws_recon'
9
9
  spec.version = AwsRecon::VERSION
10
10
  spec.authors = ['Josh Larsen', 'Darkbit']
11
- spec.required_ruby_version = '>= 2.5.0'
11
+ spec.required_ruby_version = '>= 2.6.0'
12
12
  spec.summary = 'A multi-threaded AWS security-focused inventory collection tool.'
13
13
  spec.description = 'AWS Recon is a command line tool to collect resources from an Amazon Web Services (AWS) account. The tool outputs JSON suitable for processing with other tools.'
14
14
  spec.homepage = 'https://github.com/darkbitio/aws-recon'
@@ -34,7 +34,7 @@ module AwsRecon
34
34
  # formatter
35
35
  @formatter = Formatter.new
36
36
 
37
- return unless @options.stream_output
37
+ return if @options.stream_output
38
38
 
39
39
  puts "\nStarting collection with #{@options.threads} threads...\n"
40
40
  end
@@ -66,7 +66,7 @@ module AwsRecon
66
66
  end
67
67
 
68
68
  #
69
- # Format @resources as either
69
+ # Format @resources as either JSON or JSONL
70
70
  #
71
71
  def formatted_json
72
72
  if @options.jsonl
@@ -117,7 +117,7 @@ module AwsRecon
117
117
  ensure
118
118
  elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - @starting
119
119
 
120
- puts "\nFinished in #{elapsed.to_i} seconds.\n\n"
120
+ puts "\nFinished in #{elapsed.to_i} seconds.\n\n" unless @options.stream_output
121
121
 
122
122
  # write output file
123
123
  if @options.output_file && !@options.s3
@@ -17,6 +17,9 @@ class Lambda < Mapper
17
17
  struct = OpenStruct.new(function)
18
18
  struct.type = 'function'
19
19
  struct.arn = function.function_arn
20
+ struct.vpc_config = function.vpc_config.to_h
21
+ struct.tracing_config = function.tracing_config.to_h
22
+ struct.layers = function.layers ? function.layers.map(&:to_h) : []
20
23
  struct.policy = @client.get_policy({ function_name: function.function_name }).policy.parse_policy
21
24
 
22
25
  rescue Aws::Lambda::Errors::ResourceNotFoundException => e
@@ -36,6 +39,7 @@ class Lambda < Mapper
36
39
  struct = OpenStruct.new(layer)
37
40
  struct.type = 'layer'
38
41
  struct.arn = layer.layer_arn
42
+ struct.latest_matching_version = layer.latest_matching_version.to_h
39
43
 
40
44
  # list_layer_versions
41
45
  struct.versions = @client.list_layer_versions({ layer_name: layer.layer_name }).layer_versions.map(&:to_h)
@@ -7,9 +7,7 @@ class WAFV2 < Mapper
7
7
  #
8
8
  # Returns an array of resources.
9
9
  #
10
- # TODO: test live
11
10
  # TODO: resolve scope (e.g. CLOUDFRONT supported?)
12
- # TODO: confirm paging behavior
13
11
  #
14
12
  def collect
15
13
  resources = []
@@ -25,7 +23,6 @@ class WAFV2 < Mapper
25
23
  response.web_acls.each do |acl|
26
24
  struct = OpenStruct.new(acl.to_h)
27
25
  struct.type = 'web_acl'
28
- # struct.arn = "arn:aws:#{@service}:#{@region}::web_acl/#{acl.id}"
29
26
 
30
27
  params = {
31
28
  name: acl.name,
@@ -40,7 +37,7 @@ class WAFV2 < Mapper
40
37
  end
41
38
 
42
39
  # list_resources_for_web_acl
43
- @client.list_resources_for_web_acl({ web_acl_arn: 'ResourceArn' }).each do |r|
40
+ @client.list_resources_for_web_acl({ web_acl_arn: acl.arn }).each do |r|
44
41
  struct.resources = r.resource_arns.map(&:to_h)
45
42
  end
46
43
 
@@ -100,6 +100,7 @@ class Parser
100
100
 
101
101
  # write output file to S3 bucket
102
102
  opts.on('-b', '--s3-bucket [BUCKET:REGION]', 'Write output file to S3 bucket (default: \'\')') do |bucket_with_region|
103
+ args.stream_output = false
103
104
  args.s3 = bucket_with_region
104
105
  end
105
106
 
@@ -109,8 +110,8 @@ class Parser
109
110
  end
110
111
 
111
112
  # output format
112
- opts.on('-f', '--format [FORMAT]', 'Specify output format (default: aws)') do |file|
113
- args.output_format = file.downcase if %w[aws custom].include?(file.downcase)
113
+ opts.on('-f', '--format [FORMAT]', 'Specify output format (default: aws)') do |f|
114
+ args.output_format = f.downcase if %w[aws custom].include?(f.downcase)
114
115
  end
115
116
 
116
117
  # threads
@@ -56,7 +56,7 @@
56
56
  - name: ECR
57
57
  alias: ecr
58
58
  - name: DynamoDB
59
- alias: ddb
59
+ alias: dynamodb
60
60
  - name: KMS
61
61
  alias: kms
62
62
  - name: Kinesis
@@ -102,7 +102,7 @@
102
102
  - af-south-1
103
103
  - ap-northeast-3
104
104
  - name: SecretsManager
105
- alias: sm
105
+ alias: secretsmanager
106
106
  - name: SecurityHub
107
107
  alias: securityhub
108
108
  - name: Support
@@ -155,7 +155,7 @@
155
155
  - ap-northeast-3
156
156
  - eu-south-1
157
157
  - name: DirectConnect
158
- alias: dc
158
+ alias: directconnect
159
159
  - name: DirectoryService
160
160
  alias: ds
161
161
  excluded_regions:
@@ -1,3 +1,3 @@
1
1
  module AwsRecon
2
- VERSION = "0.5.3"
2
+ VERSION = "0.5.8"
3
3
  end
@@ -3,11 +3,21 @@
3
3
  #
4
4
  # Check regional service availability against services.yaml exclusions.
5
5
  #
6
+ # AWS updates the regional service table daily. By checking regional service
7
+ # coverage, we can identify regions that should be excluded from AWS Recon
8
+ # checks. We exclude non-supported regions because service APIs handle non-
9
+ # availability differently. Some will respond with an error that can be handled
10
+ # by the errors defined in the AWS Ruby SDK client. Others will fail at the
11
+ # network level (i.e. there is no API endpoint even available). We could handle
12
+ # those errors and silently fail, but we choose not to so we can identify cases
13
+ # where there is a lack of service availability in a particular region.
14
+ #
6
15
  require 'net/http'
7
16
  require 'json'
8
17
  require 'yaml'
9
18
 
10
19
  TS = Time.now.to_i
20
+ # AWS Regional services table
11
21
  URL = "https://api.regional-table.region-services.aws.a2z.com/index.json?timestamp=#{TS}000"
12
22
 
13
23
  service_to_query = ARGV[0]
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.5.3
4
+ version: 0.5.8
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: 2021-04-13 00:00:00.000000000 Z
12
+ date: 2021-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -270,7 +270,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
270
270
  requirements:
271
271
  - - ">="
272
272
  - !ruby/object:Gem::Version
273
- version: 2.5.0
273
+ version: 2.6.0
274
274
  required_rubygems_version: !ruby/object:Gem::Requirement
275
275
  requirements:
276
276
  - - ">="