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
@@ -1,9 +1,17 @@
1
1
  from dataclasses import dataclass
2
2
 
3
- from cartography.models.aws.ec2.networkinterface_instance import EC2NetworkInterfaceToAWSAccount
4
- from cartography.models.aws.ec2.networkinterface_instance import EC2NetworkInterfaceToEC2Instance
5
- from cartography.models.aws.ec2.networkinterface_instance import EC2NetworkInterfaceToEC2SecurityGroup
6
- from cartography.models.aws.ec2.networkinterface_instance import EC2NetworkInterfaceToEC2Subnet
3
+ from cartography.models.aws.ec2.networkinterface_instance import (
4
+ EC2NetworkInterfaceToAWSAccountRel,
5
+ )
6
+ from cartography.models.aws.ec2.networkinterface_instance import (
7
+ EC2NetworkInterfaceToEC2InstanceRel,
8
+ )
9
+ from cartography.models.aws.ec2.networkinterface_instance import (
10
+ EC2NetworkInterfaceToEC2SecurityGroupRel,
11
+ )
12
+ from cartography.models.aws.ec2.networkinterface_instance import (
13
+ EC2NetworkInterfaceToEC2SubnetRel,
14
+ )
7
15
  from cartography.models.core.common import PropertyRef
8
16
  from cartography.models.core.nodes import CartographyNodeProperties
9
17
  from cartography.models.core.nodes import CartographyNodeSchema
@@ -20,54 +28,59 @@ class EC2NetworkInterfaceNodeProperties(CartographyNodeProperties):
20
28
  """
21
29
  Network interface properties
22
30
  """
23
- id: PropertyRef = PropertyRef('NetworkInterfaceId')
24
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
25
- description: PropertyRef = PropertyRef('Description')
26
- mac_address: PropertyRef = PropertyRef('MacAddress', extra_index=True)
27
- private_dns_name: PropertyRef = PropertyRef('PrivateDnsName')
28
- private_ip_address: PropertyRef = PropertyRef('PrivateIpAddress', extra_index=True)
29
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
30
- status: PropertyRef = PropertyRef('Status')
31
+
32
+ id: PropertyRef = PropertyRef("NetworkInterfaceId")
33
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
34
+ description: PropertyRef = PropertyRef("Description")
35
+ mac_address: PropertyRef = PropertyRef("MacAddress", extra_index=True)
36
+ private_dns_name: PropertyRef = PropertyRef("PrivateDnsName")
37
+ private_ip_address: PropertyRef = PropertyRef("PrivateIpAddress", extra_index=True)
38
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
39
+ status: PropertyRef = PropertyRef("Status")
31
40
 
32
41
  # Properties only returned by describe-network-interfaces
33
- interface_type: PropertyRef = PropertyRef('InterfaceType')
34
- public_ip: PropertyRef = PropertyRef('PublicIp', extra_index=True)
35
- requester_id: PropertyRef = PropertyRef('RequesterId', extra_index=True)
36
- requester_managed: PropertyRef = PropertyRef('RequesterManaged')
37
- source_dest_check: PropertyRef = PropertyRef('SourceDestCheck')
38
- subnetid: PropertyRef = PropertyRef('SubnetId', extra_index=True)
42
+ interface_type: PropertyRef = PropertyRef("InterfaceType")
43
+ public_ip: PropertyRef = PropertyRef("PublicIp", extra_index=True)
44
+ requester_id: PropertyRef = PropertyRef("RequesterId", extra_index=True)
45
+ requester_managed: PropertyRef = PropertyRef("RequesterManaged")
46
+ source_dest_check: PropertyRef = PropertyRef("SourceDestCheck")
47
+ subnetid: PropertyRef = PropertyRef("SubnetId", extra_index=True)
39
48
 
40
49
 
41
50
  @dataclass(frozen=True)
42
- class EC2NetworkInterfaceToElbRelProperties(CartographyRelProperties):
43
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
51
+ class EC2NetworkInterfaceToElbRelRelProperties(CartographyRelProperties):
52
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
44
53
 
45
54
 
