cartography 0.102.0rc1__py3-none-any.whl → 0.103.0rc1__py3-none-any.whl

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.

Potentially problematic release.


This version of cartography might be problematic. Click here for more details.

Files changed (251) hide show
  1. cartography/__main__.py +1 -2
  2. cartography/_version.py +2 -2
  3. cartography/cli.py +302 -253
  4. cartography/client/core/tx.py +39 -18
  5. cartography/config.py +4 -0
  6. cartography/driftdetect/__main__.py +1 -2
  7. cartography/driftdetect/add_shortcut.py +10 -2
  8. cartography/driftdetect/cli.py +71 -75
  9. cartography/driftdetect/detect_deviations.py +7 -3
  10. cartography/driftdetect/get_states.py +20 -8
  11. cartography/driftdetect/model.py +5 -5
  12. cartography/driftdetect/serializers.py +8 -6
  13. cartography/driftdetect/storage.py +2 -2
  14. cartography/graph/cleanupbuilder.py +35 -15
  15. cartography/graph/job.py +46 -17
  16. cartography/graph/querybuilder.py +165 -80
  17. cartography/graph/statement.py +35 -26
  18. cartography/intel/analysis.py +4 -1
  19. cartography/intel/aws/__init__.py +114 -55
  20. cartography/intel/aws/apigateway.py +134 -63
  21. cartography/intel/aws/cloudtrail.py +127 -0
  22. cartography/intel/aws/config.py +56 -20
  23. cartography/intel/aws/dynamodb.py +108 -40
  24. cartography/intel/aws/ec2/__init__.py +2 -2
  25. cartography/intel/aws/ec2/auto_scaling_groups.py +181 -78
  26. cartography/intel/aws/ec2/elastic_ip_addresses.py +41 -13
  27. cartography/intel/aws/ec2/images.py +49 -20
  28. cartography/intel/aws/ec2/instances.py +234 -136
  29. cartography/intel/aws/ec2/internet_gateways.py +40 -11
  30. cartography/intel/aws/ec2/key_pairs.py +44 -20
  31. cartography/intel/aws/ec2/launch_templates.py +101 -59
  32. cartography/intel/aws/ec2/load_balancer_v2s.py +104 -39
  33. cartography/intel/aws/ec2/load_balancers.py +82 -42
  34. cartography/intel/aws/ec2/network_acls.py +89 -65
  35. cartography/intel/aws/ec2/network_interfaces.py +146 -87
  36. cartography/intel/aws/ec2/reserved_instances.py +45 -16
  37. cartography/intel/aws/ec2/route_tables.py +327 -0
  38. cartography/intel/aws/ec2/security_groups.py +71 -21
  39. cartography/intel/aws/ec2/snapshots.py +61 -22
  40. cartography/intel/aws/ec2/subnets.py +54 -18
  41. cartography/intel/aws/ec2/tgw.py +100 -34
  42. cartography/intel/aws/ec2/util.py +1 -1
  43. cartography/intel/aws/ec2/volumes.py +69 -41
  44. cartography/intel/aws/ec2/vpc.py +37 -12
  45. cartography/intel/aws/ec2/vpc_peerings.py +83 -24
  46. cartography/intel/aws/ecr.py +88 -32
  47. cartography/intel/aws/ecs.py +83 -47
  48. cartography/intel/aws/eks.py +55 -29
  49. cartography/intel/aws/elasticache.py +42 -18
  50. cartography/intel/aws/elasticsearch.py +57 -20
  51. cartography/intel/aws/emr.py +61 -23
  52. cartography/intel/aws/iam.py +401 -145
  53. cartography/intel/aws/iam_instance_profiles.py +22 -22
  54. cartography/intel/aws/identitycenter.py +71 -37
  55. cartography/intel/aws/inspector.py +159 -89
  56. cartography/intel/aws/kms.py +92 -38
  57. cartography/intel/aws/lambda_function.py +103 -34
  58. cartography/intel/aws/organizations.py +30 -10
  59. cartography/intel/aws/permission_relationships.py +133 -51
  60. cartography/intel/aws/rds.py +249 -85
  61. cartography/intel/aws/redshift.py +107 -46
  62. cartography/intel/aws/resourcegroupstaggingapi.py +120 -66
  63. cartography/intel/aws/resources.py +53 -44
  64. cartography/intel/aws/route53.py +108 -61
  65. cartography/intel/aws/s3.py +168 -83
  66. cartography/intel/aws/s3accountpublicaccessblock.py +157 -0
  67. cartography/intel/aws/secretsmanager.py +24 -12
  68. cartography/intel/aws/securityhub.py +20 -9
  69. cartography/intel/aws/sns.py +166 -0
  70. cartography/intel/aws/sqs.py +60 -28
  71. cartography/intel/aws/ssm.py +70 -30
  72. cartography/intel/aws/util/arns.py +7 -7
  73. cartography/intel/aws/util/common.py +31 -4
  74. cartography/intel/azure/__init__.py +78 -19
  75. cartography/intel/azure/compute.py +101 -27
  76. cartography/intel/azure/cosmosdb.py +496 -170
  77. cartography/intel/azure/sql.py +296 -105
  78. cartography/intel/azure/storage.py +322 -113
  79. cartography/intel/azure/subscription.py +39 -23
  80. cartography/intel/azure/tenant.py +13 -4
  81. cartography/intel/azure/util/credentials.py +95 -55
  82. cartography/intel/bigfix/__init__.py +2 -2
  83. cartography/intel/bigfix/computers.py +93 -65
  84. cartography/intel/create_indexes.py +3 -2
  85. cartography/intel/crowdstrike/__init__.py +11 -9
  86. cartography/intel/crowdstrike/endpoints.py +5 -1
  87. cartography/intel/crowdstrike/spotlight.py +8 -3
  88. cartography/intel/cve/__init__.py +46 -13
  89. cartography/intel/cve/feed.py +48 -12
  90. cartography/intel/digitalocean/__init__.py +22 -13
  91. cartography/intel/digitalocean/compute.py +75 -108
  92. cartography/intel/digitalocean/management.py +44 -80
  93. cartography/intel/digitalocean/platform.py +48 -43
  94. cartography/intel/dns.py +36 -10
  95. cartography/intel/duo/__init__.py +21 -16
  96. cartography/intel/duo/api_host.py +14 -9
  97. cartography/intel/duo/endpoints.py +50 -45
  98. cartography/intel/duo/groups.py +18 -14
  99. cartography/intel/duo/phones.py +37 -34
  100. cartography/intel/duo/tokens.py +26 -23
  101. cartography/intel/duo/users.py +54 -50
  102. cartography/intel/duo/web_authn_credentials.py +30 -25
  103. cartography/intel/entra/__init__.py +25 -7
  104. cartography/intel/entra/ou.py +112 -0
  105. cartography/intel/entra/users.py +69 -63
  106. cartography/intel/gcp/__init__.py +185 -49
  107. cartography/intel/gcp/compute.py +418 -231
  108. cartography/intel/gcp/crm.py +96 -43
  109. cartography/intel/gcp/dns.py +60 -19
  110. cartography/intel/gcp/gke.py +72 -38
  111. cartography/intel/gcp/iam.py +61 -41
  112. cartography/intel/gcp/storage.py +84 -55
  113. cartography/intel/github/__init__.py +13 -11
  114. cartography/intel/github/repos.py +270 -137
  115. cartography/intel/github/teams.py +170 -88
  116. cartography/intel/github/users.py +70 -39
  117. cartography/intel/github/util.py +36 -34
  118. cartography/intel/gsuite/__init__.py +47 -26
  119. cartography/intel/gsuite/api.py +73 -30
  120. cartography/intel/jamf/__init__.py +19 -1
  121. cartography/intel/jamf/computers.py +30 -7
  122. cartography/intel/jamf/util.py +7 -2
  123. cartography/intel/kandji/__init__.py +6 -3
  124. cartography/intel/kandji/devices.py +14 -8
  125. cartography/intel/kubernetes/namespaces.py +7 -4
  126. cartography/intel/kubernetes/pods.py +7 -4
  127. cartography/intel/kubernetes/services.py +8 -4
  128. cartography/intel/lastpass/__init__.py +2 -2
  129. cartography/intel/lastpass/users.py +23 -12
  130. cartography/intel/oci/__init__.py +44 -11
  131. cartography/intel/oci/iam.py +134 -38
  132. cartography/intel/oci/organizations.py +13 -6
  133. cartography/intel/oci/utils.py +43 -20
  134. cartography/intel/okta/__init__.py +66 -15
  135. cartography/intel/okta/applications.py +42 -20
  136. cartography/intel/okta/awssaml.py +93 -33
  137. cartography/intel/okta/factors.py +16 -4
  138. cartography/intel/okta/groups.py +56 -29
  139. cartography/intel/okta/organization.py +5 -1
  140. cartography/intel/okta/origins.py +6 -2
  141. cartography/intel/okta/roles.py +15 -5
  142. cartography/intel/okta/users.py +20 -8
  143. cartography/intel/okta/utils.py +6 -4
  144. cartography/intel/pagerduty/__init__.py +8 -7
  145. cartography/intel/pagerduty/escalation_policies.py +18 -6
  146. cartography/intel/pagerduty/schedules.py +12 -4
  147. cartography/intel/pagerduty/services.py +11 -4
  148. cartography/intel/pagerduty/teams.py +8 -3
  149. cartography/intel/pagerduty/users.py +3 -1
  150. cartography/intel/pagerduty/vendors.py +3 -1
  151. cartography/intel/semgrep/__init__.py +24 -6
  152. cartography/intel/semgrep/dependencies.py +50 -28
  153. cartography/intel/semgrep/deployment.py +3 -1
  154. cartography/intel/semgrep/findings.py +42 -18
  155. cartography/intel/snipeit/__init__.py +17 -3
  156. cartography/intel/snipeit/asset.py +12 -6
  157. cartography/intel/snipeit/user.py +8 -5
  158. cartography/intel/snipeit/util.py +9 -4
  159. cartography/models/aws/apigateway.py +21 -17
  160. cartography/models/aws/apigatewaycertificate.py +28 -22
  161. cartography/models/aws/apigatewayresource.py +28 -20
  162. cartography/models/aws/apigatewaystage.py +33 -25
  163. cartography/models/aws/cloudtrail/__init__.py +0 -0
  164. cartography/models/aws/cloudtrail/trail.py +61 -0
  165. cartography/models/aws/dynamodb/gsi.py +30 -22
  166. cartography/models/aws/dynamodb/tables.py +25 -17
  167. cartography/models/aws/ec2/auto_scaling_groups.py +102 -82
  168. cartography/models/aws/ec2/images.py +36 -34
  169. cartography/models/aws/ec2/instances.py +51 -45
  170. cartography/models/aws/ec2/keypair.py +21 -16
  171. cartography/models/aws/ec2/keypair_instance.py +28 -21
  172. cartography/models/aws/ec2/launch_configurations.py +30 -26
  173. cartography/models/aws/ec2/launch_template_versions.py +48 -38
  174. cartography/models/aws/ec2/launch_templates.py +21 -17
  175. cartography/models/aws/ec2/load_balancer_listeners.py +27 -23
  176. cartography/models/aws/ec2/load_balancers.py +47 -37
  177. cartography/models/aws/ec2/network_acl_rules.py +38 -30
  178. cartography/models/aws/ec2/network_acls.py +38 -29
  179. cartography/models/aws/ec2/networkinterface_instance.py +52 -39
  180. cartography/models/aws/ec2/networkinterfaces.py +53 -37
  181. cartography/models/aws/ec2/privateip_networkinterface.py +32 -22
  182. cartography/models/aws/ec2/reservations.py +18 -14
  183. cartography/models/aws/ec2/route_table_associations.py +97 -0
  184. cartography/models/aws/ec2/route_tables.py +128 -0
  185. cartography/models/aws/ec2/routes.py +85 -0
  186. cartography/models/aws/ec2/securitygroup_instance.py +29 -20
  187. cartography/models/aws/ec2/securitygroup_networkinterface.py +24 -15
  188. cartography/models/aws/ec2/subnet_instance.py +24 -19
  189. cartography/models/aws/ec2/subnet_networkinterface.py +40 -31
  190. cartography/models/aws/ec2/volumes.py +47 -40
  191. cartography/models/aws/eks/clusters.py +23 -21
  192. cartography/models/aws/emr.py +32 -30
  193. cartography/models/aws/iam/instanceprofile.py +33 -24
  194. cartography/models/aws/identitycenter/awsidentitycenter.py +18 -14
  195. cartography/models/aws/identitycenter/awspermissionset.py +37 -29
  196. cartography/models/aws/identitycenter/awsssouser.py +23 -21
  197. cartography/models/aws/inspector/findings.py +77 -65
  198. cartography/models/aws/inspector/packages.py +35 -29
  199. cartography/models/aws/s3/__init__.py +0 -0
  200. cartography/models/aws/s3/account_public_access_block.py +51 -0
  201. cartography/models/aws/sns/__init__.py +0 -0
  202. cartography/models/aws/sns/topic.py +50 -0
  203. cartography/models/aws/ssm/instance_information.py +51 -39
  204. cartography/models/aws/ssm/instance_patch.py +32 -26
  205. cartography/models/bigfix/bigfix_computer.py +42 -38
  206. cartography/models/bigfix/bigfix_root.py +3 -3
  207. cartography/models/core/common.py +12 -10
  208. cartography/models/core/nodes.py +5 -2
  209. cartography/models/core/relationships.py +14 -6
  210. cartography/models/crowdstrike/hosts.py +37 -35
  211. cartography/models/cve/cve.py +34 -32
  212. cartography/models/cve/cve_feed.py +6 -6
  213. cartography/models/digitalocean/__init__.py +0 -0
  214. cartography/models/digitalocean/account.py +21 -0
  215. cartography/models/digitalocean/droplet.py +56 -0
  216. cartography/models/digitalocean/project.py +48 -0
  217. cartography/models/duo/api_host.py +3 -3
  218. cartography/models/duo/endpoint.py +43 -41
  219. cartography/models/duo/group.py +14 -14
  220. cartography/models/duo/phone.py +27 -27
  221. cartography/models/duo/token.py +16 -16
  222. cartography/models/duo/user.py +46 -44
  223. cartography/models/duo/web_authn_credential.py +27 -19
  224. cartography/models/entra/ou.py +48 -0
  225. cartography/models/entra/tenant.py +24 -18
  226. cartography/models/entra/user.py +64 -48
  227. cartography/models/gcp/iam.py +23 -23
  228. cartography/models/github/orgs.py +5 -4
  229. cartography/models/github/teams.py +37 -31
  230. cartography/models/github/users.py +34 -23
  231. cartography/models/kandji/device.py +22 -16
  232. cartography/models/kandji/tenant.py +6 -4
  233. cartography/models/lastpass/tenant.py +3 -3
  234. cartography/models/lastpass/user.py +32 -28
  235. cartography/models/semgrep/dependencies.py +36 -24
  236. cartography/models/semgrep/deployment.py +5 -5
  237. cartography/models/semgrep/findings.py +58 -42
  238. cartography/models/semgrep/locations.py +27 -21
  239. cartography/models/snipeit/asset.py +30 -21
  240. cartography/models/snipeit/tenant.py +6 -4
  241. cartography/models/snipeit/user.py +19 -12
  242. cartography/stats.py +3 -3
  243. cartography/sync.py +107 -31
  244. cartography/util.py +84 -62
  245. {cartography-0.102.0rc1.dist-info → cartography-0.103.0rc1.dist-info}/METADATA +3 -14
  246. cartography-0.103.0rc1.dist-info/RECORD +396 -0
  247. {cartography-0.102.0rc1.dist-info → cartography-0.103.0rc1.dist-info}/WHEEL +1 -1
  248. cartography-0.102.0rc1.dist-info/RECORD +0 -377
  249. {cartography-0.102.0rc1.dist-info → cartography-0.103.0rc1.dist-info}/entry_points.txt +0 -0
  250. {cartography-0.102.0rc1.dist-info → cartography-0.103.0rc1.dist-info}/licenses/LICENSE +0 -0
  251. {cartography-0.102.0rc1.dist-info → cartography-0.103.0rc1.dist-info}/top_level.txt +0 -0
