cartography 0.102.0rc2__py3-none-any.whl → 0.103.0__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 (297) hide show
  1. cartography/__main__.py +1 -2
  2. cartography/_version.py +2 -2
  3. cartography/cli.py +376 -249
  4. cartography/client/core/tx.py +39 -18
  5. cartography/config.py +28 -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/cloudwatch.py +93 -0
  23. cartography/intel/aws/config.py +56 -20
  24. cartography/intel/aws/dynamodb.py +108 -40
  25. cartography/intel/aws/ec2/__init__.py +2 -2
  26. cartography/intel/aws/ec2/auto_scaling_groups.py +181 -78
  27. cartography/intel/aws/ec2/elastic_ip_addresses.py +41 -13
  28. cartography/intel/aws/ec2/images.py +49 -20
  29. cartography/intel/aws/ec2/instances.py +234 -136
  30. cartography/intel/aws/ec2/internet_gateways.py +40 -11
  31. cartography/intel/aws/ec2/key_pairs.py +44 -20
  32. cartography/intel/aws/ec2/launch_templates.py +101 -59
  33. cartography/intel/aws/ec2/load_balancer_v2s.py +104 -39
  34. cartography/intel/aws/ec2/load_balancers.py +82 -42
  35. cartography/intel/aws/ec2/network_acls.py +89 -65
  36. cartography/intel/aws/ec2/network_interfaces.py +146 -87
  37. cartography/intel/aws/ec2/reserved_instances.py +45 -16
  38. cartography/intel/aws/ec2/route_tables.py +138 -98
  39. cartography/intel/aws/ec2/security_groups.py +71 -21
  40. cartography/intel/aws/ec2/snapshots.py +61 -22
  41. cartography/intel/aws/ec2/subnets.py +54 -18
  42. cartography/intel/aws/ec2/tgw.py +100 -34
  43. cartography/intel/aws/ec2/util.py +1 -1
  44. cartography/intel/aws/ec2/volumes.py +69 -41
  45. cartography/intel/aws/ec2/vpc.py +37 -12
  46. cartography/intel/aws/ec2/vpc_peerings.py +83 -24
  47. cartography/intel/aws/ecr.py +88 -32
  48. cartography/intel/aws/ecs.py +83 -47
  49. cartography/intel/aws/efs.py +93 -0
  50. cartography/intel/aws/eks.py +55 -29
  51. cartography/intel/aws/elasticache.py +42 -18
  52. cartography/intel/aws/elasticsearch.py +57 -20
  53. cartography/intel/aws/emr.py +61 -23
  54. cartography/intel/aws/iam.py +401 -145
  55. cartography/intel/aws/iam_instance_profiles.py +22 -22
  56. cartography/intel/aws/identitycenter.py +71 -37
  57. cartography/intel/aws/inspector.py +159 -89
  58. cartography/intel/aws/kms.py +92 -38
  59. cartography/intel/aws/lambda_function.py +103 -34
  60. cartography/intel/aws/organizations.py +30 -10
  61. cartography/intel/aws/permission_relationships.py +133 -51
  62. cartography/intel/aws/rds.py +249 -85
  63. cartography/intel/aws/redshift.py +107 -46
  64. cartography/intel/aws/resourcegroupstaggingapi.py +120 -66
  65. cartography/intel/aws/resources.py +57 -46
  66. cartography/intel/aws/route53.py +108 -61
  67. cartography/intel/aws/s3.py +168 -83
  68. cartography/intel/aws/s3accountpublicaccessblock.py +157 -0
  69. cartography/intel/aws/secretsmanager.py +24 -12
  70. cartography/intel/aws/securityhub.py +20 -9
  71. cartography/intel/aws/sns.py +166 -0
  72. cartography/intel/aws/sqs.py +60 -28
  73. cartography/intel/aws/ssm.py +70 -30
  74. cartography/intel/aws/util/arns.py +7 -7
  75. cartography/intel/aws/util/common.py +31 -4
  76. cartography/intel/azure/__init__.py +78 -19
  77. cartography/intel/azure/compute.py +101 -27
  78. cartography/intel/azure/cosmosdb.py +496 -170
  79. cartography/intel/azure/sql.py +296 -105
  80. cartography/intel/azure/storage.py +322 -113
  81. cartography/intel/azure/subscription.py +39 -23
  82. cartography/intel/azure/tenant.py +13 -4
  83. cartography/intel/azure/util/credentials.py +95 -55
  84. cartography/intel/bigfix/__init__.py +2 -2
  85. cartography/intel/bigfix/computers.py +93 -65
  86. cartography/intel/cloudflare/__init__.py +74 -0
  87. cartography/intel/cloudflare/accounts.py +57 -0
  88. cartography/intel/cloudflare/dnsrecords.py +64 -0
  89. cartography/intel/cloudflare/members.py +75 -0
  90. cartography/intel/cloudflare/roles.py +65 -0
  91. cartography/intel/cloudflare/zones.py +64 -0
  92. cartography/intel/create_indexes.py +3 -2
  93. cartography/intel/crowdstrike/__init__.py +11 -9
  94. cartography/intel/crowdstrike/endpoints.py +5 -1
  95. cartography/intel/crowdstrike/spotlight.py +8 -3
  96. cartography/intel/cve/__init__.py +46 -13
  97. cartography/intel/cve/feed.py +48 -12
  98. cartography/intel/digitalocean/__init__.py +22 -13
  99. cartography/intel/digitalocean/compute.py +75 -108
  100. cartography/intel/digitalocean/management.py +44 -80
  101. cartography/intel/digitalocean/platform.py +48 -43
  102. cartography/intel/dns.py +36 -10
  103. cartography/intel/duo/__init__.py +21 -16
  104. cartography/intel/duo/api_host.py +14 -9
  105. cartography/intel/duo/endpoints.py +50 -45
  106. cartography/intel/duo/groups.py +18 -14
  107. cartography/intel/duo/phones.py +37 -34
  108. cartography/intel/duo/tokens.py +26 -23
  109. cartography/intel/duo/users.py +54 -50
  110. cartography/intel/duo/web_authn_credentials.py +30 -25
  111. cartography/intel/entra/__init__.py +25 -7
  112. cartography/intel/entra/ou.py +112 -0
  113. cartography/intel/entra/users.py +69 -63
  114. cartography/intel/gcp/__init__.py +185 -49
  115. cartography/intel/gcp/compute.py +418 -231
  116. cartography/intel/gcp/crm.py +96 -43
  117. cartography/intel/gcp/dns.py +60 -19
  118. cartography/intel/gcp/gke.py +72 -38
  119. cartography/intel/gcp/iam.py +61 -41
  120. cartography/intel/gcp/storage.py +84 -55
  121. cartography/intel/github/__init__.py +13 -11
  122. cartography/intel/github/repos.py +270 -137
  123. cartography/intel/github/teams.py +170 -88
  124. cartography/intel/github/users.py +70 -39
  125. cartography/intel/github/util.py +36 -34
  126. cartography/intel/gsuite/__init__.py +47 -26
  127. cartography/intel/gsuite/api.py +73 -30
  128. cartography/intel/jamf/__init__.py +19 -1
  129. cartography/intel/jamf/computers.py +30 -7
  130. cartography/intel/jamf/util.py +7 -2
  131. cartography/intel/kandji/__init__.py +6 -3
  132. cartography/intel/kandji/devices.py +14 -8
  133. cartography/intel/kubernetes/namespaces.py +7 -4
  134. cartography/intel/kubernetes/pods.py +7 -4
  135. cartography/intel/kubernetes/services.py +8 -4
  136. cartography/intel/lastpass/__init__.py +2 -2
  137. cartography/intel/lastpass/users.py +23 -12
  138. cartography/intel/oci/__init__.py +44 -11
  139. cartography/intel/oci/iam.py +134 -38
  140. cartography/intel/oci/organizations.py +13 -6
  141. cartography/intel/oci/utils.py +43 -20
  142. cartography/intel/okta/__init__.py +66 -15
  143. cartography/intel/okta/applications.py +42 -20
  144. cartography/intel/okta/awssaml.py +93 -33
  145. cartography/intel/okta/factors.py +16 -4
  146. cartography/intel/okta/groups.py +56 -29
  147. cartography/intel/okta/organization.py +5 -1
  148. cartography/intel/okta/origins.py +6 -2
  149. cartography/intel/okta/roles.py +15 -5
  150. cartography/intel/okta/users.py +20 -8
  151. cartography/intel/okta/utils.py +6 -4
  152. cartography/intel/openai/__init__.py +86 -0
  153. cartography/intel/openai/adminapikeys.py +90 -0
  154. cartography/intel/openai/apikeys.py +96 -0
  155. cartography/intel/openai/projects.py +94 -0
  156. cartography/intel/openai/serviceaccounts.py +82 -0
  157. cartography/intel/openai/users.py +78 -0
  158. cartography/intel/openai/util.py +29 -0
  159. cartography/intel/pagerduty/__init__.py +8 -7
  160. cartography/intel/pagerduty/escalation_policies.py +18 -6
  161. cartography/intel/pagerduty/schedules.py +12 -4
  162. cartography/intel/pagerduty/services.py +11 -4
  163. cartography/intel/pagerduty/teams.py +8 -3
  164. cartography/intel/pagerduty/users.py +3 -1
  165. cartography/intel/pagerduty/vendors.py +3 -1
  166. cartography/intel/semgrep/__init__.py +24 -6
  167. cartography/intel/semgrep/dependencies.py +50 -28
  168. cartography/intel/semgrep/deployment.py +3 -1
  169. cartography/intel/semgrep/findings.py +42 -18
  170. cartography/intel/snipeit/__init__.py +17 -3
  171. cartography/intel/snipeit/asset.py +12 -6
  172. cartography/intel/snipeit/user.py +8 -5
  173. cartography/intel/snipeit/util.py +9 -4
  174. cartography/intel/tailscale/__init__.py +77 -0
  175. cartography/intel/tailscale/acls.py +146 -0
  176. cartography/intel/tailscale/devices.py +127 -0
  177. cartography/intel/tailscale/postureintegrations.py +81 -0
  178. cartography/intel/tailscale/tailnets.py +76 -0
  179. cartography/intel/tailscale/users.py +80 -0
  180. cartography/intel/tailscale/utils.py +132 -0
  181. cartography/models/aws/apigateway.py +21 -17
  182. cartography/models/aws/apigatewaycertificate.py +28 -22
  183. cartography/models/aws/apigatewayresource.py +28 -20
  184. cartography/models/aws/apigatewaystage.py +33 -25
  185. cartography/models/aws/cloudtrail/__init__.py +0 -0
  186. cartography/models/aws/cloudtrail/trail.py +61 -0
  187. cartography/models/aws/cloudwatch/__init__.py +0 -0
  188. cartography/models/aws/cloudwatch/loggroup.py +52 -0
  189. cartography/models/aws/dynamodb/gsi.py +30 -22
  190. cartography/models/aws/dynamodb/tables.py +25 -17
  191. cartography/models/aws/ec2/auto_scaling_groups.py +102 -82
  192. cartography/models/aws/ec2/images.py +36 -34
  193. cartography/models/aws/ec2/instances.py +51 -45
  194. cartography/models/aws/ec2/keypair.py +21 -16
  195. cartography/models/aws/ec2/keypair_instance.py +28 -21
  196. cartography/models/aws/ec2/launch_configurations.py +30 -26
  197. cartography/models/aws/ec2/launch_template_versions.py +48 -38
  198. cartography/models/aws/ec2/launch_templates.py +21 -17
  199. cartography/models/aws/ec2/load_balancer_listeners.py +27 -23
  200. cartography/models/aws/ec2/load_balancers.py +47 -37
  201. cartography/models/aws/ec2/network_acl_rules.py +38 -30
  202. cartography/models/aws/ec2/network_acls.py +38 -29
  203. cartography/models/aws/ec2/networkinterface_instance.py +52 -39
  204. cartography/models/aws/ec2/networkinterfaces.py +53 -37
  205. cartography/models/aws/ec2/privateip_networkinterface.py +32 -22
  206. cartography/models/aws/ec2/reservations.py +18 -14
  207. cartography/models/aws/ec2/route_table_associations.py +44 -34
  208. cartography/models/aws/ec2/route_tables.py +50 -43
  209. cartography/models/aws/ec2/routes.py +45 -37
  210. cartography/models/aws/ec2/securitygroup_instance.py +29 -20
  211. cartography/models/aws/ec2/securitygroup_networkinterface.py +24 -15
  212. cartography/models/aws/ec2/subnet_instance.py +24 -19
  213. cartography/models/aws/ec2/subnet_networkinterface.py +40 -31
  214. cartography/models/aws/ec2/volumes.py +47 -40
  215. cartography/models/aws/efs/__init__.py +0 -0
  216. cartography/models/aws/efs/mount_target.py +52 -0
  217. cartography/models/aws/eks/clusters.py +23 -21
  218. cartography/models/aws/emr.py +32 -30
  219. cartography/models/aws/iam/instanceprofile.py +33 -24
  220. cartography/models/aws/identitycenter/awsidentitycenter.py +18 -14
  221. cartography/models/aws/identitycenter/awspermissionset.py +37 -29
  222. cartography/models/aws/identitycenter/awsssouser.py +23 -21
  223. cartography/models/aws/inspector/findings.py +77 -65
  224. cartography/models/aws/inspector/packages.py +35 -29
  225. cartography/models/aws/s3/__init__.py +0 -0
  226. cartography/models/aws/s3/account_public_access_block.py +51 -0
  227. cartography/models/aws/sns/__init__.py +0 -0
  228. cartography/models/aws/sns/topic.py +50 -0
  229. cartography/models/aws/ssm/instance_information.py +51 -39
  230. cartography/models/aws/ssm/instance_patch.py +32 -26
  231. cartography/models/bigfix/bigfix_computer.py +42 -38
  232. cartography/models/bigfix/bigfix_root.py +3 -3
  233. cartography/models/cloudflare/__init__.py +0 -0
  234. cartography/models/cloudflare/account.py +25 -0
  235. cartography/models/cloudflare/dnsrecord.py +55 -0
  236. cartography/models/cloudflare/member.py +82 -0
  237. cartography/models/cloudflare/role.py +44 -0
  238. cartography/models/cloudflare/zone.py +59 -0
  239. cartography/models/core/common.py +12 -10
  240. cartography/models/core/nodes.py +5 -2
  241. cartography/models/core/relationships.py +14 -6
  242. cartography/models/crowdstrike/hosts.py +37 -35
  243. cartography/models/cve/cve.py +34 -32
  244. cartography/models/cve/cve_feed.py +6 -6
  245. cartography/models/digitalocean/__init__.py +0 -0
  246. cartography/models/digitalocean/account.py +21 -0
  247. cartography/models/digitalocean/droplet.py +56 -0
  248. cartography/models/digitalocean/project.py +48 -0
  249. cartography/models/duo/api_host.py +3 -3
  250. cartography/models/duo/endpoint.py +43 -41
  251. cartography/models/duo/group.py +14 -14
  252. cartography/models/duo/phone.py +27 -27
  253. cartography/models/duo/token.py +16 -16
  254. cartography/models/duo/user.py +46 -44
  255. cartography/models/duo/web_authn_credential.py +27 -19
  256. cartography/models/entra/ou.py +48 -0
  257. cartography/models/entra/tenant.py +24 -18
  258. cartography/models/entra/user.py +64 -48
  259. cartography/models/gcp/iam.py +23 -23
  260. cartography/models/github/orgs.py +5 -4
  261. cartography/models/github/teams.py +37 -31
  262. cartography/models/github/users.py +34 -23
  263. cartography/models/kandji/device.py +22 -16
  264. cartography/models/kandji/tenant.py +6 -4
  265. cartography/models/lastpass/tenant.py +3 -3
  266. cartography/models/lastpass/user.py +32 -28
  267. cartography/models/openai/__init__.py +0 -0
  268. cartography/models/openai/adminapikey.py +90 -0
  269. cartography/models/openai/apikey.py +84 -0
  270. cartography/models/openai/organization.py +17 -0
  271. cartography/models/openai/project.py +70 -0
  272. cartography/models/openai/serviceaccount.py +50 -0
  273. cartography/models/openai/user.py +49 -0
  274. cartography/models/semgrep/dependencies.py +36 -24
  275. cartography/models/semgrep/deployment.py +5 -5
  276. cartography/models/semgrep/findings.py +58 -42
  277. cartography/models/semgrep/locations.py +27 -21
  278. cartography/models/snipeit/asset.py +30 -21
  279. cartography/models/snipeit/tenant.py +6 -4
  280. cartography/models/snipeit/user.py +19 -12
  281. cartography/models/tailscale/__init__.py +0 -0
  282. cartography/models/tailscale/device.py +95 -0
  283. cartography/models/tailscale/group.py +86 -0
  284. cartography/models/tailscale/postureintegration.py +58 -0
  285. cartography/models/tailscale/tag.py +102 -0
  286. cartography/models/tailscale/tailnet.py +29 -0
  287. cartography/models/tailscale/user.py +52 -0
  288. cartography/stats.py +3 -3
  289. cartography/sync.py +113 -31
  290. cartography/util.py +84 -62
  291. {cartography-0.102.0rc2.dist-info → cartography-0.103.0.dist-info}/METADATA +8 -15
  292. cartography-0.103.0.dist-info/RECORD +442 -0
  293. {cartography-0.102.0rc2.dist-info → cartography-0.103.0.dist-info}/WHEEL +1 -1
  294. cartography-0.102.0rc2.dist-info/RECORD +0 -381
  295. {cartography-0.102.0rc2.dist-info → cartography-0.103.0.dist-info}/entry_points.txt +0 -0
  296. {cartography-0.102.0rc2.dist-info → cartography-0.103.0.dist-info}/licenses/LICENSE +0 -0
  297. {cartography-0.102.0rc2.dist-info → cartography-0.103.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,52 @@
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 TargetNodeMatcher
11
+
12
+
13
+ @dataclass(frozen=True)
14
+ class EfsMountTargetNodeProperties(CartographyNodeProperties):
15
+ id: PropertyRef = PropertyRef("MountTargetId")
16
+ arn: PropertyRef = PropertyRef("MountTargetId", extra_index=True)
17
+ fileSystem_id: PropertyRef = PropertyRef("FileSystemId")
18
+ lifecycle_state: PropertyRef = PropertyRef("LifeCycleState")
19
+ mount_target_id: PropertyRef = PropertyRef("MountTargetId")
20
+ subnet_id: PropertyRef = PropertyRef("SubnetId")
21
+ availability_zone_id: PropertyRef = PropertyRef("AvailabilityZoneId")
22
+ availability_zone_name: PropertyRef = PropertyRef("AvailabilityZoneName")
23
+ ip_address: PropertyRef = PropertyRef("IpAddress")
24
+ network_interface_id: PropertyRef = PropertyRef("NetworkInterfaceId")
25
+ owner_id: PropertyRef = PropertyRef("OwnerId")
26
+ vpc_id: PropertyRef = PropertyRef("VpcId")
27
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class EfsMountTargetToAwsAccountRelProperties(CartographyRelProperties):
32
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
33
+
34
+
35
+ @dataclass(frozen=True)
36
+ class EfsToAWSAccountRel(CartographyRelSchema):
37
+ target_node_label: str = "AWSAccount"
38
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
39
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
40
+ )
41
+ direction: LinkDirection = LinkDirection.INWARD
42
+ rel_label: str = "RESOURCE"
43
+ properties: EfsMountTargetToAwsAccountRelProperties = (
44
+ EfsMountTargetToAwsAccountRelProperties()
45
+ )
46
+
47
+
48
+ @dataclass(frozen=True)
49
+ class EfsMountTargetSchema(CartographyNodeSchema):
50
+ label: str = "EfsMountTarget"
51
+ properties: EfsMountTargetNodeProperties = EfsMountTargetNodeProperties()
52
+ sub_resource_relationship: EfsToAWSAccountRel = EfsToAWSAccountRel()
@@ -12,39 +12,41 @@ from cartography.models.core.relationships import TargetNodeMatcher
12
12
 