46
55
  @dataclass(frozen=True)
47
- class EC2NetworkInterfaceToElb(CartographyRelSchema):
48
- target_node_label: str = 'LoadBalancer'
56
+ class EC2NetworkInterfaceToElbRel(CartographyRelSchema):
57
+ target_node_label: str = "LoadBalancer"
49
58
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
50
- {'name': PropertyRef('ElbV1Id')},
59
+ {"name": PropertyRef("ElbV1Id")},
51
60
  )
52
61
  direction: LinkDirection = LinkDirection.INWARD
53
62
  rel_label: str = "NETWORK_INTERFACE"
54
- properties: EC2NetworkInterfaceToElbRelProperties = EC2NetworkInterfaceToElbRelProperties()
63
+ properties: EC2NetworkInterfaceToElbRelRelProperties = (
64
+ EC2NetworkInterfaceToElbRelRelProperties()
65
+ )
55
66
 
56
67
 
57
68
  @dataclass(frozen=True)
58
- class EC2NetworkInterfaceToElbV2RelProperties(CartographyRelProperties):
59
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
69
+ class EC2NetworkInterfaceToElbV2RelRelProperties(CartographyRelProperties):
70
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
60
71
 
61
72
 
62
73
  @dataclass(frozen=True)
63
- class EC2NetworkInterfaceToElbV2(CartographyRelSchema):
64
- target_node_label: str = 'LoadBalancerV2'
74
+ class EC2NetworkInterfaceToElbV2Rel(CartographyRelSchema):
75
+ target_node_label: str = "LoadBalancerV2"
65
76
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
66
- {'id': PropertyRef('ElbV2Id')},
77
+ {"id": PropertyRef("ElbV2Id")},
67
78
  )
68
79
  direction: LinkDirection = LinkDirection.INWARD
69
80
  rel_label: str = "NETWORK_INTERFACE"
70
- properties: EC2NetworkInterfaceToElbV2RelProperties = EC2NetworkInterfaceToElbV2RelProperties()
81
+ properties: EC2NetworkInterfaceToElbV2RelRelProperties = (
82
+ EC2NetworkInterfaceToElbV2RelRelProperties()
83
+ )
71
84
 
72
85
 
73
86
  @dataclass(frozen=True)
@@ -75,15 +88,18 @@ class EC2NetworkInterfaceSchema(CartographyNodeSchema):
75
88
  """
76
89
  Network interface as known by describe-network-interfaces.
77
90
  """
78
- label: str = 'NetworkInterface'
91
+
92
+ label: str = "NetworkInterface"
79
93
  properties: EC2NetworkInterfaceNodeProperties = EC2NetworkInterfaceNodeProperties()
80
- sub_resource_relationship: EC2NetworkInterfaceToAWSAccount = EC2NetworkInterfaceToAWSAccount()
94
+ sub_resource_relationship: EC2NetworkInterfaceToAWSAccountRel = (
95
+ EC2NetworkInterfaceToAWSAccountRel()
96
+ )
81
97
  other_relationships: OtherRelationships = OtherRelationships(
82
98
  [
83
- EC2NetworkInterfaceToEC2Subnet(),
84
- EC2NetworkInterfaceToEC2SecurityGroup(),
85
- EC2NetworkInterfaceToElb(),
86
- EC2NetworkInterfaceToElbV2(),
87
- EC2NetworkInterfaceToEC2Instance(),
99
+ EC2NetworkInterfaceToEC2SubnetRel(),
100
+ EC2NetworkInterfaceToEC2SecurityGroupRel(),
101
+ EC2NetworkInterfaceToElbRel(),
102
+ EC2NetworkInterfaceToElbV2Rel(),
103
+ EC2NetworkInterfaceToEC2InstanceRel(),
88
104
  ],
89
105
  )
@@ -16,45 +16,50 @@ class EC2PrivateIpNetworkInterfaceNodeProperties(CartographyNodeProperties):
16
16
  """
17
17
  Selection of properties of a private IP as known by an EC2 network interface
18
18
  """