@@ -13,90 +13,100 @@ from cartography.models.core.relationships import TargetNodeMatcher
13
13
 
14
14
  @dataclass(frozen=True)
15
15
  class LoadBalancerNodeProperties(CartographyNodeProperties):
16
- id: PropertyRef = PropertyRef('id')
17
- name: PropertyRef = PropertyRef('name')
18
- dnsname: PropertyRef = PropertyRef('dnsname', extra_index=True)
19
- canonicalhostedzonename: PropertyRef = PropertyRef('canonicalhostedzonename')
20
- canonicalhostedzonenameid: PropertyRef = PropertyRef('canonicalhostedzonenameid')
21
- scheme: PropertyRef = PropertyRef('scheme')
22
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
23
- createdtime: PropertyRef = PropertyRef('createdtime')
24
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
16
+ id: PropertyRef = PropertyRef("id")
17
+ name: PropertyRef = PropertyRef("name")
18
+ dnsname: PropertyRef = PropertyRef("dnsname", extra_index=True)
19
+ canonicalhostedzonename: PropertyRef = PropertyRef("canonicalhostedzonename")
20
+ canonicalhostedzonenameid: PropertyRef = PropertyRef("canonicalhostedzonenameid")
21
+ scheme: PropertyRef = PropertyRef("scheme")
22
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
23
+ createdtime: PropertyRef = PropertyRef("createdtime")
24
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
25
25
 