13
13
  @dataclass(frozen=True)
14
14
  class EKSClusterNodeProperties(CartographyNodeProperties):
15
- id: PropertyRef = PropertyRef('arn')
16
- arn: PropertyRef = PropertyRef('arn', extra_index=True)
17
- name: PropertyRef = PropertyRef('name', extra_index=True)
18
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
19
- created_at: PropertyRef = PropertyRef('created_at')
20
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
21
- endpoint: PropertyRef = PropertyRef('endpoint')
22
- endpoint_public_access: PropertyRef = PropertyRef('ClusterEndpointPublic')
23
- rolearn: PropertyRef = PropertyRef('roleArn')
24
- version: PropertyRef = PropertyRef('version')
25
- platform_version: PropertyRef = PropertyRef('platformVersion')
26
- status: PropertyRef = PropertyRef('status')
27
- audit_logging: PropertyRef = PropertyRef('ClusterLogging')
15
+ id: PropertyRef = PropertyRef("arn")
16
+ arn: PropertyRef = PropertyRef("arn", extra_index=True)
17
+ name: PropertyRef = PropertyRef("name", extra_index=True)
18
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
19
+ created_at: PropertyRef = PropertyRef("created_at")
20
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
21
+ endpoint: PropertyRef = PropertyRef("endpoint")
22
+ endpoint_public_access: PropertyRef = PropertyRef("ClusterEndpointPublic")
23
+ rolearn: PropertyRef = PropertyRef("roleArn")
24
+ version: PropertyRef = PropertyRef("version")
25
+ platform_version: PropertyRef = PropertyRef("platformVersion")
26
+ status: PropertyRef = PropertyRef("status")
27
+ audit_logging: PropertyRef = PropertyRef("ClusterLogging")
28
28
 