19
- id: PropertyRef = PropertyRef('Id')
20
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
21
- network_interface_id: PropertyRef = PropertyRef('NetworkInterfaceId')
22
- primary: PropertyRef = PropertyRef('Primary')
23
- private_ip_address: PropertyRef = PropertyRef('PrivateIpAddress')
24
- public_ip: PropertyRef = PropertyRef('PublicIp')
25
- ip_owner_id: PropertyRef = PropertyRef('IpOwnerId')
19
+
20
+ id: PropertyRef = PropertyRef("Id")
21
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
22
+ network_interface_id: PropertyRef = PropertyRef("NetworkInterfaceId")
23
+ primary: PropertyRef = PropertyRef("Primary")
24
+ private_ip_address: PropertyRef = PropertyRef("PrivateIpAddress")
25
+ public_ip: PropertyRef = PropertyRef("PublicIp")
26
+ ip_owner_id: PropertyRef = PropertyRef("IpOwnerId")
26
27
 
27
28
 
28
29
  @dataclass(frozen=True)
29
- class EC2PrivateIpToAwsAccountRelProperties(CartographyRelProperties):
30
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
30
+ class EC2PrivateIpToAWSAccountRelRelProperties(CartographyRelProperties):
31
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
31
32
 
32
33
 
33
34
  @dataclass(frozen=True)
34
- class EC2PrivateIpToAWSAccount(CartographyRelSchema):
35
- target_node_label: str = 'AWSAccount'
35
+ class EC2PrivateIpToAWSAccountRel(CartographyRelSchema):
36
+ target_node_label: str = "AWSAccount"
36
37
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
37
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
38
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
38
39
  )
39
40
  direction: LinkDirection = LinkDirection.INWARD
40
41
  rel_label: str = "RESOURCE"
41
- properties: EC2PrivateIpToAwsAccountRelProperties = EC2PrivateIpToAwsAccountRelProperties()
42
+ properties: EC2PrivateIpToAWSAccountRelRelProperties = (
43
+ EC2PrivateIpToAWSAccountRelRelProperties()
44
+ )
42
45
 
43
46
 
44
47
  @dataclass(frozen=True)
45
48
  class EC2NetworkInterfaceToPrivateIpRelProperties(CartographyRelProperties):
46
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
49
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
47
50
 
48
51
 
49
52
  @dataclass(frozen=True)
50
- class EC2PrivateIpToNetworkInterface(CartographyRelSchema):
51
- target_node_label: str = 'NetworkInterface'
53
+ class EC2PrivateIpToNetworkInterfaceRel(CartographyRelSchema):
54
+ target_node_label: str = "NetworkInterface"
52
55
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
53
- {'id': PropertyRef('NetworkInterfaceId')},
56
+ {"id": PropertyRef("NetworkInterfaceId")},
54
57
  )
55
58
  direction: LinkDirection = LinkDirection.INWARD
56
59
  rel_label: str = "PRIVATE_IP_ADDRESS"
57
- properties: EC2NetworkInterfaceToPrivateIpRelProperties = EC2NetworkInterfaceToPrivateIpRelProperties()
60
+ properties: EC2NetworkInterfaceToPrivateIpRelProperties = (
61
+ EC2NetworkInterfaceToPrivateIpRelProperties()
62
+ )
58
63
 
59
64
 
60
65
  @dataclass(frozen=True)
@@ -62,11 +67,16 @@ class EC2PrivateIpNetworkInterfaceSchema(CartographyNodeSchema):
62
67
  """
63
68
  PrivateIp as known by a Network Interface
64
69
  """
65
- label: str = 'EC2PrivateIp'
66
- properties: EC2PrivateIpNetworkInterfaceNodeProperties = EC2PrivateIpNetworkInterfaceNodeProperties()
67
- sub_resource_relationship: EC2PrivateIpToAWSAccount = EC2PrivateIpToAWSAccount()
70
+
71
+ label: str = "EC2PrivateIp"
72
+ properties: EC2PrivateIpNetworkInterfaceNodeProperties = (
73
+ EC2PrivateIpNetworkInterfaceNodeProperties()
74
+ )
75
+ sub_resource_relationship: EC2PrivateIpToAWSAccountRel = (
76
+ EC2PrivateIpToAWSAccountRel()
77
+ )
68
78
  other_relationships: OtherRelationships = OtherRelationships(
69
79
  [
70
- EC2PrivateIpToNetworkInterface(),
80
+ EC2PrivateIpToNetworkInterfaceRel(),
71
81
  ],
72
82
  )