26
26
 
27
27
  @dataclass(frozen=True)
28
- class LoadBalancerToAWSAccountRelProperties(CartographyRelProperties):
29
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
28
+ class LoadBalancerToAWSAccountRelRelProperties(CartographyRelProperties):
29
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
30
30
 
31
31
 
32
32
  @dataclass(frozen=True)
33
- class LoadBalancerToAWSAccount(CartographyRelSchema):
34
- target_node_label: str = 'AWSAccount'
33
+ class LoadBalancerToAWSAccountRel(CartographyRelSchema):
34
+ target_node_label: str = "AWSAccount"
35
35
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
36
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
36
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
37
37
  )
38
38
  direction: LinkDirection = LinkDirection.INWARD
39
39
  rel_label: str = "RESOURCE"
40
- properties: LoadBalancerToAWSAccountRelProperties = LoadBalancerToAWSAccountRelProperties()
40
+ properties: LoadBalancerToAWSAccountRelRelProperties = (
41
+ LoadBalancerToAWSAccountRelRelProperties()
42
+ )
41
43
 
42
44
 
43
45
  @dataclass(frozen=True)
44
46
  class LoadBalancerToSecurityGroupRelProperties(CartographyRelProperties):
45
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
47
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
46
48
 
47
49
 
48
50
  @dataclass(frozen=True)
49
- class LoadBalancerToSourceSecurityGroup(CartographyRelSchema):
50
- target_node_label: str = 'EC2SecurityGroup'
51
+ class LoadBalancerToSourceSecurityGroupRel(CartographyRelSchema):
52
+ target_node_label: str = "EC2SecurityGroup"
51
53
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
52
- {'name': PropertyRef('GROUP_NAME')},
54
+ {"name": PropertyRef("GROUP_NAME")},
53
55
  )
54
56
  direction: LinkDirection = LinkDirection.OUTWARD
55
57
  rel_label: str = "SOURCE_SECURITY_GROUP"
56
- properties: LoadBalancerToSecurityGroupRelProperties = LoadBalancerToSecurityGroupRelProperties()
58
+ properties: LoadBalancerToSecurityGroupRelProperties = (
59
+ LoadBalancerToSecurityGroupRelProperties()
60
+ )
57
61
 
58
62
 
59
63
  @dataclass(frozen=True)
60
- class LoadBalancerToEC2SecurityGroupRelProperties(CartographyRelProperties):
61
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
64
+ class LoadBalancerToEC2SecurityGroupRelRelProperties(CartographyRelProperties):
65
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
62
66
 
63
67
 
64
68
  @dataclass(frozen=True)
65
- class LoadBalancerToEC2SecurityGroup(CartographyRelSchema):
66
- target_node_label: str = 'EC2SecurityGroup'
69
+ class LoadBalancerToEC2SecurityGroupRel(CartographyRelSchema):
70
+ target_node_label: str = "EC2SecurityGroup"
67
71
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
68
- {'groupid': PropertyRef('GROUP_IDS', one_to_many=True)},
72
+ {"groupid": PropertyRef("GROUP_IDS", one_to_many=True)},
69
73
  )
70
74
  direction: LinkDirection = LinkDirection.OUTWARD
71
75
  rel_label: str = "MEMBER_OF_EC2_SECURITY_GROUP"
72
- properties: LoadBalancerToEC2SecurityGroupRelProperties = LoadBalancerToEC2SecurityGroupRelProperties()
76
+ properties: LoadBalancerToEC2SecurityGroupRelRelProperties = (
77
+ LoadBalancerToEC2SecurityGroupRelRelProperties()
78
+ )
73
79
 
74
80
 
75
81
  @dataclass(frozen=True)
76
- class LoadBalancerToEC2InstanceRelProperties(CartographyRelProperties):
77
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
82
+ class LoadBalancerToEC2InstanceRelRelProperties(CartographyRelProperties):
83
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
78
84
 
79
85
 
80
86
  @dataclass(frozen=True)