29
29
 
30
30
  @dataclass(frozen=True)
31
- class EKSClusterToAwsAccountRelProperties(CartographyRelProperties):
32
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
31
+ class EKSClusterToAWSAccountRelRelProperties(CartographyRelProperties):
32
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
33
33
 
34
34
 
35
35
  @dataclass(frozen=True)
36
- class EKSClusterToAWSAccount(CartographyRelSchema):
37
- target_node_label: str = 'AWSAccount'
36
+ class EKSClusterToAWSAccountRel(CartographyRelSchema):
37
+ target_node_label: str = "AWSAccount"
38
38
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
39
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
39
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
40
40
  )
41
41
  direction: LinkDirection = LinkDirection.INWARD
42
42
  rel_label: str = "RESOURCE"
43
- properties: EKSClusterToAwsAccountRelProperties = EKSClusterToAwsAccountRelProperties()
43
+ properties: EKSClusterToAWSAccountRelRelProperties = (
44
+ EKSClusterToAWSAccountRelRelProperties()
45
+ )
44
46
 
45
47
 
46
48
  @dataclass(frozen=True)
47
49
  class EKSClusterSchema(CartographyNodeSchema):
48
- label: str = 'EKSCluster'
50
+ label: str = "EKSCluster"
49
51
  properties: EKSClusterNodeProperties = EKSClusterNodeProperties()
50
- sub_resource_relationship: EKSClusterToAWSAccount = EKSClusterToAWSAccount()
52
+ sub_resource_relationship: EKSClusterToAWSAccountRel = EKSClusterToAWSAccountRel()
@@ -12,49 +12,51 @@ from cartography.models.core.relationships import TargetNodeMatcher
12
12
 
13
13
  @dataclass(frozen=True)
14
14
  class EMRClusterNodeProperties(CartographyNodeProperties):
15
- arn: PropertyRef = PropertyRef('ClusterArn', extra_index=True)
16
- auto_terminate: PropertyRef = PropertyRef('AutoTerminate')
17
- autoscaling_role: PropertyRef = PropertyRef('AutoScalingRole')
18
- custom_ami_id: PropertyRef = PropertyRef('CustomAmiId')
19
- id: PropertyRef = PropertyRef('Id')
20
- instance_collection_type: PropertyRef = PropertyRef('InstanceCollectionType')
21
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
22
- log_encryption_kms_key_id: PropertyRef = PropertyRef('LogEncryptionKmsKeyId')
23
- log_uri: PropertyRef = PropertyRef('LogUri')
24
- master_public_dns_name: PropertyRef = PropertyRef('MasterPublicDnsName')
25
- name: PropertyRef = PropertyRef('Name')
26
- outpost_arn: PropertyRef = PropertyRef('OutpostArn')
27
- region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
28
- release_label: PropertyRef = PropertyRef('ReleaseLabel')
29
- repo_upgrade_on_boot: PropertyRef = PropertyRef('RepoUpgradeOnBoot')
30
- requested_ami_version: PropertyRef = PropertyRef('RequestedAmiVersion')
31
- running_ami_version: PropertyRef = PropertyRef('RunningAmiVersion')
32
- scale_down_behavior: PropertyRef = PropertyRef('ScaleDownBehavior')
33
- security_configuration: PropertyRef = PropertyRef('SecurityConfiguration')
34
- servicerole: PropertyRef = PropertyRef('ServiceRole')
35
- termination_protected: PropertyRef = PropertyRef('TerminationProtected')
36
- visible_to_all_users: PropertyRef = PropertyRef('VisibleToAllUsers')
15
+ arn: PropertyRef = PropertyRef("ClusterArn", extra_index=True)
16
+ auto_terminate: PropertyRef = PropertyRef("AutoTerminate")
17
+ autoscaling_role: PropertyRef = PropertyRef("AutoScalingRole")
18
+ custom_ami_id: PropertyRef = PropertyRef("CustomAmiId")
19
+ id: PropertyRef = PropertyRef("Id")
20
+ instance_collection_type: PropertyRef = PropertyRef("InstanceCollectionType")
21
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
22
+ log_encryption_kms_key_id: PropertyRef = PropertyRef("LogEncryptionKmsKeyId")
23
+ log_uri: PropertyRef = PropertyRef("LogUri")
24
+ master_public_dns_name: PropertyRef = PropertyRef("MasterPublicDnsName")
25
+ name: PropertyRef = PropertyRef("Name")
26
+ outpost_arn: PropertyRef = PropertyRef("OutpostArn")
27
+ region: PropertyRef = PropertyRef("Region", set_in_kwargs=True)
28
+ release_label: PropertyRef = PropertyRef("ReleaseLabel")
29
+ repo_upgrade_on_boot: PropertyRef = PropertyRef("RepoUpgradeOnBoot")
30
+ requested_ami_version: PropertyRef = PropertyRef("RequestedAmiVersion")
31
+ running_ami_version: PropertyRef = PropertyRef("RunningAmiVersion")
32
+ scale_down_behavior: PropertyRef = PropertyRef("ScaleDownBehavior")
33
+ security_configuration: PropertyRef = PropertyRef("SecurityConfiguration")
34
+ servicerole: PropertyRef = PropertyRef("ServiceRole")
35
+ termination_protected: PropertyRef = PropertyRef("TerminationProtected")
36
+ visible_to_all_users: PropertyRef = PropertyRef("VisibleToAllUsers")
37
37
 