@@ -12,32 +12,36 @@ from cartography.models.core.relationships import TargetNodeMatcher
12
12
 
13
13
  @dataclass(frozen=True)
14
14
  class EC2ReservationNodeProperties(CartographyNodeProperties):
15
- id: PropertyRef = PropertyRef('ReservationId')
16
- reservationid: PropertyRef = PropertyRef('ReservationId')
17
- ownerid: PropertyRef = PropertyRef('OwnerId')
18
- requesterid: PropertyRef = PropertyRef('RequesterId')
19
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
20
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
15
+ id: PropertyRef = PropertyRef("ReservationId")
16
+ reservationid: PropertyRef = PropertyRef("ReservationId")
17
+ ownerid: PropertyRef = PropertyRef("OwnerId")
18
+ requesterid: PropertyRef = PropertyRef("RequesterId")
19
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
20
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
21
21
 
22
22
 
23
23
  @dataclass(frozen=True)
24
- class EC2ReservationToAwsAccountRelProperties(CartographyRelProperties):
25
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
24
+ class EC2ReservationToAWSAccountRelRelProperties(CartographyRelProperties):
25
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
26
26
 
27
27
 
28
28
  @dataclass(frozen=True)
29
- class EC2ReservationToAWSAccount(CartographyRelSchema):
30
- target_node_label: str = 'AWSAccount'
29
+ class EC2ReservationToAWSAccountRel(CartographyRelSchema):
30
+ target_node_label: str = "AWSAccount"
31
31
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
32
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
32
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
33
33
  )
34
34
  direction: LinkDirection = LinkDirection.INWARD
35
35
  rel_label: str = "RESOURCE"
36
- properties: EC2ReservationToAwsAccountRelProperties = EC2ReservationToAwsAccountRelProperties()
36
+ properties: EC2ReservationToAWSAccountRelRelProperties = (
37
+ EC2ReservationToAWSAccountRelRelProperties()
38
+ )
37
39
 
38
40
 
39
41
  @dataclass(frozen=True)
40
42
  class EC2ReservationSchema(CartographyNodeSchema):
41
- label: str = 'EC2Reservation'
43
+ label: str = "EC2Reservation"
42
44
  properties: EC2ReservationNodeProperties = EC2ReservationNodeProperties()
