terrafying-components 2.3.7 → 2.4.0

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: 4cce3c1a633e5e4daca6ff1b63b4a904dba0c2105a8df0024765e2788b261247
4
- data.tar.gz: 7d6c8f3938a4c813bee85152a0e5cc8e779a7bce6555388caedb54c21e7f0a4e
3
+ metadata.gz: 958f5cf0e55c8fb3ee50530de70424c144000a3ec34c263c66216fb89b234bca
4
+ data.tar.gz: 2b53beccd6f67c5069f3f1971c9d33e11830c1e047fae99a26197dc59e7696a2
5
5
  SHA512:
6
- metadata.gz: 062cfb791bdf8a36cb408020f4b2fc7d0e4ce15bd07a0a5cf7417c83524051109904b2aa253b2f09f15e7444b9e4b8cf8db7a24df51146aceff98e1aa6131829
7
- data.tar.gz: 3bcbb217b6a7a745e525935613d5e987dc00bd9d99f3325d6b9ec461444e74d1a93ce3d89aa5ebb9cf4b6d0f7e80600ffa0d56d399d59c3d0ff05cf5ed2b1ca6
6
+ metadata.gz: 0c0e3a2933af5c003222be6e5d957cd9d1763b0c6c241b794beb15e45b0e116f1bd3b7f2ac0b7a81c184f76d2a156be36fc6b079f4ce491cb19704695c7730cb
7
+ data.tar.gz: c9732ff0ecdc0be2ed2351f6a7b3405b2225d13e57d4a7b5c9b782cfae09064f2e1796a4ee314456b90104f8e2784b01a4877e85bc367c4753e72c0cbee37e40
@@ -33,7 +33,7 @@ module Terrafying
33
33
  options = {
34
34
  public: false,
35
35
  eip: false,
36
- ami: aws.ami('base-image-fc-79994d1f', owners = ['477284023816']),
36
+ ami: aws.ami('base-image-fc-f50b677a', owners = ['477284023816']),
37
37
  instance_type: 't3a.micro',
38
38
  instances: { min: 1, max: 1, desired: 1, tags: {} },
39
39
  ports: [],
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'xxhash'
4
4
 
5
+ require 'terrafying'
5
6
  require 'terrafying/components/ports'
6
7
  require 'terrafying/components/usable'
7
8
 
@@ -7,7 +7,7 @@ require 'terrafying/components'
7
7
  module Terrafying
8
8
  module Components
9
9
  class Prometheus < Terrafying::Context
10
- attr_reader :prometheus, :security_group
10
+ attr_reader :prometheus, :security_group, :thanos
11
11
 
12
12
  def self.create_in(options)
13
13
  new(**options).tap(&:create)
@@ -81,7 +81,8 @@ module Terrafying
81
81
  store:,
82
82
  topic:,
83
83
  include_all_regions: true,
84
- include_all_organisation: true
84
+ include_all_organisation: true,
85
+ ignore_buckets: []
85
86
  )
86
87
 
87
88
  @name = name
@@ -142,6 +143,8 @@ module Terrafying
142
143
  policy_arn: log_role_policy["arn"],
143
144
  }
144
145
 
146
+ s3_data_selectors = bucket_selector(ignore_buckets)
147
+
145
148
  resource :aws_cloudtrail, "#{name}", {
146
149
  name: "#{name}",
147
150
  s3_bucket_name: store.name,
@@ -165,20 +168,81 @@ module Terrafying
165
168
  values: ["arn:aws:lambda"],
166
169
  },
167
170
  },
168
- {
169
- read_write_type: "All",
170
- include_management_events: true,
171
-
172
- data_resource: {
173
- type: "AWS::S3::Object",
174
- values: ["arn:aws:s3:::"],
175
- },
176
- },
177
171
  ],
178
- }
172
+
173
+ }.deep_merge(s3_data_selectors)
179
174
  self
180
175
  end
181
176
 
177
+ def bucket_selector(buckets)
178
+ buckets = Array(buckets)
179
+
180
+ return all_buckets if buckets.empty?
181
+
182
+ {
183
+ advanced_event_selector: [
184
+ ignore_buckets_selectors(buckets),
185
+ management_events_selector,
186
+ ]
187
+ }
188
+ end
189
+
190
+ def all_buckets
191
+ {
192
+ event_selector: [
193
+ {
194
+ read_write_type: "All",
195
+ include_management_events: true,
196
+
197
+ data_resource: {
198
+ type: "AWS::S3::Object",
199
+ values: ["arn:aws:s3:::"],
200
+ }
201
+ }
202
+ ]
203
+ }
204
+ end
205
+
206
+ def ignore_buckets_selectors(buckets)
207
+ ignore_bucket_arns = Array(buckets).map { |bucket|
208
+ data_name = Digest::SHA256.hexdigest("#{@name}-#{bucket}")[0..16]
209
+ arn = data(:aws_s3_bucket, "ct-ignore-#{data_name}", bucket: bucket)['arn']
210
+ "#{arn}/"
211
+ }
212
+
213
+ {
214
+ name: "Log all S3 buckets objects events except these",
215
+
216
+ field_selector: [
217
+ {
218
+ field: 'eventCategory',
219
+ equals: ['Data']
220
+ },
221
+ {
222
+ field: 'resources.type',
223
+ equals: ['AWS::S3::Object']
224
+ },
225
+ {
226
+ field: 'resources.ARN',
227
+ not_equals: ignore_bucket_arns
228
+ }
229
+ ],
230
+ }
231
+ end
232
+
233
+ def management_events_selector
234
+ {
235
+ name: "Log readOnly and writeOnly management events",
236
+
237
+ field_selector: [
238
+ {
239
+ field: "eventCategory",
240
+ equals: ["Management"]
241
+ }
242
+ ]
243
+ }
244
+ end
245
+
182
246
  def alert!(name:, pattern:, threshold: 1, topic: @topic)
183
247
 
184
248
  ident = "cloudwatch-#{@name}-#{name}"
@@ -41,7 +41,7 @@ module Terrafying
41
41
 
42
42
  def create_in(vpc, name, options = {})
43
43
  options = {
44
- ami: aws.ami('base-image-fc-79994d1f', owners = ['477284023816']),
44
+ ami: aws.ami('base-image-fc-f50b677a', owners = ['477284023816']),
45
45
  instance_type: 't3a.micro',
46
46
  ports: [],
47
47
  instances: [{}],
@@ -38,7 +38,7 @@ module Terrafying
38
38
  options = {
39
39
  public: false,
40
40
  eip: false,
41
- ami: aws.ami('base-image-fc-79994d1f', owners = ['477284023816']),
41
+ ami: aws.ami('base-image-fc-f50b677a', owners = ['477284023816']),
42
42
  instance_type: 't3a.micro',
43
43
  subnets: vpc.subnets.fetch(:private, []),
44
44
  ports: [],
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Terrafying
4
4
  module Components
5
- VERSION = '2.3.7'
5
+ VERSION = '2.4.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrafying-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.7
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-11 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake