aws_security_viz 0.1.5.pre.alpha.pre.112 → 0.1.5.pre.alpha.pre.130
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +4 -0
- data/aws_security_viz.gemspec +2 -4
- data/lib/provider/ec2.rb +19 -19
- data/spec/spec_helper.rb +13 -8
- data/spec/visualize_aws_spec.rb +24 -29
- metadata +19 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38a094e251fdddd0b80c4df4f8471cc5c186b45fd3ddd838034701def6d2b7f1
|
4
|
+
data.tar.gz: 3208a726e793e810e7ce581b1a677a03395a1e15579f6a0e210282ecf035cf1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9639a24f8a202d66e6d793a9da86639d7fcc2ba843028c3ec2f4adebbe037a03ea877a9df987cd5b9fadaca1d4368e74b999298c3942d1b4cdcfa17873d3c1fa
|
7
|
+
data.tar.gz: 94591ee3242ef23e573f097d0671d568e5c9773ff21400e3c561fe78776a1298d26027d4bca23383063ff4e14d8fac35e21036b8a0c9578445e1a5a20f046f93
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
4
|
|
5
5
|
## [Unreleased]
|
6
|
+
### Changed
|
7
|
+
- Replaced fog gem with aws-sdk-ec2
|
8
|
+
- Upgrade bundler to 2.x
|
9
|
+
- Removed unused dependencies
|
6
10
|
|
7
11
|
## [0.1.5] - 2018-10-10
|
8
12
|
### Added
|
data/aws_security_viz.gemspec
CHANGED
@@ -21,17 +21,15 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
22
22
|
s.require_paths = ['lib']
|
23
23
|
|
24
|
-
s.add_development_dependency 'bundler', '~> 1
|
24
|
+
s.add_development_dependency 'bundler', '~> 2.0.1'
|
25
25
|
s.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
|
26
26
|
s.add_development_dependency 'rspec', '~> 3.5', '>= 3.5.0'
|
27
27
|
|
28
28
|
s.add_runtime_dependency 'graphviz', '~> 1.1', '>= 1.1.0'
|
29
|
-
s.add_runtime_dependency 'fog-aws', '~> 2.0', '>= 2.0.1'
|
30
|
-
s.add_runtime_dependency 'unf', '~> 0.1.4'
|
31
|
-
s.add_runtime_dependency 'json', '~> 2.1', '>= 2.1.0'
|
32
29
|
s.add_runtime_dependency 'optimist', '~> 3.0.0'
|
33
30
|
s.add_runtime_dependency 'organic_hash', '~> 1.0', '>= 1.0.2'
|
34
31
|
s.add_runtime_dependency 'rgl', '~> 0.5.3'
|
32
|
+
s.add_runtime_dependency 'aws-sdk-ec2', '~> 1.65.0'
|
35
33
|
|
36
34
|
s.required_ruby_version = '>= 2.0.0'
|
37
35
|
end
|
data/lib/provider/ec2.rb
CHANGED
@@ -1,25 +1,21 @@
|
|
1
|
-
require '
|
1
|
+
require 'aws-sdk-ec2'
|
2
2
|
|
3
3
|
class Ec2Provider
|
4
4
|
|
5
5
|
def initialize(options)
|
6
6
|
@options = options
|
7
7
|
conn_opts = {
|
8
|
-
region: options[:region]
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if options[:session_token]
|
15
|
-
conn_opts[:aws_session_token] = options[:session_token]
|
16
|
-
end
|
8
|
+
region: options[:region],
|
9
|
+
access_key_id: options[:access_key],
|
10
|
+
secret_access_key: options[:secret_key],
|
11
|
+
session_token: options[:session_token]
|
12
|
+
}.delete_if {|k,v| v.nil?}
|
17
13
|
|
18
|
-
@
|
14
|
+
@client = Aws::EC2::Client.new(conn_opts)
|
19
15
|
end
|
20
16
|
|
21
17
|
def security_groups
|
22
|
-
@
|
18
|
+
@client.describe_security_groups.security_groups.reject { |sg|
|
23
19
|
@options[:vpc_id] && sg.vpc_id != @options[:vpc_id]
|
24
20
|
}.collect { |sg|
|
25
21
|
Ec2::SecurityGroup.new(sg)
|
@@ -35,6 +31,10 @@ module Ec2
|
|
35
31
|
@sg = sg
|
36
32
|
end
|
37
33
|
|
34
|
+
def name
|
35
|
+
@sg.group_name
|
36
|
+
end
|
37
|
+
|
38
38
|
def ip_permissions
|
39
39
|
@sg.ip_permissions.collect { |ip|
|
40
40
|
Ec2::IpPermission.new(ip)
|
@@ -54,25 +54,25 @@ module Ec2
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def protocol
|
57
|
-
@ip['
|
57
|
+
@ip['ip_protocol']
|
58
58
|
end
|
59
59
|
|
60
60
|
def from
|
61
|
-
@ip['
|
61
|
+
@ip['from_port']
|
62
62
|
end
|
63
63
|
|
64
64
|
def to
|
65
|
-
@ip['
|
65
|
+
@ip['to_port']
|
66
66
|
end
|
67
67
|
|
68
68
|
def ip_ranges
|
69
|
-
@ip['
|
69
|
+
@ip['ip_ranges'].collect {|gp|
|
70
70
|
Ec2::IpPermissionRange.new(gp)
|
71
71
|
}
|
72
72
|
end
|
73
73
|
|
74
74
|
def groups
|
75
|
-
@ip['
|
75
|
+
@ip['user_id_group_pairs'].collect {|gp|
|
76
76
|
Ec2::IpPermissionGroup.new(gp)
|
77
77
|
}
|
78
78
|
end
|
@@ -84,7 +84,7 @@ module Ec2
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def cidr_ip
|
87
|
-
@range['
|
87
|
+
@range['cidr_ip']
|
88
88
|
end
|
89
89
|
|
90
90
|
def to_str
|
@@ -98,7 +98,7 @@ module Ec2
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def name
|
101
|
-
@gp['
|
101
|
+
@gp['group_name'] || @gp['group_id']
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
data/spec/spec_helper.rb
CHANGED
@@ -7,18 +7,23 @@ require File.expand_path(File.dirname(__FILE__) + "/../config/boot")
|
|
7
7
|
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
8
8
|
|
9
9
|
def group name, *ingress
|
10
|
-
group
|
11
|
-
allow(group).to receive(:ip_permissions).and_return(ingress)
|
12
|
-
allow(group).to receive(:ip_permissions_egress).and_return([])
|
13
|
-
allow(group).to receive(:name).and_return(name)
|
14
|
-
allow(group).to receive(:group_id).and_return('some group')
|
15
|
-
group
|
10
|
+
{group_name: name, group_id: 'some group', ip_permissions: ingress, ip_permissions_egress: []}
|
16
11
|
end
|
17
12
|
|
18
13
|
def group_ingress port, name
|
19
|
-
{
|
14
|
+
{user_id_group_pairs:[{user_id: "userId", group_id: "sg-groupId", group_name: name}], ip_ranges:[], ip_protocol: "tcp", from_port: port, to_port: port}
|
20
15
|
end
|
21
16
|
|
22
17
|
def cidr_ingress port, cidr_ip
|
23
|
-
{
|
18
|
+
{ip_ranges:[{cidr_ip: cidr_ip}], ip_protocol: "tcp", from_port: port, to_port: port}
|
24
19
|
end
|
20
|
+
|
21
|
+
def stub_security_groups groups
|
22
|
+
Aws.config[:ec2] = {
|
23
|
+
stub_responses: {
|
24
|
+
describe_security_groups: {
|
25
|
+
security_groups: groups
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
data/spec/visualize_aws_spec.rb
CHANGED
@@ -17,16 +17,11 @@ class DummyRenderer
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe VisualizeAws do
|
20
|
-
before do
|
21
|
-
@ec2 = double(Fog::Compute)
|
22
|
-
allow(Fog::Compute::AWS).to receive(:new).and_return(@ec2)
|
23
|
-
end
|
24
|
-
|
25
20
|
let(:visualize_aws) { VisualizeAws.new(AwsConfig.new) }
|
26
21
|
let(:renderer) { DummyRenderer.new }
|
27
22
|
|
28
|
-
it 'should add nodes, edges for each security group' do
|
29
|
-
|
23
|
+
it 'should add nodes, edges for each security group' do
|
24
|
+
stub_security_groups([group('Remote ssh', group_ingress(22, 'My machine')), group('My machine')])
|
30
25
|
graph = visualize_aws.build
|
31
26
|
|
32
27
|
expect(graph.output(renderer)).to contain_exactly(
|
@@ -38,7 +33,7 @@ describe VisualizeAws do
|
|
38
33
|
|
39
34
|
context 'groups' do
|
40
35
|
it 'should add nodes for external security groups defined through ingress' do
|
41
|
-
|
36
|
+
stub_security_groups([group('Web', group_ingress(80, 'ELB'))])
|
42
37
|
graph = visualize_aws.build
|
43
38
|
|
44
39
|
expect(graph.output(renderer)).to contain_exactly(
|
@@ -49,11 +44,11 @@ describe VisualizeAws do
|
|
49
44
|
end
|
50
45
|
|
51
46
|
it 'should add an edge for each security ingress' do
|
52
|
-
|
47
|
+
stub_security_groups(
|
53
48
|
[
|
54
|
-
group('App', group_ingress(
|
55
|
-
group('Web', group_ingress(
|
56
|
-
group('Db', group_ingress(
|
49
|
+
group('App', group_ingress(80, 'Web'), group_ingress(8983, 'Internal')),
|
50
|
+
group('Web', group_ingress(80, 'External')),
|
51
|
+
group('Db', group_ingress(7474, 'App'))
|
57
52
|
])
|
58
53
|
graph = visualize_aws.build
|
59
54
|
|
@@ -75,10 +70,10 @@ describe VisualizeAws do
|
|
75
70
|
context 'cidr' do
|
76
71
|
|
77
72
|
it 'should add an edge for each cidr ingress' do
|
78
|
-
|
73
|
+
stub_security_groups(
|
79
74
|
[
|
80
|
-
group('Web', group_ingress(
|
81
|
-
group('Db', group_ingress(
|
75
|
+
group('Web', group_ingress(80, 'External')),
|
76
|
+
group('Db', group_ingress(7474, 'App'), cidr_ingress(22, '127.0.0.1/32'))
|
82
77
|
])
|
83
78
|
graph = visualize_aws.build
|
84
79
|
|
@@ -96,10 +91,10 @@ describe VisualizeAws do
|
|
96
91
|
end
|
97
92
|
|
98
93
|
it 'should add map edges for cidr ingress' do
|
99
|
-
|
94
|
+
stub_security_groups(
|
100
95
|
[
|
101
|
-
group('Web', group_ingress(
|
102
|
-
group('Db', group_ingress(
|
96
|
+
group('Web', group_ingress(80, 'External')),
|
97
|
+
group('Db', group_ingress(7474, 'App'), cidr_ingress(22, '127.0.0.1/32'))
|
103
98
|
])
|
104
99
|
mapping = {'127.0.0.1/32' => 'Work'}
|
105
100
|
mapping = CidrGroupMapping.new([], mapping)
|
@@ -121,9 +116,9 @@ describe VisualizeAws do
|
|
121
116
|
end
|
122
117
|
|
123
118
|
it 'should group mapped duplicate edges for cidr ingress' do
|
124
|
-
|
119
|
+
stub_security_groups(
|
125
120
|
[
|
126
|
-
group('ssh', cidr_ingress(
|
121
|
+
group('ssh', cidr_ingress(22, '192.168.0.1/32'), cidr_ingress(22, '127.0.0.1/32'))
|
127
122
|
])
|
128
123
|
mapping = {'127.0.0.1/32' => 'Work', '192.168.0.1/32' => 'Work'}
|
129
124
|
mapping = CidrGroupMapping.new([], mapping)
|
@@ -141,10 +136,10 @@ describe VisualizeAws do
|
|
141
136
|
|
142
137
|
context "filter" do
|
143
138
|
it 'include cidr which do not match the pattern' do
|
144
|
-
|
139
|
+
stub_security_groups(
|
145
140
|
[
|
146
|
-
group('Web', cidr_ingress(
|
147
|
-
group('Db', cidr_ingress(
|
141
|
+
group('Web', cidr_ingress(22, '127.0.0.1/32')),
|
142
|
+
group('Db', cidr_ingress(22, '192.0.1.1/32'))
|
148
143
|
])
|
149
144
|
|
150
145
|
opts = {:exclude => ['127.*']}
|
@@ -159,10 +154,10 @@ describe VisualizeAws do
|
|
159
154
|
end
|
160
155
|
|
161
156
|
it 'include groups which do not match the pattern' do
|
162
|
-
|
157
|
+
stub_security_groups(
|
163
158
|
[
|
164
|
-
group('Web', group_ingress(
|
165
|
-
group('Db', group_ingress(
|
159
|
+
group('Web', group_ingress(80, 'External')),
|
160
|
+
group('Db', group_ingress(7474, 'App'), cidr_ingress(22, '127.0.0.1/32'))
|
166
161
|
])
|
167
162
|
|
168
163
|
opts = {:exclude => ['D.*b', 'App']}
|
@@ -176,10 +171,10 @@ describe VisualizeAws do
|
|
176
171
|
end
|
177
172
|
|
178
173
|
it 'include derived groups which do not match the pattern' do
|
179
|
-
|
174
|
+
stub_security_groups(
|
180
175
|
[
|
181
|
-
group('Web', group_ingress(
|
182
|
-
group('Db', group_ingress(
|
176
|
+
group('Web', group_ingress(80, 'External')),
|
177
|
+
group('Db', group_ingress(7474, 'App'), cidr_ingress(22, '127.0.0.1/32'))
|
183
178
|
])
|
184
179
|
|
185
180
|
opts = {:exclude => ['App']}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws_security_viz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.5.pre.alpha.pre.
|
4
|
+
version: 0.1.5.pre.alpha.pre.130
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anay Nayak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.0.1
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,60 +84,6 @@ dependencies:
|
|
84
84
|
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '1.1'
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: fog-aws
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - "~>"
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '2.0'
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 2.0.1
|
97
|
-
type: :runtime
|
98
|
-
prerelease: false
|
99
|
-
version_requirements: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.0'
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 2.0.1
|
107
|
-
- !ruby/object:Gem::Dependency
|
108
|
-
name: unf
|
109
|
-
requirement: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - "~>"
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 0.1.4
|
114
|
-
type: :runtime
|
115
|
-
prerelease: false
|
116
|
-
version_requirements: !ruby/object:Gem::Requirement
|
117
|
-
requirements:
|
118
|
-
- - "~>"
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version: 0.1.4
|
121
|
-
- !ruby/object:Gem::Dependency
|
122
|
-
name: json
|
123
|
-
requirement: !ruby/object:Gem::Requirement
|
124
|
-
requirements:
|
125
|
-
- - ">="
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: 2.1.0
|
128
|
-
- - "~>"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '2.1'
|
131
|
-
type: :runtime
|
132
|
-
prerelease: false
|
133
|
-
version_requirements: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - ">="
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: 2.1.0
|
138
|
-
- - "~>"
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: '2.1'
|
141
87
|
- !ruby/object:Gem::Dependency
|
142
88
|
name: optimist
|
143
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,6 +132,20 @@ dependencies:
|
|
186
132
|
- - "~>"
|
187
133
|
- !ruby/object:Gem::Version
|
188
134
|
version: 0.5.3
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: aws-sdk-ec2
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.65.0
|
142
|
+
type: :runtime
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 1.65.0
|
189
149
|
description: Provides a quick mechanism to visualize your EC2 security groups in multiple
|
190
150
|
formats
|
191
151
|
email: anayak007+rubygems@gmail.com
|
@@ -252,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
212
|
- !ruby/object:Gem::Version
|
253
213
|
version: 1.3.1
|
254
214
|
requirements: []
|
255
|
-
rubygems_version: 3.0.
|
215
|
+
rubygems_version: 3.0.2
|
256
216
|
signing_key:
|
257
217
|
specification_version: 4
|
258
218
|
summary: Visualize your aws security groups
|