81
- class LoadBalancerToEC2Instance(CartographyRelSchema):
82
- target_node_label: str = 'EC2Instance'
87
+ class LoadBalancerToEC2InstanceRel(CartographyRelSchema):
88
+ target_node_label: str = "EC2Instance"
83
89
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
84
- {'instanceid': PropertyRef('INSTANCE_IDS', one_to_many=True)},
90
+ {"instanceid": PropertyRef("INSTANCE_IDS", one_to_many=True)},
85
91
  )
86
92
  direction: LinkDirection = LinkDirection.OUTWARD
87
93
  rel_label: str = "EXPOSE"
88
- properties: LoadBalancerToEC2InstanceRelProperties = LoadBalancerToEC2InstanceRelProperties()
94
+ properties: LoadBalancerToEC2InstanceRelRelProperties = (
95
+ LoadBalancerToEC2InstanceRelRelProperties()
96
+ )
89
97
 
90
98
 
91
99
  @dataclass(frozen=True)
92
100
  class LoadBalancerSchema(CartographyNodeSchema):
93
- label: str = 'LoadBalancer'
101
+ label: str = "LoadBalancer"
94
102
  properties: LoadBalancerNodeProperties = LoadBalancerNodeProperties()
95
- sub_resource_relationship: LoadBalancerToAWSAccount = LoadBalancerToAWSAccount()
103
+ sub_resource_relationship: LoadBalancerToAWSAccountRel = (
104
+ LoadBalancerToAWSAccountRel()
105
+ )
96
106
  other_relationships: OtherRelationships = OtherRelationships(
97
107
  [
98
- LoadBalancerToSourceSecurityGroup(),
99
- LoadBalancerToEC2SecurityGroup(),
100
- LoadBalancerToEC2Instance(),
108
+ LoadBalancerToSourceSecurityGroupRel(),
109
+ LoadBalancerToEC2SecurityGroupRel(),
110
+ LoadBalancerToEC2InstanceRel(),
101
111
  ],
102
112
  )
@@ -14,30 +14,30 @@ from cartography.models.core.relationships import TargetNodeMatcher
14
14
 
15
15
  @dataclass(frozen=True)
16
16
  class EC2NetworkAclRuleNodeProperties(CartographyNodeProperties):
17
- id: PropertyRef = PropertyRef('Id')
18
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
19
- network_acl_id: PropertyRef = PropertyRef('NetworkAclId')
20
- protocol: PropertyRef = PropertyRef('Protocol')
21
- fromport: PropertyRef = PropertyRef('FromPort')
22
- toport: PropertyRef = PropertyRef('ToPort')
23
- cidrblock: PropertyRef = PropertyRef('CidrBlock')
24
- ipv6cidrblock: PropertyRef = PropertyRef('Ipv6CidrBlock')
25
- egress: PropertyRef = PropertyRef('Egress')
26
- rulenumber: PropertyRef = PropertyRef('RuleNumber')
27
- ruleaction: PropertyRef = PropertyRef('RuleAction')
28
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
17
+ id: PropertyRef = PropertyRef("Id")
18
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
19
+ network_acl_id: PropertyRef = PropertyRef("NetworkAclId")
20
+ protocol: PropertyRef = PropertyRef("Protocol")
21
+ fromport: PropertyRef = PropertyRef("FromPort")
22
+ toport: PropertyRef = PropertyRef("ToPort")
23
+ cidrblock: PropertyRef = PropertyRef("CidrBlock")
24
+ ipv6cidrblock: PropertyRef = PropertyRef("Ipv6CidrBlock")
25
+ egress: PropertyRef = PropertyRef("Egress")
26
+ rulenumber: PropertyRef = PropertyRef("RuleNumber")
27
+ ruleaction: PropertyRef = PropertyRef("RuleAction")
28
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
29
29
 
30
30
 
31
31
  @dataclass(frozen=True)
32
32
  class EC2NetworkAclRuleAclRelProperties(CartographyRelProperties):
33
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
33
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
34
34
 
35
35
 
36
36
  @dataclass(frozen=True)
37
- class EC2NetworkAclRuleToAcl(CartographyRelSchema):
38
- target_node_label: str = 'EC2NetworkAcl'
37
+ class EC2NetworkAclRuleToAclRel(CartographyRelSchema):
38
+ target_node_label: str = "EC2NetworkAcl"
39
39
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
40
- {'network_acl_id': PropertyRef('NetworkAclId')},
40
+ {"network_acl_id": PropertyRef("NetworkAclId")},
41
41
  )
42
42
  direction: LinkDirection = LinkDirection.OUTWARD
43
43
  rel_label: str = "MEMBER_OF_NACL"
@@ -45,19 +45,21 @@ class EC2NetworkAclRuleToAcl(CartographyRelSchema):
45
45
 
46
46
 
47
47
  @dataclass(frozen=True)
48
- class EC2NetworkAclRuleToAwsAccountRelProperties(CartographyRelProperties):
49
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
48
+ class EC2NetworkAclRuleToAWSAccountRelRelProperties(CartographyRelProperties):
49
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
50
50
 
51
51
 
52
52
  @dataclass(frozen=True)
53
- class EC2NetworkAclRuleToAWSAccount(CartographyRelSchema):
54
- target_node_label: str = 'AWSAccount'
53
+ class EC2NetworkAclRuleToAWSAccountRel(CartographyRelSchema):
54
+ target_node_label: str = "AWSAccount"
55
55
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
56
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
56
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
57
57
  )
58
58
  direction: LinkDirection = LinkDirection.INWARD
