Module: Furikake::Resources::SecurityGroup

Defined in:
lib/furikake/resources/security_group.rb

Class Method Summary collapse

Class Method Details

.encode_value(value) ⇒ Object



110
111
112
113
# File 'lib/furikake/resources/security_group.rb', line 110

def encode_value(value)
    return value unless value.index('_') == 0
    '\\' + value
end

.get_resourcesObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/furikake/resources/security_group.rb', line 29

def get_resources
  ec2 = Aws::EC2::Client.new
  params = {}
  ingresses = []
  egresses = []
  loop do
    res = ec2.describe_security_groups(params)
    res.security_groups.each do |sg|
      sg.ip_permissions.each do |permission|
        ingress = []
        ingress << sg.group_id
        ingress << encode_value(sg.group_name)
        ingress << encode_value(sg.description || 'N/A')
        ingress << (permission.from_port || 'N/A')
        ingress << (permission.to_port || 'N/A')
        ingress << (permission.ip_protocol == '-1' ? 'ALL' : permission.ip_protocol)
 
        ip_ranges = list_ip_ranges(permission.ip_ranges)
        list_ids = list_ids(permission.prefix_list_ids)
        group_pairs = list_group_pairs(permission.user_id_group_pairs)

        source = []
        source << ip_ranges unless ip_ranges.empty?
        source << list_ids unless list_ids.empty?
        source << group_pairs unless group_pairs.empty?
        ingress << source.join(' <br> ')
        ingresses << ingress
      end
 
      sg.ip_permissions_egress.each do |permission|
        egress = []
        egress << sg.group_id
        egress << encode_value(sg.group_name)
        egress << encode_value(sg.description || 'N/A')
        egress << (permission.from_port || 'N/A')
        egress << (permission.to_port || 'N/A')
        egress << (permission.ip_protocol == '-1' ? 'ALL' : permission.ip_protocol)

        ip_ranges = list_ip_ranges(permission.ip_ranges)
        list_ids = list_ids(permission.prefix_list_ids)
        group_pairs = list_group_pairs(permission.user_id_group_pairs)

        dest = []
        dest << ip_ranges unless ip_ranges.empty?
        dest << list_ids unless list_ids.empty?
        dest << group_pairs unless group_pairs.empty?
        egress << dest.join('<br>')
        egresses << egress
      end
    end
    break if res.next_token.nil?
    params[:next_token] = res.next_token
  end

  return ingresses, egresses
end

.list_group_pairs(user_id_group_pairs) ⇒ Object



102
103
104
105
106
107
108
# File 'lib/furikake/resources/security_group.rb', line 102

def list_group_pairs(user_id_group_pairs)
  result = []
  user_id_group_pairs.each do |id|
    result << (id.group_id || 'N/A') + ' (' + (id.description|| 'N/A') + ')'
  end
  result
end

.list_ids(prefix_list_ids) ⇒ Object



94
95
96
97
98
99
100
# File 'lib/furikake/resources/security_group.rb', line 94

def list_ids(prefix_list_ids)
  result = []
  prefix_list_ids.each do |id|
    result << (id.prefix_list_id || 'N/A') + ' (' + (id.description|| 'N/A') + ')'
  end
  result
end

.list_ip_ranges(ip_ranges) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/furikake/resources/security_group.rb', line 86

def list_ip_ranges(ip_ranges)
  result = []
  ip_ranges.each do |ip|
    result << (ip.cidr_ip || 'N/A') + ' (' + (ip.description || 'N/A') + ')'
  end
  result
end

.reportObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/furikake/resources/security_group.rb', line 4

def report
  ingresses, egresses = get_resources
  headers = ['ID', 'Group Name', 'Description',
             'From Port', 'To Port', 'Protocol', 'Source' ]
  ingress_info = MarkdownTables.make_table(headers, ingresses, is_rows: true, align: 'l')

  headers = ['ID', 'Group Name', 'Description',
             'From Port', 'To Port', 'Protocol', 'Source' ]
  egress_info = MarkdownTables.make_table(headers, egresses, is_rows: true, align: 'l')

  documents = <<"EOS"
### Security Group

#### Ingress

#{ingress_info}

#### Egress

#{egress_info}
EOS

  documents
end