38
38
 
39
39
  @dataclass(frozen=True)
40
- class EMRClusterToAwsAccountRelProperties(CartographyRelProperties):
41
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
40
+ class EMRClusterToAWSAccountRelRelProperties(CartographyRelProperties):
41
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
42
42
 
43
43
 
44
44
  @dataclass(frozen=True)
45
45
  # (:EMRCluster)<-[:RESOURCE]-(:AWSAccount)
46
- class EMRClusterToAWSAccount(CartographyRelSchema):
47
- target_node_label: str = 'AWSAccount'
46
+ class EMRClusterToAWSAccountRel(CartographyRelSchema):
47
+ target_node_label: str = "AWSAccount"
48
48
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
49
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
49
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
50
50
  )
51
51
  direction: LinkDirection = LinkDirection.INWARD
52
52
  rel_label: str = "RESOURCE"
53
- properties: EMRClusterToAwsAccountRelProperties = EMRClusterToAwsAccountRelProperties()
53
+ properties: EMRClusterToAWSAccountRelRelProperties = (
54
+ EMRClusterToAWSAccountRelRelProperties()
55
+ )
54
56
 
55
57
 
56
58
  @dataclass(frozen=True)
57
59
  class EMRClusterSchema(CartographyNodeSchema):
58
- label: str = 'EMRCluster'
60
+ label: str = "EMRCluster"
59
61
  properties: EMRClusterNodeProperties = EMRClusterNodeProperties()