59
59
  rel_label: str = "RESOURCE"
60
- properties: EC2NetworkAclRuleToAwsAccountRelProperties = EC2NetworkAclRuleToAwsAccountRelProperties()
60
+ properties: EC2NetworkAclRuleToAWSAccountRelRelProperties = (
61
+ EC2NetworkAclRuleToAWSAccountRelRelProperties()
62
+ )
61
63
 
62
64
 
63
65
  @dataclass(frozen=True)
@@ -65,15 +67,18 @@ class EC2NetworkAclInboundRuleSchema(CartographyNodeSchema):
65
67
  """
66
68
  Network interface as known by describe-network-interfaces.
67
69
  """
68
- label: str = 'EC2NetworkAclRule'
70
+
71
+ label: str = "EC2NetworkAclRule"
69
72
  extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(
70
- ['IpPermissionInbound'],
73
+ ["IpPermissionInbound"],
71
74
  )
72
75
  properties: EC2NetworkAclRuleNodeProperties = EC2NetworkAclRuleNodeProperties()
73
- sub_resource_relationship: EC2NetworkAclRuleToAWSAccount = EC2NetworkAclRuleToAWSAccount()
76
+ sub_resource_relationship: EC2NetworkAclRuleToAWSAccountRel = (
77
+ EC2NetworkAclRuleToAWSAccountRel()
78
+ )
74
79
  other_relationships: OtherRelationships = OtherRelationships(
75
80
  [
76
- EC2NetworkAclRuleToAcl(),
81
+ EC2NetworkAclRuleToAclRel(),
77
82
  ],
78
83
  )
79
84
 
@@ -83,16 +88,19 @@ class EC2NetworkAclEgressRuleSchema(CartographyNodeSchema):
83
88
  """
84
89
  Network interface as known by describe-network-interfaces.
85
90
  """
86
- label: str = 'EC2NetworkAclRule'
91
+
92
+ label: str = "EC2NetworkAclRule"
87
93
  extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(
88
94
  [
89
- 'IpPermissionEgress',
95
+ "IpPermissionEgress",
90
96
  ],
91
97
  )
92
98
  properties: EC2NetworkAclRuleNodeProperties = EC2NetworkAclRuleNodeProperties()
93
- sub_resource_relationship: EC2NetworkAclRuleToAWSAccount = EC2NetworkAclRuleToAWSAccount()
99
+ sub_resource_relationship: EC2NetworkAclRuleToAWSAccountRel = (
100
+ EC2NetworkAclRuleToAWSAccountRel()
101
+ )
94
102
  other_relationships: OtherRelationships = OtherRelationships(
95
103
  [
96
- EC2NetworkAclRuleToAcl(),
104
+ EC2NetworkAclRuleToAclRel(),
97
105
  ],
98
106
  )
@@ -13,61 +13,67 @@ from cartography.models.core.relationships import TargetNodeMatcher
13
13
 
14
14
  @dataclass(frozen=True)
15
15
  class EC2NetworkAclNodeProperties(CartographyNodeProperties):
16
- id: PropertyRef = PropertyRef('Arn')
17
- arn: PropertyRef = PropertyRef('Arn')
18
- network_acl_id: PropertyRef = PropertyRef('Id')
19
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
20
- is_default: PropertyRef = PropertyRef('IsDefault')
21
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
22
- vpc_id: PropertyRef = PropertyRef('VpcId')
16
+ id: PropertyRef = PropertyRef("Arn")
17
+ arn: PropertyRef = PropertyRef("Arn")
18
+ network_acl_id: PropertyRef = PropertyRef("Id")
19
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
20
+ is_default: PropertyRef = PropertyRef("IsDefault")
21
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
22
+ vpc_id: PropertyRef = PropertyRef("VpcId")
23
23
 
24
24
 
25
25
  @dataclass(frozen=True)
26
- class EC2NetworkAclToVpcRelProperties(CartographyRelProperties):
27
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
26
+ class EC2NetworkAclToVpcRelRelProperties(CartographyRelProperties):
27
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
28
28
 
29
29
 
30
30
  @dataclass(frozen=True)
31
- class EC2NetworkAclToVpc(CartographyRelSchema):
32
- target_node_label: str = 'AWSVpc'
31
+ class EC2NetworkAclToVpcRel(CartographyRelSchema):
32
+ target_node_label: str = "AWSVpc"
33
33
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
34
- {'vpcid': PropertyRef('VpcId')},
34
+ {"vpcid": PropertyRef("VpcId")},
35
35
  )
36
36
  direction: LinkDirection = LinkDirection.OUTWARD
37
37
  rel_label: str = "MEMBER_OF_AWS_VPC"
38
- properties: EC2NetworkAclToVpcRelProperties = EC2NetworkAclToVpcRelProperties()
38
+ properties: EC2NetworkAclToVpcRelRelProperties = (
39
+ EC2NetworkAclToVpcRelRelProperties()
40
+ )
39
41
 
40
42
 
41
43
  @dataclass(frozen=True)
42
- class EC2NetworkAclToSubnetRelProperties(CartographyRelProperties):
43
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
44
+ class EC2NetworkAclToSubnetRelRelProperties(CartographyRelProperties):
45
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
44
46
 
45
47
 
46
48
  @dataclass(frozen=True)
