Skip to content

Commit f4183b6

Browse files
author
Matt Luttrell
committed
Updating CFN to ARN map. Added some logic to specify particular attributes when generating customized ARNs.
1 parent b92a529 commit f4183b6

File tree

4 files changed

+306
-19
lines changed

4 files changed

+306
-19
lines changed

cfn_policy_validator/parsers/utils/arn_generator.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,30 @@ def __init__(self, account_config):
3131

3232
# some ARN generation requires custom logic (e.g. an ELB can have 2 different ARNs depending on the ELB type)
3333
self.custom_generators = {
34-
'AWS::ElasticLoadBalancingV2::LoadBalancer': generate_elbv2_load_balancer_arn,
35-
'AWS::ElasticLoadBalancingV2::Listener': generate_elbv2_listener_arn,
36-
'AWS::ElasticLoadBalancingV2::TargetGroup': generate_elbv2_target_group_arn,
37-
'AWS::IAM::Role': generate_role_arn,
38-
'AWS::IAM::User': generate_user_arn,
39-
'AWS::IAM::ManagedPolicy': generate_managed_policy_arn,
40-
'AWS::NetworkFirewall::RuleGroup': generate_network_firewall_rule_group
34+
'AWS::ElasticLoadBalancingV2::LoadBalancer': {
35+
'Ref': generate_elbv2_load_balancer_arn,
36+
'LoadBalancerArn': generate_elbv2_load_balancer_arn
37+
},
38+
'AWS::ElasticLoadBalancingV2::Listener': {
39+
'Ref': generate_elbv2_listener_arn
40+
},
41+
'AWS::ElasticLoadBalancingV2::TargetGroup': {
42+
'LoadBalancerArns': generate_elbv2_target_group_load_balancer_arn
43+
},
44+
'AWS::IAM::Role': {
45+
'Arn': generate_role_arn
46+
},
47+
'AWS::IAM::User': {
48+
'Arn': generate_user_arn
49+
},
50+
'AWS::IAM::ManagedPolicy': {
51+
'Ref': generate_managed_policy_arn,
52+
'PolicyArn': generate_managed_policy_arn
53+
},
54+
'AWS::NetworkFirewall::RuleGroup': {
55+
'Ref': generate_network_firewall_rule_group,
56+
'RuleGroupArn': generate_network_firewall_rule_group
57+
}
4158
}
4259

4360
def try_generate_arn(self, resource_name, resource, attribute_or_ref, visited_values=None):
@@ -74,7 +91,7 @@ def try_generate_arn(self, resource_name, resource, attribute_or_ref, visited_va
7491
# certain CFN types require some additional generation that is specific to the resource type
7592
# for example, we include the exact path with any roles or users, ALBs and NLBs share the same cfn resource,
7693
# but have different ARNs
77-
custom_generator = self.custom_generators.get(cfn_type)
94+
custom_generator = self.custom_generators.get(cfn_type, {}).get(attribute_or_ref)
7895
if custom_generator is not None:
7996
arn_pattern = custom_generator(arn_pattern, resource_name, resource, visited_values)
8097

@@ -168,7 +185,7 @@ def generate_elbv2_listener_arn(arn_pattern, _, resource, visited_values):
168185

169186

170187
# AWS::ElasticLoadBalancingV2::TargetGroup
171-
def generate_elbv2_target_group_arn(arn_pattern, _, resource, visited_values):
188+
def generate_elbv2_target_group_load_balancer_arn(arn_pattern, _, resource, visited_values):
172189
evaluated_resource = resource.eval(elbv2_target_group_schema, visited_values)
173190

174191
properties = evaluated_resource.get('Properties', {})

0 commit comments

Comments
 (0)