Skip to content

Commit 13330d8

Browse files
authored
Prevent secret_policy from being overridden v2
1 parent b780f95 commit 13330d8

1 file changed

Lines changed: 29 additions & 16 deletions

File tree

ecs-task.cfndsl.rb

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
RetentionInDays log_retention
2121
}
2222

23-
definitions, task_volumes, secrets = Array.new(4){[]}
23+
definitions, task_volumes, secrets = Array.new(3){[]}
2424
secrets_policy = {}
25+
resources_ssm, resources_secretsmanager, resources_secrets = Array.new(3){[]}
2526

2627
task_definition = external_parameters.fetch(:task_definition, {})
2728
task_definition.each do |task_name, task|
@@ -189,31 +190,19 @@
189190

190191
if task['secrets'].key?('ssm')
191192
secrets.push *task['secrets']['ssm'].map {|k,v| { Name: k, ValueFrom: v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }}
192-
resources = task['secrets']['ssm'].map {|k,v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }
193-
secrets_policy['ssm-secrets'] = {
194-
'action' => 'ssm:GetParameters',
195-
'resource' => resources
196-
}
193+
resources_ssm = resources_ssm.union(task['secrets']['ssm'].values)
197194
task['secrets'].reject! { |k| k == 'ssm' }
198195
end
199196

200197
if task['secrets'].key?('secretsmanager')
201198
secrets.push *task['secrets']['secretsmanager'].map {|k,v| { Name: k, ValueFrom: v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:#{v}") : v }}
202-
resources = task['secrets']['secretsmanager'].map {|k,v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:#{v}-*") : v }
203-
secrets_policy['secretsmanager'] = {
204-
'action' => 'secretsmanager:GetSecretValue',
205-
'resource' => resources
206-
}
199+
resources_secretsmanager = resources_secretsmanager.union(task['secrets']['secretsmanager'].values)
207200
task['secrets'].reject! { |k| k == 'secretsmanager' }
208201
end
209202

210203
unless task['secrets'].empty?
211204
secrets.push *task['secrets'].map {|k,v| { Name: k, ValueFrom: v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }}
212-
resources = task['secrets'].map {|k,v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }
213-
secrets_policy['ssm-secrets-inline'] = {
214-
'action' => 'ssm:GetParameters',
215-
'resource' => resources
216-
}
205+
resources_secrets = resources_secrets.union(task['secrets'].values)
217206
end
218207

219208
if secrets.any?
@@ -226,6 +215,30 @@
226215

227216
end
228217

218+
if !resources_ssm.empty?
219+
resources_ssm = resources_ssm.uniq.map {|v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }
220+
secrets_policy["ssm-secrets"] = {
221+
'action' => 'ssm:GetParameters',
222+
'resource' => resources_ssm
223+
}
224+
end
225+
226+
if !resources_secretsmanager.empty?
227+
resources_secretsmanager = resources_secretsmanager.uniq.map {|v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:#{v}-*") : v }
228+
secrets_policy["secretsmanager"] = {
229+
'action' => 'secretsmanager:GetSecretValue',
230+
'resource' => resources_secretsmanager
231+
}
232+
end
233+
234+
if !resources_secrets.empty?
235+
resources_secrets = resources_secrets.uniq.map {|v| v.is_a?(String) && v.start_with?('/') ? FnSub("arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter#{v}") : v }
236+
secrets_policy["ssm-secrets-inline"] = {
237+
'action' => 'ssm:GetParameters',
238+
'resource' => resources_secrets
239+
}
240+
end
241+
229242
# add docker volumes
230243
volumes = external_parameters.fetch(:volumes, [])
231244
volumes.each do |volume|

0 commit comments

Comments
 (0)