47
- class EC2NetworkAclToSubnet(CartographyRelSchema):
48
- target_node_label: str = 'EC2Subnet'
49
+ class EC2NetworkAclToSubnetRel(CartographyRelSchema):
50
+ target_node_label: str = "EC2Subnet"
49
51
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
50
- {'subnetid': PropertyRef('SubnetId')},
52
+ {"subnetid": PropertyRef("SubnetId")},
51
53
  )
52
54
  direction: LinkDirection = LinkDirection.OUTWARD
53
55
  rel_label: str = "PART_OF_SUBNET"
54
- properties: EC2NetworkAclToSubnetRelProperties = EC2NetworkAclToSubnetRelProperties()
56
+ properties: EC2NetworkAclToSubnetRelRelProperties = (
57
+ EC2NetworkAclToSubnetRelRelProperties()
58
+ )
55
59
 
56
60
 
57
61
  @dataclass(frozen=True)
58
- class EC2NetworkAclToAwsAccountRelProperties(CartographyRelProperties):
59
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
62
+ class EC2NetworkAclToAWSAccountRelRelProperties(CartographyRelProperties):
63
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
60
64
 
61
65
 
62
66
  @dataclass(frozen=True)
63
- class EC2NetworkAclToAWSAccount(CartographyRelSchema):
64
- target_node_label: str = 'AWSAccount'
67
+ class EC2NetworkAclToAWSAccountRel(CartographyRelSchema):
68
+ target_node_label: str = "AWSAccount"
65
69
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
66
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
70
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
67
71
  )
68
72
  direction: LinkDirection = LinkDirection.INWARD
69
73
  rel_label: str = "RESOURCE"
70
- properties: EC2NetworkAclToAwsAccountRelProperties = EC2NetworkAclToAwsAccountRelProperties()
74
+ properties: EC2NetworkAclToAWSAccountRelRelProperties = (
75
+ EC2NetworkAclToAWSAccountRelRelProperties()
76
+ )
71
77
 
72
78
 
73
79
  @dataclass(frozen=True)
@@ -75,12 +81,15 @@ class EC2NetworkAclSchema(CartographyNodeSchema):
75
81
  """
76
82
  Network interface as known by describe-network-interfaces.
77
83
  """
78
- label: str = 'EC2NetworkAcl'
84
+
85
+ label: str = "EC2NetworkAcl"
79
86
  properties: EC2NetworkAclNodeProperties = EC2NetworkAclNodeProperties()
80
- sub_resource_relationship: EC2NetworkAclToAWSAccount = EC2NetworkAclToAWSAccount()
87
+ sub_resource_relationship: EC2NetworkAclToAWSAccountRel = (
88
+ EC2NetworkAclToAWSAccountRel()
89
+ )
81
90
  other_relationships: OtherRelationships = OtherRelationships(
82
91
  [
83
- EC2NetworkAclToVpc(),
84
- EC2NetworkAclToSubnet(),
92
+ EC2NetworkAclToVpcRel(),
93
+ EC2NetworkAclToSubnetRel(),
85
94
  ],
86
95
  )
@@ -16,80 +16,88 @@ class EC2NetworkInterfaceInstanceNodeProperties(CartographyNodeProperties):
16
16
  """
17
17
  Selection of properties of a network interface as known by an EC2 instance
18
18
  """
19
+
19
20
  # arn: PropertyRef = PropertyRef('Arn', extra_index=True) TODO use arn; issue #1024
20
- id: PropertyRef = PropertyRef('NetworkInterfaceId')
21
- status: PropertyRef = PropertyRef('Status')
22
- mac_address: PropertyRef = PropertyRef('MacAddress', extra_index=True)
23
- description: PropertyRef = PropertyRef('Description')
24
- private_dns_name: PropertyRef = PropertyRef('PrivateDnsName', extra_index=True)
25
- private_ip_address: PropertyRef = PropertyRef('PrivateIpAddress', extra_index=True)
26
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
27
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
21
+ id: PropertyRef = PropertyRef("NetworkInterfaceId")
22
+ status: PropertyRef = PropertyRef("Status")
23
+ mac_address: PropertyRef = PropertyRef("MacAddress", extra_index=True)
24
+ description: PropertyRef = PropertyRef("Description")
25
+ private_dns_name: PropertyRef = PropertyRef("PrivateDnsName", extra_index=True)
26
+ private_ip_address: PropertyRef = PropertyRef("PrivateIpAddress", extra_index=True)
27
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
28
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
28
29
 
29
30
 
30
31
  @dataclass(frozen=True)
31
- class EC2NetworkInterfaceToAwsAccountRelProperties(CartographyRelProperties):
32
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
32
+ class EC2NetworkInterfaceToAWSAccountRelProperties(CartographyRelProperties):
33
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
33
34
 
34
35
 
35
36
  @dataclass(frozen=True)
36
- class EC2NetworkInterfaceToAWSAccount(CartographyRelSchema):
37
- target_node_label: str = 'AWSAccount'
37
+ class EC2NetworkInterfaceToAWSAccountRel(CartographyRelSchema):
38
+ target_node_label: str = "AWSAccount"
38
39
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
39
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
40
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
40
41
  )
41
42
  direction: LinkDirection = LinkDirection.INWARD
42
43
  rel_label: str = "RESOURCE"
43
- properties: EC2NetworkInterfaceToAwsAccountRelProperties = EC2NetworkInterfaceToAwsAccountRelProperties()
44
+ properties: EC2NetworkInterfaceToAWSAccountRelProperties = (
45
+ EC2NetworkInterfaceToAWSAccountRelProperties()
46
+ )
44
47
 
45
48
 
46
49
  @dataclass(frozen=True)