60
- sub_resource_relationship: EMRClusterToAWSAccount = EMRClusterToAWSAccount()
62
+ sub_resource_relationship: EMRClusterToAWSAccountRel = EMRClusterToAWSAccountRel()
@@ -16,52 +16,61 @@ class InstanceProfileNodeProperties(CartographyNodeProperties):
16
16
  """
17
17
  Schema describing a InstanceProfile.
18
18
  """
19
- arn: PropertyRef = PropertyRef('Arn')
20
- createdate: PropertyRef = PropertyRef('CreateDate')
21
- id: PropertyRef = PropertyRef('Arn')
22
- instance_profile_id: PropertyRef = PropertyRef('InstanceProfileId')
23
- instance_profile_name: PropertyRef = PropertyRef('InstanceProfileName')
24
- path: PropertyRef = PropertyRef('Path')
25
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
19
+
20
+ arn: PropertyRef = PropertyRef("Arn")
21
+ createdate: PropertyRef = PropertyRef("CreateDate")
22
+ id: PropertyRef = PropertyRef("Arn")
23
+ instance_profile_id: PropertyRef = PropertyRef("InstanceProfileId")
24
+ instance_profile_name: PropertyRef = PropertyRef("InstanceProfileName")
25
+ path: PropertyRef = PropertyRef("Path")
26
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
26
27
 
27
28
 
28
29
  @dataclass(frozen=True)
29
- class InstanceProfileToAwsAccountRelProperties(CartographyRelProperties):
30
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
30
+ class InstanceProfileToAWSAccountRelRelProperties(CartographyRelProperties):
31
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
31
32
 
32
33
 
33
34
  @dataclass(frozen=True)
34
- class InstanceProfileToAWSAccount(CartographyRelSchema):
35
- target_node_label: str = 'AWSAccount'
35
+ class InstanceProfileToAWSAccountRel(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: InstanceProfileToAwsAccountRelProperties = InstanceProfileToAwsAccountRelProperties()
42
+ properties: InstanceProfileToAWSAccountRelRelProperties = (
43
+ InstanceProfileToAWSAccountRelRelProperties()
44
+ )
42
45
 
43
46
 
44
47
  @dataclass(frozen=True)
45
- class InstanceProfileToAWSRoleRelProperties(CartographyRelProperties):
46
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
48
+ class InstanceProfileToAWSRoleRelRelProperties(CartographyRelProperties):
49
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
47
50
 
48
51
 
49
52
  @dataclass(frozen=True)
50
- class InstanceProfileToAWSRole(CartographyRelSchema):
51
- target_node_label: str = 'AWSRole'
53
+ class InstanceProfileToAWSRoleRel(CartographyRelSchema):
54
+ target_node_label: str = "AWSRole"
52
55
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
53
- {'arn': PropertyRef('Roles', one_to_many=True)},
56
+ {"arn": PropertyRef("Roles", one_to_many=True)},
54
57
  )
55
58
  direction: LinkDirection = LinkDirection.OUTWARD
56
59
  rel_label: str = "ASSOCIATED_WITH"
57
- properties: InstanceProfileToAWSRoleRelProperties = InstanceProfileToAWSRoleRelProperties()
60
+ properties: InstanceProfileToAWSRoleRelRelProperties = (
61
+ InstanceProfileToAWSRoleRelRelProperties()
62
+ )
58
63
 
59
64
 
60
65
  @dataclass(frozen=True)
61
66
  class InstanceProfileSchema(CartographyNodeSchema):
62
- label: str = 'AWSInstanceProfile'
67
+ label: str = "AWSInstanceProfile"
63
68
  properties: InstanceProfileNodeProperties = InstanceProfileNodeProperties()
64
- sub_resource_relationship: InstanceProfileToAWSAccount = InstanceProfileToAWSAccount()
65
- other_relationships: OtherRelationships = OtherRelationships([
66
- InstanceProfileToAWSRole(),
67
- ])
69
+ sub_resource_relationship: InstanceProfileToAWSAccountRel = (
70
+ InstanceProfileToAWSAccountRel()
71
+ )
72
+ other_relationships: OtherRelationships = OtherRelationships(
73
+ [
74
+ InstanceProfileToAWSRoleRel(),
75
+ ]
76
+ )
@@ -12,33 +12,37 @@ from cartography.models.core.relationships import TargetNodeMatcher
12
12
 
13
13
  @dataclass(frozen=True)
14
14
  class IdentityCenterInstanceProperties(CartographyNodeProperties):
15
- identity_store_id: PropertyRef = PropertyRef('IdentityStoreId')
16
- arn: PropertyRef = PropertyRef('InstanceArn')
17
- created_date: PropertyRef = PropertyRef('CreatedDate')
18
- id: PropertyRef = PropertyRef('InstanceArn')
19
- status: PropertyRef = PropertyRef('Status')
20
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
15
+ identity_store_id: PropertyRef = PropertyRef("IdentityStoreId")
16
+ arn: PropertyRef = PropertyRef("InstanceArn")
17
+ created_date: PropertyRef = PropertyRef("CreatedDate")
18
+ id: PropertyRef = PropertyRef("InstanceArn")
19
+ status: PropertyRef = PropertyRef("Status")
20
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
21
21
 
22
22
 
23
23
  @dataclass(frozen=True)
24
- class IdentityCenterToAwsAccountRelProperties(CartographyRelProperties):
25
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
24
+ class IdentityCenterToAWSAccountRelRelProperties(CartographyRelProperties):
25
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
26
26
 