43
- sub_resource_relationship: EC2ReservationToAWSAccount = EC2ReservationToAWSAccount()
45
+ sub_resource_relationship: EC2ReservationToAWSAccountRel = (
46
+ EC2ReservationToAWSAccountRel()
47
+ )
@@ -0,0 +1,97 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.relationships import CartographyRelProperties
7
+ from cartography.models.core.relationships import CartographyRelSchema
8
+ from cartography.models.core.relationships import LinkDirection
9
+ from cartography.models.core.relationships import make_target_node_matcher
10
+ from cartography.models.core.relationships import OtherRelationships
11
+ from cartography.models.core.relationships import TargetNodeMatcher
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class RouteTableAssociationNodeProperties(CartographyNodeProperties):
16
+ id: PropertyRef = PropertyRef("id")
17
+ route_table_association_id: PropertyRef = PropertyRef("id", extra_index=True)
18
+ target: PropertyRef = PropertyRef("_target")
19
+ gateway_id: PropertyRef = PropertyRef("gateway_id")
20
+ main: PropertyRef = PropertyRef("main")
21
+ route_table_id: PropertyRef = PropertyRef("route_table_id")
22
+ subnet_id: PropertyRef = PropertyRef("subnet_id")
23
+ association_state: PropertyRef = PropertyRef("association_state")
24
+ association_state_message: PropertyRef = PropertyRef("association_state_message")
25
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
26
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
27
+
28
+
29
+ @dataclass(frozen=True)
30
+ class RouteTableAssociationToAWSAccountRelRelProperties(CartographyRelProperties):
31
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
32
+
33
+
34
+ @dataclass(frozen=True)
35
+ class RouteTableAssociationToAWSAccountRel(CartographyRelSchema):
36
+ target_node_label: str = "AWSAccount"
37
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
38
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
39
+ )
40
+ direction: LinkDirection = LinkDirection.INWARD
41
+ rel_label: str = "RESOURCE"
42
+ properties: RouteTableAssociationToAWSAccountRelRelProperties = (
43
+ RouteTableAssociationToAWSAccountRelRelProperties()
44
+ )
45
+
46
+
47
+ @dataclass(frozen=True)
48
+ class RouteTableAssociationToSubnetRelRelProperties(CartographyRelProperties):
49
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
50
+
51
+
52
+ @dataclass(frozen=True)
53
+ class RouteTableAssociationToSubnetRel(CartographyRelSchema):
54
+ target_node_label: str = "EC2Subnet"
55
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
56
+ {"subnetid": PropertyRef("subnet_id")},
57
+ )
58
+ direction: LinkDirection = LinkDirection.OUTWARD
59
+ rel_label: str = "ASSOCIATED_SUBNET"
60
+ properties: RouteTableAssociationToSubnetRelRelProperties = (
61
+ RouteTableAssociationToSubnetRelRelProperties()
62
+ )
63
+
64
+
65
+ @dataclass(frozen=True)
66
+ class RouteTableAssociationToIgwRelRelProperties(CartographyRelProperties):
67
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
68
+
69
+
70
+ @dataclass(frozen=True)
71
+ class RouteTableAssociationToIgwRel(CartographyRelSchema):
72
+ target_node_label: str = "AWSInternetGateway"
73
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
74
+ {"id": PropertyRef("gateway_id")},
75
+ )
76
+ direction: LinkDirection = LinkDirection.OUTWARD
77
+ rel_label: str = "ASSOCIATED_IGW_FOR_INGRESS"
78
+ properties: RouteTableAssociationToIgwRelRelProperties = (
79
+ RouteTableAssociationToIgwRelRelProperties()
80
+ )
81
+
82
+
83
+ @dataclass(frozen=True)
84
+ class RouteTableAssociationSchema(CartographyNodeSchema):
85
+ label: str = "EC2RouteTableAssociation"
86
+ properties: RouteTableAssociationNodeProperties = (
87
+ RouteTableAssociationNodeProperties()
88
+ )
89
+ sub_resource_relationship: RouteTableAssociationToAWSAccountRel = (
90
+ RouteTableAssociationToAWSAccountRel()
91
+ )
92
+ other_relationships: OtherRelationships = OtherRelationships(
93
+ [
94
+ RouteTableAssociationToSubnetRel(),
95
+ RouteTableAssociationToIgwRel(),
96
+ ],
97
+ )
@@ -0,0 +1,128 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.relationships import CartographyRelProperties
7
+ from cartography.models.core.relationships import CartographyRelSchema
8
+ from cartography.models.core.relationships import LinkDirection
9
+ from cartography.models.core.relationships import make_target_node_matcher
10
+ from cartography.models.core.relationships import OtherRelationships
11
+ from cartography.models.core.relationships import TargetNodeMatcher
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class RouteTableNodeProperties(CartographyNodeProperties):
16
+ """
17
+ Schema describing a RouteTable.
18
+ """
19
+
20
+ id: PropertyRef = PropertyRef("id")
21
+ route_table_id: PropertyRef = PropertyRef("route_table_id", extra_index=True)
22
+ owner_id: PropertyRef = PropertyRef("owner_id")
23
+ vpc_id: PropertyRef = PropertyRef("VpcId")
24
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
25
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
26
+ main: PropertyRef = PropertyRef("main")
27
+
28
+
29
+ @dataclass(frozen=True)
30
+ class RouteTableToAWSAccountRelRelProperties(CartographyRelProperties):
31
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
32
+
33
+
34
+ @dataclass(frozen=True)
35
+ class RouteTableToAWSAccountRel(CartographyRelSchema):
36
+ target_node_label: str = "AWSAccount"
37
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
38
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
39
+ )
40
+ direction: LinkDirection = LinkDirection.INWARD
41
+ rel_label: str = "RESOURCE"
42
+ properties: RouteTableToAWSAccountRelRelProperties = (
43
+ RouteTableToAWSAccountRelRelProperties()
44
+ )
45
+
46
+
47
+ @dataclass(frozen=True)
48
+ class RouteTableToVpcRelRelProperties(CartographyRelProperties):
49
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
50
+
51
+
52
+ @dataclass(frozen=True)
53
+ class RouteTableToVpcRel(CartographyRelSchema):
54
+ target_node_label: str = "AWSVpc"
55
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
56
+ {"id": PropertyRef("vpc_id")},
57
+ )
58
+ direction: LinkDirection = LinkDirection.OUTWARD
59
+ rel_label: str = "MEMBER_OF_AWS_VPC"
60
+ properties: RouteTableToVpcRelRelProperties = RouteTableToVpcRelRelProperties()
61
+
62
+
63
+ @dataclass(frozen=True)
64
+ class RouteTableToRouteRelRelProperties(CartographyRelProperties):
65
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
66
+
67
+
68
+ @dataclass(frozen=True)
69
+ class RouteTableToRouteRel(CartographyRelSchema):
70
+ target_node_label: str = "EC2Route"
71
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
72
+ {"id": PropertyRef("RouteIds", one_to_many=True)},
73
+ )
74
+ direction: LinkDirection = LinkDirection.OUTWARD
75
+ rel_label: str = "ROUTE"
76
+ properties: RouteTableToRouteRelRelProperties = RouteTableToRouteRelRelProperties()
77
+
78
+
79
+ @dataclass(frozen=True)
80
+ class RouteTableToAssociationRelRelProperties(CartographyRelProperties):
81
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
82
+
83
+
84
+ @dataclass(frozen=True)
85
+ class RouteTableToAssociationRel(CartographyRelSchema):
86
+ target_node_label: str = "EC2RouteTableAssociation"
87
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
88
+ {"id": PropertyRef("RouteTableAssociationIds", one_to_many=True)},
89
+ )
90
+ direction: LinkDirection = LinkDirection.OUTWARD
91
+ rel_label: str = "ASSOCIATION"
92
+ properties: RouteTableToAssociationRelRelProperties = (
93
+ RouteTableToAssociationRelRelProperties()
94
+ )
95
+
96
+
97
+ @dataclass(frozen=True)
98
+ class RouteTableToVpnGatewayRelRelProperties(CartographyRelProperties):
99
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
100
+
101
+
102
+ # TODO implement AWSVpnGateways
103
+ @dataclass(frozen=True)
104
+ class RouteTableToVpnGatewayRel(CartographyRelSchema):
105
+ target_node_label: str = "AWSVpnGateway"
106
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
107
+ {"id": PropertyRef("VpnGatewayIds", one_to_many=True)},
108
+ )
109
+ direction: LinkDirection = LinkDirection.OUTWARD
110
+ rel_label: str = "CONNECTED_TO"
111
+ properties: RouteTableToVpnGatewayRelRelProperties = (
112
+ RouteTableToVpnGatewayRelRelProperties()
113
+ )
114
+
115
+
116
+ @dataclass(frozen=True)
117
+ class RouteTableSchema(CartographyNodeSchema):
118
+ label: str = "EC2RouteTable"
119
+ properties: RouteTableNodeProperties = RouteTableNodeProperties()
120
+ sub_resource_relationship: RouteTableToAWSAccountRel = RouteTableToAWSAccountRel()
121
+ other_relationships: OtherRelationships = OtherRelationships(
122
+ [
123
+ RouteTableToVpcRel(),
124
+ RouteTableToRouteRel(),
125
+ RouteTableToAssociationRel(),
126
+ RouteTableToVpnGatewayRel(),
127
+ ],
128
+ )
@@ -0,0 +1,85 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.relationships import CartographyRelProperties
7
+ from cartography.models.core.relationships import CartographyRelSchema
8
+ from cartography.models.core.relationships import LinkDirection
9
+ from cartography.models.core.relationships import make_target_node_matcher
10
+ from cartography.models.core.relationships import OtherRelationships
11
+ from cartography.models.core.relationships import TargetNodeMatcher
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class RouteNodeProperties(CartographyNodeProperties):
16
+ id: PropertyRef = PropertyRef("id")
17
+ carrier_gateway_id: PropertyRef = PropertyRef("carrier_gateway_id")
18
+ core_network_arn: PropertyRef = PropertyRef("core_network_arn")
19
+ destination_cidr_block: PropertyRef = PropertyRef("destination_cidr_block")
20
+ destination_ipv6_cidr_block: PropertyRef = PropertyRef(
21
+ "destination_ipv6_cidr_block"
22
+ )
23
+ destination_prefix_list_id: PropertyRef = PropertyRef("destination_prefix_list_id")
24
+ egress_only_internet_gateway_id: PropertyRef = PropertyRef(
25
+ "egress_only_internet_gateway_id"
26
+ )
27
+ gateway_id: PropertyRef = PropertyRef("gateway_id")
28
+ instance_id: PropertyRef = PropertyRef("instance_id")
29
+ instance_owner_id: PropertyRef = PropertyRef("instance_owner_id")
30
+ local_gateway_id: PropertyRef = PropertyRef("local_gateway_id")
31
+ nat_gateway_id: PropertyRef = PropertyRef("nat_gateway_id")
32
+ network_interface_id: PropertyRef = PropertyRef("network_interface_id")
33
+ origin: PropertyRef = PropertyRef("origin")
34
+ state: PropertyRef = PropertyRef("state")
35
+ transit_gateway_id: PropertyRef = PropertyRef("transit_gateway_id")
36
+ vpc_peering_connection_id: PropertyRef = PropertyRef("vpc_peering_connection_id")
37
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
38
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
39
+ target: PropertyRef = PropertyRef("_target")
40
+
41
+
42
+ @dataclass(frozen=True)
43
+ class RouteToAWSAccountRelRelProperties(CartographyRelProperties):
44
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
45
+
46
+
47
+ @dataclass(frozen=True)
48
+ class RouteToAWSAccountRel(CartographyRelSchema):
49
+ target_node_label: str = "AWSAccount"
50
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
51
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
52
+ )
53
+ direction: LinkDirection = LinkDirection.INWARD
54
+ rel_label: str = "RESOURCE"
55
+ properties: RouteToAWSAccountRelRelProperties = RouteToAWSAccountRelRelProperties()
56
+
57
+
58
+ @dataclass(frozen=True)
59
+ class RouteToInternetGatewayRelRelProperties(CartographyRelProperties):
60
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
61
+
62
+
63
+ @dataclass(frozen=True)
64
+ class RouteToInternetGatewayRel(CartographyRelSchema):
65
+ target_node_label: str = "AWSInternetGateway"
66
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
67
+ {"id": PropertyRef("gateway_id")},
68
+ )
69
+ direction: LinkDirection = LinkDirection.OUTWARD
70
+ rel_label: str = "ROUTES_TO_GATEWAY"
71
+ properties: RouteToInternetGatewayRelRelProperties = (
72
+ RouteToInternetGatewayRelRelProperties()
73
+ )
74
+
75
+
76
+ @dataclass(frozen=True)
77
+ class RouteSchema(CartographyNodeSchema):
78
+ label: str = "EC2Route"
79
+ properties: RouteNodeProperties = RouteNodeProperties()
80
+ sub_resource_relationship: RouteToAWSAccountRel = RouteToAWSAccountRel()
81
+ other_relationships: OtherRelationships = OtherRelationships(
82
+ [
83
+ RouteToInternetGatewayRel(),
84
+ ]
85
+ )