47
- class EC2NetworkInterfaceToEC2InstanceRelProperties(CartographyRelProperties):
48
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
50
+ class EC2NetworkInterfaceToEC2InstanceRelRelProperties(CartographyRelProperties):
51
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
49
52
 
50
53
 
51
54
  @dataclass(frozen=True)
52
- class EC2NetworkInterfaceToEC2Instance(CartographyRelSchema):
53
- target_node_label: str = 'EC2Instance'
55
+ class EC2NetworkInterfaceToEC2InstanceRel(CartographyRelSchema):
56
+ target_node_label: str = "EC2Instance"
54
57
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
55
- {'id': PropertyRef('InstanceId')},
58
+ {"id": PropertyRef("InstanceId")},
56
59
  )
57
60
  direction: LinkDirection = LinkDirection.INWARD
58
61
  rel_label: str = "NETWORK_INTERFACE"
59
- properties: EC2NetworkInterfaceToEC2InstanceRelProperties = EC2NetworkInterfaceToEC2InstanceRelProperties()
62
+ properties: EC2NetworkInterfaceToEC2InstanceRelRelProperties = (
63
+ EC2NetworkInterfaceToEC2InstanceRelRelProperties()
64
+ )
60
65
 
61
66
 
62
67
  @dataclass(frozen=True)
63
- class EC2NetworkInterfaceToEC2SubnetRelProperties(CartographyRelProperties):
64
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
68
+ class EC2NetworkInterfaceToEC2SubnetRelRelProperties(CartographyRelProperties):
69
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
65
70
 
66
71
 
67
72
  @dataclass(frozen=True)
68
- class EC2NetworkInterfaceToEC2Subnet(CartographyRelSchema):
69
- target_node_label: str = 'EC2Subnet'
73
+ class EC2NetworkInterfaceToEC2SubnetRel(CartographyRelSchema):
74
+ target_node_label: str = "EC2Subnet"
70
75
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
71
- {'id': PropertyRef('SubnetId')},
76
+ {"id": PropertyRef("SubnetId")},
72
77
  )
73
78
  direction: LinkDirection = LinkDirection.OUTWARD
74
79
  rel_label: str = "PART_OF_SUBNET"
75
- properties: EC2NetworkInterfaceToEC2SubnetRelProperties = EC2NetworkInterfaceToEC2SubnetRelProperties()
80
+ properties: EC2NetworkInterfaceToEC2SubnetRelRelProperties = (
81
+ EC2NetworkInterfaceToEC2SubnetRelRelProperties()
82
+ )
76
83
 
77
84
 
78
85
  @dataclass(frozen=True)
79
- class EC2NetworkInterfaceToEC2SecurityGroupRelProperties(CartographyRelProperties):
80
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
86
+ class EC2NetworkInterfaceToEC2SecurityGroupRelRelProperties(CartographyRelProperties):
87
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
81
88
 
82
89
 
83
90
  @dataclass(frozen=True)
84
- class EC2NetworkInterfaceToEC2SecurityGroup(CartographyRelSchema):
85
- target_node_label: str = 'EC2SecurityGroup'
91
+ class EC2NetworkInterfaceToEC2SecurityGroupRel(CartographyRelSchema):
92
+ target_node_label: str = "EC2SecurityGroup"
86
93
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
87
- {'id': PropertyRef('GroupId')},
94
+ {"id": PropertyRef("GroupId")},
88
95
  )
89
96
  direction: LinkDirection = LinkDirection.OUTWARD
90
97
  rel_label: str = "MEMBER_OF_EC2_SECURITY_GROUP"
91
- properties: EC2NetworkInterfaceToEC2SecurityGroupRelProperties = \
92
- EC2NetworkInterfaceToEC2SecurityGroupRelProperties()
98
+ properties: EC2NetworkInterfaceToEC2SecurityGroupRelRelProperties = (
99
+ EC2NetworkInterfaceToEC2SecurityGroupRelRelProperties()
100
+ )
93
101
 
94
102
 
95
103
  @dataclass(frozen=True)
@@ -97,13 +105,18 @@ class EC2NetworkInterfaceInstanceSchema(CartographyNodeSchema):
97
105
  """
98
106
  Network interface as known by an EC2 instance
99
107
  """
100
- label: str = 'NetworkInterface'
101
- properties: EC2NetworkInterfaceInstanceNodeProperties = EC2NetworkInterfaceInstanceNodeProperties()
102
- sub_resource_relationship: EC2NetworkInterfaceToAWSAccount = EC2NetworkInterfaceToAWSAccount()
108
+
109
+ label: str = "NetworkInterface"
110
+ properties: EC2NetworkInterfaceInstanceNodeProperties = (
111
+ EC2NetworkInterfaceInstanceNodeProperties()
112
+ )
113
+ sub_resource_relationship: EC2NetworkInterfaceToAWSAccountRel = (
114
+ EC2NetworkInterfaceToAWSAccountRel()
115
+ )
103
116
  other_relationships: OtherRelationships = OtherRelationships(
104
117
  [
105
- EC2NetworkInterfaceToEC2Instance(),
106
- EC2NetworkInterfaceToEC2Subnet(),
107
- EC2NetworkInterfaceToEC2SecurityGroup(),
118
+ EC2NetworkInterfaceToEC2InstanceRel(),
119
+ EC2NetworkInterfaceToEC2SubnetRel(),
120
+ EC2NetworkInterfaceToEC2SecurityGroupRel(),
108
121
  ],
109
122
  )