27
27
 
28
28
  @dataclass(frozen=True)
29
29
  # (:IdentityCenter)<-[:RESOURCE]-(:AWSAccount)
30
- class IdentityCenterToAWSAccount(CartographyRelSchema):
31
- target_node_label: str = 'AWSAccount'
30
+ class IdentityCenterToAWSAccountRel(CartographyRelSchema):
31
+ target_node_label: str = "AWSAccount"
32
32
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
33
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
33
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
34
34
  )
35
35
  direction: LinkDirection = LinkDirection.INWARD
36
36
  rel_label: str = "RESOURCE"
37
- properties: IdentityCenterToAwsAccountRelProperties = IdentityCenterToAwsAccountRelProperties()
37
+ properties: IdentityCenterToAWSAccountRelRelProperties = (
38
+ IdentityCenterToAWSAccountRelRelProperties()
39
+ )
38
40
 
39
41
 
40
42
  @dataclass(frozen=True)
41
43
  class AWSIdentityCenterInstanceSchema(CartographyNodeSchema):
42
- label: str = 'AWSIdentityCenter'
44
+ label: str = "AWSIdentityCenter"
43
45
  properties: IdentityCenterInstanceProperties = IdentityCenterInstanceProperties()
44
- sub_resource_relationship: IdentityCenterToAWSAccount = IdentityCenterToAWSAccount()
46
+ sub_resource_relationship: IdentityCenterToAWSAccountRel = (
47
+ IdentityCenterToAWSAccountRel()
48
+ )
@@ -13,72 +13,80 @@ from cartography.models.core.relationships import TargetNodeMatcher
13
13
 
14
14
  @dataclass(frozen=True)
15
15
  class PermissionSetProperties(CartographyNodeProperties):
16
- id: PropertyRef = PropertyRef('PermissionSetArn')
17
- name: PropertyRef = PropertyRef('Name')
18
- arn: PropertyRef = PropertyRef('PermissionSetArn')
19
- description: PropertyRef = PropertyRef('Description')
20
- session_duration: PropertyRef = PropertyRef('SessionDuration')
21
- instance_arn: PropertyRef = PropertyRef('InstanceArn', set_in_kwargs=True)
22
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
16
+ id: PropertyRef = PropertyRef("PermissionSetArn")
17
+ name: PropertyRef = PropertyRef("Name")
18
+ arn: PropertyRef = PropertyRef("PermissionSetArn")
19
+ description: PropertyRef = PropertyRef("Description")
20
+ session_duration: PropertyRef = PropertyRef("SessionDuration")
21
+ instance_arn: PropertyRef = PropertyRef("InstanceArn", set_in_kwargs=True)
22
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
23
23
 
24
24
 
25
25
  @dataclass(frozen=True)
26
- class PermissionSetToInstanceRelProperties(CartographyRelProperties):
27
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
26
+ class PermissionSetToInstanceRelRelProperties(CartographyRelProperties):
27
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
28
28
 
29
29
 
30
30
  @dataclass(frozen=True)
31
- class PermissionSetToInstance(CartographyRelSchema):
32
- target_node_label: str = 'AWSIdentityCenter'
31
+ class PermissionSetToInstanceRel(CartographyRelSchema):
32
+ target_node_label: str = "AWSIdentityCenter"
33
33
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
34
- {'arn': PropertyRef('InstanceArn', set_in_kwargs=True)},
34
+ {"arn": PropertyRef("InstanceArn", set_in_kwargs=True)},
35
35
  )
36
36
  direction: LinkDirection = LinkDirection.INWARD
37
37
  rel_label: str = "HAS_PERMISSION_SET"
38
- properties: PermissionSetToInstanceRelProperties = PermissionSetToInstanceRelProperties()
38
+ properties: PermissionSetToInstanceRelRelProperties = (
39
+ PermissionSetToInstanceRelRelProperties()
40
+ )
39
41
 
40
42
 
41
43
  @dataclass(frozen=True)
42
- class PermissionSetToAWSRoleRelProperties(CartographyRelProperties):
43
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
44
+ class PermissionSetToAWSRoleRelRelProperties(CartographyRelProperties):
45
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
44
46
 
45
47
 
46
48
  @dataclass(frozen=True)
47
- class PermissionSetToAWSRole(CartographyRelSchema):
48
- target_node_label: str = 'AWSRole'
49
+ class PermissionSetToAWSRoleRel(CartographyRelSchema):
50
+ target_node_label: str = "AWSRole"
49
51
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
50
- {'arn': PropertyRef('RoleHint', fuzzy_and_ignore_case=True)},
52
+ {"arn": PropertyRef("RoleHint", fuzzy_and_ignore_case=True)},
51
53
  )
52
54
  direction: LinkDirection = LinkDirection.OUTWARD
53
55
  rel_label: str = "ASSIGNED_TO_ROLE"
54
- properties: PermissionSetToAWSRoleRelProperties = PermissionSetToAWSRoleRelProperties()
56
+ properties: PermissionSetToAWSRoleRelRelProperties = (
57
+ PermissionSetToAWSRoleRelRelProperties()
58
+ )
55
59
 
56
60
 
57
61
  @dataclass(frozen=True)
58
- class AWSPermissionSetToAwsAccountRelProperties(CartographyRelProperties):
59
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
62
+ class AWSPermissionSetToAWSAccountRelRelProperties(CartographyRelProperties):
63
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
60
64
 
61
65
 
62
66
  @dataclass(frozen=True)
63
67
  # (:IdentityCenter)<-[:RESOURCE]-(:AWSAccount)
64
- class AWSPermissionSetToAWSAccount(CartographyRelSchema):
65
- target_node_label: str = 'AWSAccount'
68
+ class AWSPermissionSetToAWSAccountRel(CartographyRelSchema):
69
+ target_node_label: str = "AWSAccount"
66
70
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
67
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
71
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
68
72
  )
69
73
  direction: LinkDirection = LinkDirection.INWARD
70
74
  rel_label: str = "RESOURCE"
71
- properties: AWSPermissionSetToAwsAccountRelProperties = AWSPermissionSetToAwsAccountRelProperties()
75
+ properties: AWSPermissionSetToAWSAccountRelRelProperties = (
76
+ AWSPermissionSetToAWSAccountRelRelProperties()
77
+ )
72
78
 
73
79
 
74
80
  @dataclass(frozen=True)
75
81
  class AWSPermissionSetSchema(CartographyNodeSchema):
76
- label: str = 'AWSPermissionSet'
82
+ label: str = "AWSPermissionSet"
77
83
  properties: PermissionSetProperties = PermissionSetProperties()
78
- sub_resource_relationship: AWSPermissionSetToAWSAccount = AWSPermissionSetToAWSAccount()
84
+ sub_resource_relationship: AWSPermissionSetToAWSAccountRel = (
85
+ AWSPermissionSetToAWSAccountRel()
86
+ )
79
87
  other_relationships: OtherRelationships = OtherRelationships(
80
88
  [
81
- PermissionSetToInstance(),
82
- PermissionSetToAWSRole(),
89
+ PermissionSetToInstanceRel(),
90
+ PermissionSetToAWSRoleRel(),
83
91
  ],
84
92
  )
@@ -14,55 +14,57 @@ from cartography.models.core.relationships import TargetNodeMatcher
14
14
 
15
15
  @dataclass(frozen=True)
16
16
  class SSOUserProperties(CartographyNodeProperties):
17
- id: PropertyRef = PropertyRef('UserId', extra_index=True)
18
- user_name: PropertyRef = PropertyRef('UserName')
19
- identity_store_id: PropertyRef = PropertyRef('IdentityStoreId')
20
- external_id: PropertyRef = PropertyRef('ExternalId', extra_index=True)
21
- region: PropertyRef = PropertyRef('Region')
22
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
17
+ id: PropertyRef = PropertyRef("UserId", extra_index=True)
18
+ user_name: PropertyRef = PropertyRef("UserName")
19
+ identity_store_id: PropertyRef = PropertyRef("IdentityStoreId")
20
+ external_id: PropertyRef = PropertyRef("ExternalId", extra_index=True)
21
+ region: PropertyRef = PropertyRef("Region")
22
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
23
23
 
24
24
 
25
25
  @dataclass(frozen=True)
26
- class SSOUserToOktaUserRelProperties(CartographyRelProperties):
27
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
26
+ class SSOUserToOktaUserRelRelProperties(CartographyRelProperties):
27
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
28
28
 
29
29
 
30
30
  @dataclass(frozen=True)
31
- class SSOUserToOktaUser(CartographyRelSchema):
32
- target_node_label: str = 'UserAccount'
31
+ class SSOUserToOktaUserRel(CartographyRelSchema):
32
+ target_node_label: str = "UserAccount"
33
33
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
34
- {'id': PropertyRef('ExternalId')},
34
+ {"id": PropertyRef("ExternalId")},
35
35
  )
36
36
  direction: LinkDirection = LinkDirection.INWARD
37
37
  rel_label: str = "CAN_ASSUME_IDENTITY"
38
- properties: SSOUserToOktaUserRelProperties = SSOUserToOktaUserRelProperties()
38
+ properties: SSOUserToOktaUserRelRelProperties = SSOUserToOktaUserRelRelProperties()
39
39
 
40
40
 
41
41
  @dataclass(frozen=True)
42
- class AWSSSOUserToAwsAccountRelProperties(CartographyRelProperties):
43
- lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
42
+ class AWSSSOUserToAWSAccountRelRelProperties(CartographyRelProperties):
43
+ lastupdated: PropertyRef = PropertyRef("lastupdated", set_in_kwargs=True)
44
44
 
45
45
 
46
46
  @dataclass(frozen=True)
47
47
  # (:IdentityCenter)<-[:RESOURCE]-(:AWSAccount)
48
- class AWSSSOUserToAWSAccount(CartographyRelSchema):
49
- target_node_label: str = 'AWSAccount'
48
+ class AWSSSOUserToAWSAccountRel(CartographyRelSchema):
49
+ target_node_label: str = "AWSAccount"
50
50
  target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
51
- {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
51
+ {"id": PropertyRef("AWS_ID", set_in_kwargs=True)},
52
52
  )
53
53
  direction: LinkDirection = LinkDirection.INWARD
54
54
  rel_label: str = "RESOURCE"
55
- properties: AWSSSOUserToAwsAccountRelProperties = AWSSSOUserToAwsAccountRelProperties()
55
+ properties: AWSSSOUserToAWSAccountRelRelProperties = (
56
+ AWSSSOUserToAWSAccountRelRelProperties()
57
+ )
56
58
 
57
59
 
58
60
  @dataclass(frozen=True)
59
61
  class AWSSSOUserSchema(CartographyNodeSchema):
60
- label: str = 'AWSSSOUser'
62
+ label: str = "AWSSSOUser"
61
63
  properties: SSOUserProperties = SSOUserProperties()
62
64
  extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(["UserAccount"])
63
- sub_resource_relationship: AWSSSOUserToAWSAccount = AWSSSOUserToAWSAccount()
65
+ sub_resource_relationship: AWSSSOUserToAWSAccountRel = AWSSSOUserToAWSAccountRel()
64
66
  other_relationships: OtherRelationships = OtherRelationships(
65
67
  [
66
- SSOUserToOktaUser(),
68
+ SSOUserToOktaUserRel(),
67
69
  ],
68
70
  )