cartography 0.93.0rc1__py3-none-any.whl → 0.123.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.
Files changed (822) hide show
  1. cartography/__main__.py +1 -2
  2. cartography/_version.py +34 -0
  3. cartography/cli.py +903 -225
  4. cartography/client/aws/__init__.py +19 -0
  5. cartography/client/aws/ecr.py +51 -0
  6. cartography/client/core/tx.py +400 -27
  7. cartography/config.py +215 -10
  8. cartography/data/azure_permission_relationships.yaml +20 -0
  9. cartography/data/gcp_permission_relationships.yaml +21 -0
  10. cartography/data/indexes.cypher +1 -200
  11. cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +17 -2
  12. cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +2 -2
  13. cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +1 -1
  14. cartography/data/jobs/analysis/keycloak_inheritance.json +30 -0
  15. cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -5
  16. cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -12
  17. cartography/data/jobs/cleanup/github_repos_cleanup.json +27 -0
  18. cartography/data/jobs/scoped_analysis/aws_ec2_iaminstanceprofile.json +15 -0
  19. cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +13 -13
  20. cartography/driftdetect/__main__.py +1 -2
  21. cartography/driftdetect/add_shortcut.py +10 -2
  22. cartography/driftdetect/cli.py +72 -75
  23. cartography/driftdetect/detect_deviations.py +7 -3
  24. cartography/driftdetect/get_states.py +20 -8
  25. cartography/driftdetect/model.py +5 -5
  26. cartography/driftdetect/serializers.py +8 -6
  27. cartography/driftdetect/storage.py +2 -2
  28. cartography/graph/cleanupbuilder.py +255 -35
  29. cartography/graph/job.py +104 -20
  30. cartography/graph/querybuilder.py +689 -91
  31. cartography/graph/statement.py +49 -36
  32. cartography/intel/airbyte/__init__.py +105 -0
  33. cartography/intel/airbyte/connections.py +120 -0
  34. cartography/intel/airbyte/destinations.py +81 -0
  35. cartography/intel/airbyte/organizations.py +59 -0
  36. cartography/intel/airbyte/sources.py +78 -0
  37. cartography/intel/airbyte/tags.py +64 -0
  38. cartography/intel/airbyte/users.py +106 -0
  39. cartography/intel/airbyte/util.py +122 -0
  40. cartography/intel/airbyte/workspaces.py +63 -0
  41. cartography/intel/analysis.py +4 -1
  42. cartography/intel/anthropic/__init__.py +62 -0
  43. cartography/intel/anthropic/apikeys.py +72 -0
  44. cartography/intel/anthropic/users.py +75 -0
  45. cartography/intel/anthropic/util.py +51 -0
  46. cartography/intel/anthropic/workspaces.py +95 -0
  47. cartography/intel/aws/__init__.py +137 -59
  48. cartography/intel/aws/acm.py +124 -0
  49. cartography/intel/aws/apigateway.py +482 -217
  50. cartography/intel/aws/apigatewayv2.py +116 -0
  51. cartography/intel/aws/cloudtrail.py +105 -0
  52. cartography/intel/aws/cloudtrail_management_events.py +962 -0
  53. cartography/intel/aws/cloudwatch.py +239 -0
  54. cartography/intel/aws/codebuild.py +132 -0
  55. cartography/intel/aws/cognito.py +201 -0
  56. cartography/intel/aws/config.py +63 -23
  57. cartography/intel/aws/dynamodb.py +108 -40
  58. cartography/intel/aws/ec2/__init__.py +2 -2
  59. cartography/intel/aws/ec2/auto_scaling_groups.py +254 -189
  60. cartography/intel/aws/ec2/elastic_ip_addresses.py +44 -14
  61. cartography/intel/aws/ec2/images.py +74 -39
  62. cartography/intel/aws/ec2/instances.py +262 -137
  63. cartography/intel/aws/ec2/internet_gateways.py +44 -13
  64. cartography/intel/aws/ec2/key_pairs.py +72 -39
  65. cartography/intel/aws/ec2/launch_templates.py +143 -66
  66. cartography/intel/aws/ec2/load_balancer_v2s.py +119 -45
  67. cartography/intel/aws/ec2/load_balancers.py +165 -147
  68. cartography/intel/aws/ec2/network_acls.py +233 -0
  69. cartography/intel/aws/ec2/network_interfaces.py +150 -87
  70. cartography/intel/aws/ec2/reserved_instances.py +48 -17
  71. cartography/intel/aws/ec2/route_tables.py +327 -0
  72. cartography/intel/aws/ec2/security_groups.py +189 -121
  73. cartography/intel/aws/ec2/snapshots.py +93 -91
  74. cartography/intel/aws/ec2/subnets.py +70 -58
  75. cartography/intel/aws/ec2/tgw.py +111 -39
  76. cartography/intel/aws/ec2/util.py +1 -1
  77. cartography/intel/aws/ec2/volumes.py +69 -41
  78. cartography/intel/aws/ec2/vpc.py +157 -116
  79. cartography/intel/aws/ec2/vpc_peerings.py +317 -121
  80. cartography/intel/aws/ecr.py +336 -93
  81. cartography/intel/aws/ecr_image_layers.py +923 -0
  82. cartography/intel/aws/ecs.py +310 -403
  83. cartography/intel/aws/efs.py +261 -0
  84. cartography/intel/aws/eks.py +55 -29
  85. cartography/intel/aws/elasticache.py +130 -83
  86. cartography/intel/aws/elasticsearch.py +70 -24
  87. cartography/intel/aws/emr.py +61 -23
  88. cartography/intel/aws/eventbridge.py +164 -0
  89. cartography/intel/aws/glue.py +181 -0
  90. cartography/intel/aws/guardduty.py +443 -0
  91. cartography/intel/aws/iam.py +978 -464
  92. cartography/intel/aws/iam_instance_profiles.py +73 -0
  93. cartography/intel/aws/identitycenter.py +847 -0
  94. cartography/intel/aws/inspector.py +330 -133
  95. cartography/intel/aws/kms.py +235 -209
  96. cartography/intel/aws/lambda_function.py +328 -176
  97. cartography/intel/aws/organizations.py +40 -19
  98. cartography/intel/aws/permission_relationships.py +144 -68
  99. cartography/intel/aws/rds.py +467 -412
  100. cartography/intel/aws/redshift.py +116 -50
  101. cartography/intel/aws/resourcegroupstaggingapi.py +198 -82
  102. cartography/intel/aws/resources.py +80 -42
  103. cartography/intel/aws/route53.py +419 -318
  104. cartography/intel/aws/s3.py +489 -96
  105. cartography/intel/aws/s3accountpublicaccessblock.py +157 -0
  106. cartography/intel/aws/secretsmanager.py +217 -40
  107. cartography/intel/aws/securityhub.py +23 -10
  108. cartography/intel/aws/sns.py +226 -0
  109. cartography/intel/aws/sqs.py +74 -96
  110. cartography/intel/aws/ssm.py +142 -33
  111. cartography/intel/aws/util/arns.py +7 -7
  112. cartography/intel/aws/util/common.py +31 -4
  113. cartography/intel/azure/__init__.py +259 -46
  114. cartography/intel/azure/aks.py +175 -0
  115. cartography/intel/azure/app_service.py +105 -0
  116. cartography/intel/azure/compute.py +141 -120
  117. cartography/intel/azure/container_instances.py +95 -0
  118. cartography/intel/azure/cosmosdb.py +706 -519
  119. cartography/intel/azure/data_factory.py +85 -0
  120. cartography/intel/azure/data_factory_dataset.py +128 -0
  121. cartography/intel/azure/data_factory_linked_service.py +119 -0
  122. cartography/intel/azure/data_factory_pipeline.py +142 -0
  123. cartography/intel/azure/data_lake.py +124 -0
  124. cartography/intel/azure/event_grid.py +94 -0
  125. cartography/intel/azure/functions.py +124 -0
  126. cartography/intel/azure/load_balancers.py +263 -0
  127. cartography/intel/azure/logic_apps.py +101 -0
  128. cartography/intel/azure/monitor.py +105 -0
  129. cartography/intel/azure/network.py +467 -0
  130. cartography/intel/azure/permission_relationships.py +466 -0
  131. cartography/intel/azure/rbac.py +309 -0
  132. cartography/intel/azure/resource_groups.py +82 -0
  133. cartography/intel/azure/security_center.py +106 -0
  134. cartography/intel/azure/sql.py +436 -392
  135. cartography/intel/azure/storage.py +467 -335
  136. cartography/intel/azure/subscription.py +49 -55
  137. cartography/intel/azure/tenant.py +46 -28
  138. cartography/intel/azure/util/common.py +13 -0
  139. cartography/intel/azure/util/credentials.py +58 -143
  140. cartography/intel/azure/util/tag.py +41 -0
  141. cartography/intel/bigfix/__init__.py +2 -2
  142. cartography/intel/bigfix/computers.py +93 -65
  143. cartography/intel/cloudflare/__init__.py +74 -0
  144. cartography/intel/cloudflare/accounts.py +57 -0
  145. cartography/intel/cloudflare/dnsrecords.py +64 -0
  146. cartography/intel/cloudflare/members.py +75 -0
  147. cartography/intel/cloudflare/roles.py +65 -0
  148. cartography/intel/cloudflare/zones.py +64 -0
  149. cartography/intel/create_indexes.py +5 -3
  150. cartography/intel/crowdstrike/__init__.py +26 -12
  151. cartography/intel/crowdstrike/endpoints.py +17 -45
  152. cartography/intel/crowdstrike/spotlight.py +13 -5
  153. cartography/intel/cve/__init__.py +91 -26
  154. cartography/intel/cve/feed.py +77 -56
  155. cartography/intel/digitalocean/__init__.py +22 -13
  156. cartography/intel/digitalocean/compute.py +75 -108
  157. cartography/intel/digitalocean/management.py +44 -80
  158. cartography/intel/digitalocean/platform.py +48 -43
  159. cartography/intel/dns.py +41 -12
  160. cartography/intel/duo/__init__.py +21 -16
  161. cartography/intel/duo/api_host.py +14 -9
  162. cartography/intel/duo/endpoints.py +50 -45
  163. cartography/intel/duo/groups.py +18 -14
  164. cartography/intel/duo/phones.py +37 -34
  165. cartography/intel/duo/tokens.py +26 -23
  166. cartography/intel/duo/users.py +54 -50
  167. cartography/intel/duo/web_authn_credentials.py +30 -25
  168. cartography/intel/entra/__init__.py +160 -0
  169. cartography/intel/entra/app_role_assignments.py +284 -0
  170. cartography/intel/entra/applications.py +182 -0
  171. cartography/intel/entra/federation/__init__.py +0 -0
  172. cartography/intel/entra/federation/aws_identity_center.py +77 -0
  173. cartography/intel/entra/groups.py +198 -0
  174. cartography/intel/entra/ou.py +136 -0
  175. cartography/intel/entra/service_principals.py +217 -0
  176. cartography/intel/entra/users.py +259 -0
  177. cartography/intel/gcp/__init__.py +381 -175
  178. cartography/intel/gcp/bigtable_app_profile.py +101 -0
  179. cartography/intel/gcp/bigtable_backup.py +91 -0
  180. cartography/intel/gcp/bigtable_cluster.py +93 -0
  181. cartography/intel/gcp/bigtable_instance.py +86 -0
  182. cartography/intel/gcp/bigtable_table.py +87 -0
  183. cartography/intel/gcp/cai.py +292 -0
  184. cartography/intel/gcp/clients.py +112 -0
  185. cartography/intel/gcp/compute.py +521 -325
  186. cartography/intel/gcp/crm/__init__.py +0 -0
  187. cartography/intel/gcp/crm/folders.py +114 -0
  188. cartography/intel/gcp/crm/orgs.py +70 -0
  189. cartography/intel/gcp/crm/projects.py +120 -0
  190. cartography/intel/gcp/dns.py +134 -179
  191. cartography/intel/gcp/gke.py +100 -107
  192. cartography/intel/gcp/iam.py +262 -0
  193. cartography/intel/gcp/permission_relationships.py +394 -0
  194. cartography/intel/gcp/policy_bindings.py +225 -0
  195. cartography/intel/gcp/storage.py +103 -158
  196. cartography/intel/github/__init__.py +66 -27
  197. cartography/intel/github/commits.py +423 -0
  198. cartography/intel/github/repos.py +871 -160
  199. cartography/intel/github/teams.py +386 -53
  200. cartography/intel/github/users.py +214 -49
  201. cartography/intel/github/util.py +50 -35
  202. cartography/intel/googleworkspace/__init__.py +193 -0
  203. cartography/intel/googleworkspace/devices.py +254 -0
  204. cartography/intel/googleworkspace/groups.py +568 -0
  205. cartography/intel/googleworkspace/oauth_apps.py +259 -0
  206. cartography/intel/googleworkspace/tenant.py +85 -0
  207. cartography/intel/googleworkspace/users.py +138 -0
  208. cartography/intel/gsuite/__init__.py +101 -42
  209. cartography/intel/gsuite/groups.py +291 -0
  210. cartography/intel/gsuite/users.py +142 -0
  211. cartography/intel/jamf/__init__.py +19 -1
  212. cartography/intel/jamf/computers.py +37 -8
  213. cartography/intel/jamf/util.py +7 -2
  214. cartography/intel/kandji/__init__.py +6 -3
  215. cartography/intel/kandji/devices.py +40 -10
  216. cartography/intel/keycloak/__init__.py +153 -0
  217. cartography/intel/keycloak/authenticationexecutions.py +322 -0
  218. cartography/intel/keycloak/authenticationflows.py +77 -0
  219. cartography/intel/keycloak/clients.py +187 -0
  220. cartography/intel/keycloak/groups.py +126 -0
  221. cartography/intel/keycloak/identityproviders.py +94 -0
  222. cartography/intel/keycloak/organizations.py +163 -0
  223. cartography/intel/keycloak/realms.py +61 -0
  224. cartography/intel/keycloak/roles.py +202 -0
  225. cartography/intel/keycloak/scopes.py +73 -0
  226. cartography/intel/keycloak/users.py +70 -0
  227. cartography/intel/keycloak/util.py +47 -0
  228. cartography/intel/kubernetes/__init__.py +60 -14
  229. cartography/intel/kubernetes/clusters.py +86 -0
  230. cartography/intel/kubernetes/eks.py +402 -0
  231. cartography/intel/kubernetes/namespaces.py +60 -55
  232. cartography/intel/kubernetes/pods.py +171 -75
  233. cartography/intel/kubernetes/rbac.py +597 -0
  234. cartography/intel/kubernetes/secrets.py +95 -45
  235. cartography/intel/kubernetes/services.py +131 -63
  236. cartography/intel/kubernetes/util.py +142 -14
  237. cartography/intel/lastpass/__init__.py +2 -2
  238. cartography/intel/lastpass/users.py +23 -12
  239. cartography/intel/oci/__init__.py +44 -11
  240. cartography/intel/oci/iam.py +157 -47
  241. cartography/intel/oci/organizations.py +16 -7
  242. cartography/intel/oci/utils.py +71 -25
  243. cartography/intel/okta/__init__.py +66 -15
  244. cartography/intel/okta/applications.py +57 -25
  245. cartography/intel/okta/awssaml.py +105 -41
  246. cartography/intel/okta/factors.py +19 -5
  247. cartography/intel/okta/groups.py +61 -31
  248. cartography/intel/okta/organization.py +8 -2
  249. cartography/intel/okta/origins.py +9 -3
  250. cartography/intel/okta/roles.py +20 -7
  251. cartography/intel/okta/users.py +31 -10
  252. cartography/intel/okta/utils.py +6 -4
  253. cartography/intel/ontology/__init__.py +44 -0
  254. cartography/intel/ontology/devices.py +54 -0
  255. cartography/intel/ontology/users.py +54 -0
  256. cartography/intel/ontology/utils.py +176 -0
  257. cartography/intel/openai/__init__.py +86 -0
  258. cartography/intel/openai/adminapikeys.py +89 -0
  259. cartography/intel/openai/apikeys.py +96 -0
  260. cartography/intel/openai/projects.py +97 -0
  261. cartography/intel/openai/serviceaccounts.py +82 -0
  262. cartography/intel/openai/users.py +75 -0
  263. cartography/intel/openai/util.py +45 -0
  264. cartography/intel/pagerduty/__init__.py +8 -7
  265. cartography/intel/pagerduty/escalation_policies.py +31 -12
  266. cartography/intel/pagerduty/schedules.py +21 -8
  267. cartography/intel/pagerduty/services.py +18 -7
  268. cartography/intel/pagerduty/teams.py +13 -5
  269. cartography/intel/pagerduty/users.py +6 -2
  270. cartography/intel/pagerduty/vendors.py +6 -2
  271. cartography/intel/scaleway/__init__.py +127 -0
  272. cartography/intel/scaleway/iam/__init__.py +0 -0
  273. cartography/intel/scaleway/iam/apikeys.py +71 -0
  274. cartography/intel/scaleway/iam/applications.py +71 -0
  275. cartography/intel/scaleway/iam/groups.py +71 -0
  276. cartography/intel/scaleway/iam/users.py +71 -0
  277. cartography/intel/scaleway/instances/__init__.py +0 -0
  278. cartography/intel/scaleway/instances/flexibleips.py +86 -0
  279. cartography/intel/scaleway/instances/instances.py +92 -0
  280. cartography/intel/scaleway/projects.py +79 -0
  281. cartography/intel/scaleway/storage/__init__.py +0 -0
  282. cartography/intel/scaleway/storage/snapshots.py +86 -0
  283. cartography/intel/scaleway/storage/volumes.py +84 -0
  284. cartography/intel/scaleway/utils.py +37 -0
  285. cartography/intel/semgrep/__init__.py +30 -5
  286. cartography/intel/semgrep/dependencies.py +255 -0
  287. cartography/intel/semgrep/deployment.py +69 -0
  288. cartography/intel/semgrep/findings.py +157 -117
  289. cartography/intel/sentinelone/__init__.py +75 -0
  290. cartography/intel/sentinelone/account.py +140 -0
  291. cartography/intel/sentinelone/agent.py +139 -0
  292. cartography/intel/sentinelone/api.py +124 -0
  293. cartography/intel/sentinelone/application.py +248 -0
  294. cartography/intel/sentinelone/cve.py +119 -0
  295. cartography/intel/sentinelone/utils.py +28 -0
  296. cartography/intel/slack/__init__.py +78 -0
  297. cartography/intel/slack/channels.py +80 -0
  298. cartography/intel/slack/groups.py +90 -0
  299. cartography/intel/slack/teams.py +65 -0
  300. cartography/intel/slack/users.py +57 -0
  301. cartography/intel/slack/utils.py +29 -0
  302. cartography/intel/snipeit/__init__.py +44 -0
  303. cartography/intel/snipeit/asset.py +80 -0
  304. cartography/intel/snipeit/user.py +78 -0
  305. cartography/intel/snipeit/util.py +40 -0
  306. cartography/intel/spacelift/__init__.py +161 -0
  307. cartography/intel/spacelift/account.py +73 -0
  308. cartography/intel/spacelift/ec2_ownership.py +280 -0
  309. cartography/intel/spacelift/runs.py +463 -0
  310. cartography/intel/spacelift/spaces.py +112 -0
  311. cartography/intel/spacelift/stacks.py +119 -0
  312. cartography/intel/spacelift/util.py +122 -0
  313. cartography/intel/spacelift/workerpools.py +131 -0
  314. cartography/intel/spacelift/workers.py +128 -0
  315. cartography/intel/tailscale/__init__.py +77 -0
  316. cartography/intel/tailscale/acls.py +146 -0
  317. cartography/intel/tailscale/devices.py +127 -0
  318. cartography/intel/tailscale/postureintegrations.py +81 -0
  319. cartography/intel/tailscale/tailnets.py +76 -0
  320. cartography/intel/tailscale/users.py +80 -0
  321. cartography/intel/tailscale/utils.py +132 -0
  322. cartography/intel/trivy/__init__.py +272 -0
  323. cartography/intel/trivy/scanner.py +386 -0
  324. cartography/models/airbyte/__init__.py +0 -0
  325. cartography/models/airbyte/connection.py +138 -0
  326. cartography/models/airbyte/destination.py +75 -0
  327. cartography/models/airbyte/organization.py +19 -0
  328. cartography/models/airbyte/source.py +75 -0
  329. cartography/models/airbyte/stream.py +74 -0
  330. cartography/models/airbyte/tag.py +69 -0
  331. cartography/models/airbyte/user.py +115 -0
  332. cartography/models/airbyte/workspace.py +46 -0
  333. cartography/models/anthropic/__init__.py +0 -0
  334. cartography/models/anthropic/apikey.py +94 -0
  335. cartography/models/anthropic/organization.py +19 -0
  336. cartography/models/anthropic/user.py +52 -0
  337. cartography/models/anthropic/workspace.py +90 -0
  338. cartography/models/aws/acm/__init__.py +0 -0
  339. cartography/models/aws/acm/certificate.py +75 -0
  340. cartography/models/aws/apigateway/__init__.py +0 -0
  341. cartography/models/aws/apigateway/apigateway.py +51 -0
  342. cartography/models/aws/apigateway/apigatewaycertificate.py +72 -0
  343. cartography/models/aws/apigateway/apigatewaydeployment.py +74 -0
  344. cartography/models/aws/apigateway/apigatewayintegration.py +79 -0
  345. cartography/models/aws/apigateway/apigatewaymethod.py +74 -0
  346. cartography/models/aws/apigateway/apigatewayresource.py +70 -0
  347. cartography/models/aws/apigateway/apigatewaystage.py +75 -0
  348. cartography/models/aws/apigatewayv2/__init__.py +0 -0
  349. cartography/models/aws/apigatewayv2/apigatewayv2.py +53 -0
  350. cartography/models/aws/cloudtrail/__init__.py +0 -0
  351. cartography/models/aws/cloudtrail/management_events.py +153 -0
  352. cartography/models/aws/cloudtrail/trail.py +106 -0
  353. cartography/models/aws/cloudwatch/__init__.py +0 -0
  354. cartography/models/aws/cloudwatch/log_metric_filter.py +79 -0
  355. cartography/models/aws/cloudwatch/loggroup.py +52 -0
  356. cartography/models/aws/cloudwatch/metric_alarm.py +53 -0
  357. cartography/models/aws/codebuild/__init__.py +0 -0
  358. cartography/models/aws/codebuild/project.py +49 -0
  359. cartography/models/aws/cognito/__init__.py +0 -0
  360. cartography/models/aws/cognito/identity_pool.py +70 -0
  361. cartography/models/aws/cognito/user_pool.py +47 -0
  362. cartography/models/aws/dynamodb/gsi.py +30 -22
  363. cartography/models/aws/dynamodb/tables.py +27 -17
  364. cartography/models/aws/ec2/auto_scaling_groups.py +224 -0
  365. cartography/models/aws/ec2/images.py +36 -34
  366. cartography/models/aws/ec2/instances.py +85 -38
  367. cartography/models/aws/ec2/keypair.py +59 -0
  368. cartography/models/aws/ec2/keypair_instance.py +76 -0
  369. cartography/models/aws/ec2/launch_configurations.py +59 -0
  370. cartography/models/aws/ec2/launch_template_versions.py +48 -38
  371. cartography/models/aws/ec2/launch_templates.py +21 -17
  372. cartography/models/aws/ec2/load_balancer_listeners.py +72 -0
  373. cartography/models/aws/ec2/load_balancers.py +112 -0
  374. cartography/models/aws/ec2/network_acl_rules.py +106 -0
  375. cartography/models/aws/ec2/network_acls.py +95 -0
  376. cartography/models/aws/ec2/networkinterface_instance.py +52 -39
  377. cartography/models/aws/ec2/networkinterfaces.py +57 -37
  378. cartography/models/aws/ec2/privateip_networkinterface.py +32 -22
  379. cartography/models/aws/ec2/reservations.py +18 -14
  380. cartography/models/aws/ec2/route_table_associations.py +97 -0
  381. cartography/models/aws/ec2/route_tables.py +128 -0
  382. cartography/models/aws/ec2/routes.py +85 -0
  383. cartography/models/aws/ec2/security_group_rules.py +109 -0
  384. cartography/models/aws/ec2/security_groups.py +90 -0
  385. cartography/models/aws/ec2/securitygroup_instance.py +29 -20
  386. cartography/models/aws/ec2/securitygroup_networkinterface.py +24 -15
  387. cartography/models/aws/ec2/snapshots.py +58 -0
  388. cartography/models/aws/ec2/subnet_instance.py +26 -19
  389. cartography/models/aws/ec2/subnet_networkinterface.py +42 -31
  390. cartography/models/aws/ec2/subnets.py +65 -0
  391. cartography/models/aws/ec2/volumes.py +67 -40
  392. cartography/models/aws/ec2/vpc.py +46 -0
  393. cartography/models/aws/ec2/vpc_cidr.py +102 -0
  394. cartography/models/aws/ec2/vpc_peering.py +157 -0
  395. cartography/models/aws/ecr/__init__.py +0 -0
  396. cartography/models/aws/ecr/image.py +146 -0
  397. cartography/models/aws/ecr/image_layer.py +107 -0
  398. cartography/models/aws/ecr/repository.py +72 -0
  399. cartography/models/aws/ecr/repository_image.py +95 -0
  400. cartography/models/aws/ecs/__init__.py +0 -0
  401. cartography/models/aws/ecs/clusters.py +64 -0
  402. cartography/models/aws/ecs/container_definitions.py +93 -0
  403. cartography/models/aws/ecs/container_instances.py +84 -0
  404. cartography/models/aws/ecs/containers.py +101 -0
  405. cartography/models/aws/ecs/services.py +134 -0
  406. cartography/models/aws/ecs/task_definitions.py +135 -0
  407. cartography/models/aws/ecs/tasks.py +134 -0
  408. cartography/models/aws/efs/__init__.py +0 -0
  409. cartography/models/aws/efs/access_point.py +77 -0
  410. cartography/models/aws/efs/file_system.py +60 -0
  411. cartography/models/aws/efs/mount_target.py +79 -0
  412. cartography/models/aws/eks/clusters.py +23 -21
  413. cartography/models/aws/elasticache/__init__.py +0 -0
  414. cartography/models/aws/elasticache/cluster.py +65 -0
  415. cartography/models/aws/elasticache/topic.py +67 -0
  416. cartography/models/aws/emr.py +32 -30
  417. cartography/models/aws/eventbridge/__init__.py +0 -0
  418. cartography/models/aws/eventbridge/rule.py +77 -0
  419. cartography/models/aws/eventbridge/target.py +71 -0
  420. cartography/models/aws/glue/__init__.py +0 -0
  421. cartography/models/aws/glue/connection.py +51 -0
  422. cartography/models/aws/glue/job.py +69 -0
  423. cartography/models/aws/guardduty/__init__.py +1 -0
  424. cartography/models/aws/guardduty/detectors.py +50 -0
  425. cartography/models/aws/guardduty/findings.py +121 -0
  426. cartography/models/aws/iam/__init__.py +0 -0
  427. cartography/models/aws/iam/access_key.py +103 -0
  428. cartography/models/aws/iam/account_role.py +24 -0
  429. cartography/models/aws/iam/federated_principal.py +60 -0
  430. cartography/models/aws/iam/group.py +60 -0
  431. cartography/models/aws/iam/group_membership.py +27 -0
  432. cartography/models/aws/iam/inline_policy.py +78 -0
  433. cartography/models/aws/iam/instanceprofile.py +76 -0
  434. cartography/models/aws/iam/managed_policy.py +51 -0
  435. cartography/models/aws/iam/policy_statement.py +57 -0
  436. cartography/models/aws/iam/role.py +83 -0
  437. cartography/models/aws/iam/root_principal.py +52 -0
  438. cartography/models/aws/iam/service_principal.py +30 -0
  439. cartography/models/aws/iam/sts_assumerole_allow.py +38 -0
  440. cartography/models/aws/iam/user.py +59 -0
  441. cartography/models/aws/identitycenter/__init__.py +0 -0
  442. cartography/models/aws/identitycenter/awsidentitycenter.py +49 -0
  443. cartography/models/aws/identitycenter/awspermissionset.py +162 -0
  444. cartography/models/aws/identitycenter/awssogroup.py +70 -0
  445. cartography/models/aws/identitycenter/awsssouser.py +110 -0
  446. cartography/models/aws/inspector/findings.py +124 -58
  447. cartography/models/aws/inspector/packages.py +18 -42
  448. cartography/models/aws/kms/__init__.py +0 -0
  449. cartography/models/aws/kms/aliases.py +86 -0
  450. cartography/models/aws/kms/grants.py +65 -0
  451. cartography/models/aws/kms/keys.py +88 -0
  452. cartography/models/aws/lambda_function/__init__.py +0 -0
  453. cartography/models/aws/lambda_function/alias.py +74 -0
  454. cartography/models/aws/lambda_function/event_source_mapping.py +88 -0
  455. cartography/models/aws/lambda_function/lambda_function.py +91 -0
  456. cartography/models/aws/lambda_function/layer.py +72 -0
  457. cartography/models/aws/rds/__init__.py +0 -0
  458. cartography/models/aws/rds/cluster.py +91 -0
  459. cartography/models/aws/rds/event_subscription.py +146 -0
  460. cartography/models/aws/rds/instance.py +156 -0
  461. cartography/models/aws/rds/snapshot.py +108 -0
  462. cartography/models/aws/rds/subnet_group.py +101 -0
  463. cartography/models/aws/route53/__init__.py +0 -0
  464. cartography/models/aws/route53/dnsrecord.py +235 -0
  465. cartography/models/aws/route53/nameserver.py +63 -0
  466. cartography/models/aws/route53/subzone.py +40 -0
  467. cartography/models/aws/route53/zone.py +47 -0
  468. cartography/models/aws/s3/__init__.py +0 -0
  469. cartography/models/aws/s3/account_public_access_block.py +51 -0
  470. cartography/models/aws/s3/notification.py +24 -0
  471. cartography/models/aws/secretsmanager/__init__.py +0 -0
  472. cartography/models/aws/secretsmanager/secret.py +106 -0
  473. cartography/models/aws/secretsmanager/secret_version.py +114 -0
  474. cartography/models/aws/sns/__init__.py +0 -0
  475. cartography/models/aws/sns/topic.py +50 -0
  476. cartography/models/aws/sns/topic_subscription.py +74 -0
  477. cartography/models/aws/sqs/__init__.py +0 -0
  478. cartography/models/aws/sqs/queue.py +89 -0
  479. cartography/models/aws/ssm/instance_information.py +51 -39
  480. cartography/models/aws/ssm/instance_patch.py +32 -26
  481. cartography/models/aws/ssm/parameters.py +84 -0
  482. cartography/models/azure/__init__.py +0 -0
  483. cartography/models/azure/aks_cluster.py +54 -0
  484. cartography/models/azure/aks_nodepool.py +54 -0
  485. cartography/models/azure/app_service.py +59 -0
  486. cartography/models/azure/container_instance.py +57 -0
  487. cartography/models/azure/cosmosdb/__init__.py +0 -0
  488. cartography/models/azure/cosmosdb/account.py +77 -0
  489. cartography/models/azure/cosmosdb/accountfailoverpolicy.py +77 -0
  490. cartography/models/azure/cosmosdb/cassandrakeyspace.py +82 -0
  491. cartography/models/azure/cosmosdb/cassandratable.py +81 -0
  492. cartography/models/azure/cosmosdb/corspolicy.py +74 -0
  493. cartography/models/azure/cosmosdb/dblocation.py +120 -0
  494. cartography/models/azure/cosmosdb/mongodbcollection.py +82 -0
  495. cartography/models/azure/cosmosdb/mongodbdatabase.py +78 -0
  496. cartography/models/azure/cosmosdb/privateendpointconnection.py +81 -0
  497. cartography/models/azure/cosmosdb/sqlcontainer.py +88 -0
  498. cartography/models/azure/cosmosdb/sqldatabase.py +78 -0
  499. cartography/models/azure/cosmosdb/tableresource.py +76 -0
  500. cartography/models/azure/cosmosdb/virtualnetworkrule.py +78 -0
  501. cartography/models/azure/data_factory/__init__.py +0 -0
  502. cartography/models/azure/data_factory/data_factory.py +51 -0
  503. cartography/models/azure/data_factory/data_factory_dataset.py +94 -0
  504. cartography/models/azure/data_factory/data_factory_linked_service.py +78 -0
  505. cartography/models/azure/data_factory/data_factory_pipeline.py +93 -0
  506. cartography/models/azure/data_lake_filesystem.py +51 -0
  507. cartography/models/azure/event_grid_topic.py +57 -0
  508. cartography/models/azure/function_app.py +59 -0
  509. cartography/models/azure/load_balancer/__init__.py +0 -0
  510. cartography/models/azure/load_balancer/load_balancer.py +49 -0
  511. cartography/models/azure/load_balancer/load_balancer_backend_pool.py +73 -0
  512. cartography/models/azure/load_balancer/load_balancer_frontend_ip.py +75 -0
  513. cartography/models/azure/load_balancer/load_balancer_inbound_nat_rule.py +78 -0
  514. cartography/models/azure/load_balancer/load_balancer_rule.py +108 -0
  515. cartography/models/azure/logic_apps.py +56 -0
  516. cartography/models/azure/monitor.py +54 -0
  517. cartography/models/azure/network_interface.py +112 -0
  518. cartography/models/azure/network_security_group.py +50 -0
  519. cartography/models/azure/permission_relationships.py +60 -0
  520. cartography/models/azure/principal.py +41 -0
  521. cartography/models/azure/public_ip_address.py +50 -0
  522. cartography/models/azure/rbac.py +268 -0
  523. cartography/models/azure/resource_groups.py +52 -0
  524. cartography/models/azure/security_center.py +50 -0
  525. cartography/models/azure/sql/__init__.py +0 -0
  526. cartography/models/azure/sql/databasethreatdetectionpolicy.py +85 -0
  527. cartography/models/azure/sql/elasticpool.py +77 -0
  528. cartography/models/azure/sql/failovergroup.py +73 -0
  529. cartography/models/azure/sql/recoverabledatabase.py +75 -0
  530. cartography/models/azure/sql/replicationlink.py +81 -0
  531. cartography/models/azure/sql/restorabledroppeddatabase.py +82 -0
  532. cartography/models/azure/sql/restorepoint.py +74 -0
  533. cartography/models/azure/sql/serveradadministrator.py +74 -0
  534. cartography/models/azure/sql/serverdnsalias.py +71 -0
  535. cartography/models/azure/sql/sqldatabase.py +85 -0
  536. cartography/models/azure/sql/sqlserver.py +50 -0
  537. cartography/models/azure/sql/transparentdataencryption.py +76 -0
  538. cartography/models/azure/storage/__init__.py +0 -0
  539. cartography/models/azure/storage/account.py +59 -0
  540. cartography/models/azure/storage/blobcontainer.py +85 -0
  541. cartography/models/azure/storage/blobservice.py +71 -0
  542. cartography/models/azure/storage/fileservice.py +71 -0
  543. cartography/models/azure/storage/fileshare.py +82 -0
  544. cartography/models/azure/storage/queue.py +71 -0
  545. cartography/models/azure/storage/queueservice.py +73 -0
  546. cartography/models/azure/storage/table.py +72 -0
  547. cartography/models/azure/storage/tableservice.py +73 -0
  548. cartography/models/azure/subnet.py +101 -0
  549. cartography/models/azure/subscription.py +47 -0
  550. cartography/models/azure/tags/__init__.py +0 -0
  551. cartography/models/azure/tags/storage_tag.py +40 -0
  552. cartography/models/azure/tags/tag.py +37 -0
  553. cartography/models/azure/tenant.py +17 -0
  554. cartography/models/azure/virtual_network.py +49 -0
  555. cartography/models/azure/vm/__init__.py +0 -0
  556. cartography/models/azure/vm/datadisk.py +80 -0
  557. cartography/models/azure/vm/disk.py +55 -0
  558. cartography/models/azure/vm/snapshot.py +56 -0
  559. cartography/models/azure/vm/virtualmachine.py +59 -0
  560. cartography/models/bigfix/bigfix_computer.py +42 -38
  561. cartography/models/bigfix/bigfix_root.py +3 -3
  562. cartography/models/cloudflare/__init__.py +0 -0
  563. cartography/models/cloudflare/account.py +25 -0
  564. cartography/models/cloudflare/dnsrecord.py +55 -0
  565. cartography/models/cloudflare/member.py +86 -0
  566. cartography/models/cloudflare/role.py +44 -0
  567. cartography/models/cloudflare/zone.py +59 -0
  568. cartography/models/core/common.py +53 -2
  569. cartography/models/core/nodes.py +20 -4
  570. cartography/models/core/relationships.py +58 -6
  571. cartography/models/crowdstrike/__init__.py +0 -0
  572. cartography/models/crowdstrike/hosts.py +51 -0
  573. cartography/models/cve/cve.py +34 -32
  574. cartography/models/cve/cve_feed.py +6 -6
  575. cartography/models/digitalocean/__init__.py +0 -0
  576. cartography/models/digitalocean/account.py +21 -0
  577. cartography/models/digitalocean/droplet.py +58 -0
  578. cartography/models/digitalocean/project.py +48 -0
  579. cartography/models/duo/api_host.py +3 -3
  580. cartography/models/duo/endpoint.py +43 -41
  581. cartography/models/duo/group.py +14 -14
  582. cartography/models/duo/phone.py +27 -27
  583. cartography/models/duo/token.py +16 -16
  584. cartography/models/duo/user.py +50 -44
  585. cartography/models/duo/web_authn_credential.py +27 -19
  586. cartography/models/entra/__init__.py +0 -0
  587. cartography/models/entra/app_role_assignment.py +115 -0
  588. cartography/models/entra/application.py +49 -0
  589. cartography/models/entra/entra_user_to_aws_sso.py +41 -0
  590. cartography/models/entra/group.py +117 -0
  591. cartography/models/entra/ou.py +48 -0
  592. cartography/models/entra/service_principal.py +104 -0
  593. cartography/models/entra/tenant.py +39 -0
  594. cartography/models/entra/user.py +90 -0
  595. cartography/models/gcp/__init__.py +0 -0
  596. cartography/models/gcp/bigtable/__init__.py +0 -0
  597. cartography/models/gcp/bigtable/app_profile.py +94 -0
  598. cartography/models/gcp/bigtable/backup.py +91 -0
  599. cartography/models/gcp/bigtable/cluster.py +73 -0
  600. cartography/models/gcp/bigtable/instance.py +52 -0
  601. cartography/models/gcp/bigtable/table.py +69 -0
  602. cartography/models/gcp/compute/__init__.py +0 -0
  603. cartography/models/gcp/compute/subnet.py +74 -0
  604. cartography/models/gcp/compute/vpc.py +50 -0
  605. cartography/models/gcp/crm/__init__.py +0 -0
  606. cartography/models/gcp/crm/folders.py +98 -0
  607. cartography/models/gcp/crm/organizations.py +21 -0
  608. cartography/models/gcp/crm/projects.py +100 -0
  609. cartography/models/gcp/dns.py +109 -0
  610. cartography/models/gcp/gke.py +69 -0
  611. cartography/models/gcp/iam.py +73 -0
  612. cartography/models/gcp/permission_relationships.py +61 -0
  613. cartography/models/gcp/policy_bindings.py +93 -0
  614. cartography/models/gcp/storage/__init__.py +0 -0
  615. cartography/models/gcp/storage/bucket.py +119 -0
  616. cartography/models/github/commits.py +63 -0
  617. cartography/models/github/dependencies.py +73 -0
  618. cartography/models/github/manifests.py +49 -0
  619. cartography/models/github/orgs.py +27 -0
  620. cartography/models/github/teams.py +74 -22
  621. cartography/models/github/users.py +149 -0
  622. cartography/models/googleworkspace/__init__.py +0 -0
  623. cartography/models/googleworkspace/device.py +132 -0
  624. cartography/models/googleworkspace/group.py +382 -0
  625. cartography/models/googleworkspace/oauth_app.py +124 -0
  626. cartography/models/googleworkspace/tenant.py +30 -0
  627. cartography/models/googleworkspace/user.py +113 -0
  628. cartography/models/gsuite/__init__.py +0 -0
  629. cartography/models/gsuite/group.py +218 -0
  630. cartography/models/gsuite/tenant.py +29 -0
  631. cartography/models/gsuite/user.py +107 -0
  632. cartography/models/kandji/device.py +22 -17
  633. cartography/models/kandji/tenant.py +6 -4
  634. cartography/models/keycloak/__init__.py +0 -0
  635. cartography/models/keycloak/authenticationexecution.py +160 -0
  636. cartography/models/keycloak/authenticationflow.py +54 -0
  637. cartography/models/keycloak/client.py +179 -0
  638. cartography/models/keycloak/group.py +101 -0
  639. cartography/models/keycloak/identityprovider.py +89 -0
  640. cartography/models/keycloak/organization.py +116 -0
  641. cartography/models/keycloak/organizationdomain.py +73 -0
  642. cartography/models/keycloak/realm.py +173 -0
  643. cartography/models/keycloak/role.py +126 -0
  644. cartography/models/keycloak/scope.py +73 -0
  645. cartography/models/keycloak/user.py +55 -0
  646. cartography/models/kubernetes/__init__.py +0 -0
  647. cartography/models/kubernetes/clusterrolebindings.py +138 -0
  648. cartography/models/kubernetes/clusterroles.py +52 -0
  649. cartography/models/kubernetes/clusters.py +26 -0
  650. cartography/models/kubernetes/containers.py +133 -0
  651. cartography/models/kubernetes/groups.py +107 -0
  652. cartography/models/kubernetes/namespaces.py +51 -0
  653. cartography/models/kubernetes/oidc.py +51 -0
  654. cartography/models/kubernetes/pods.py +80 -0
  655. cartography/models/kubernetes/rolebindings.py +159 -0
  656. cartography/models/kubernetes/roles.py +76 -0
  657. cartography/models/kubernetes/secrets.py +79 -0
  658. cartography/models/kubernetes/serviceaccounts.py +77 -0
  659. cartography/models/kubernetes/services.py +108 -0
  660. cartography/models/kubernetes/users.py +105 -0
  661. cartography/models/lastpass/tenant.py +3 -3
  662. cartography/models/lastpass/user.py +36 -28
  663. cartography/models/ontology/__init__.py +0 -0
  664. cartography/models/ontology/device.py +137 -0
  665. cartography/models/ontology/mapping/__init__.py +76 -0
  666. cartography/models/ontology/mapping/data/__init__.py +0 -0
  667. cartography/models/ontology/mapping/data/apikeys.py +93 -0
  668. cartography/models/ontology/mapping/data/computeinstance.py +95 -0
  669. cartography/models/ontology/mapping/data/containers.py +88 -0
  670. cartography/models/ontology/mapping/data/databases.py +182 -0
  671. cartography/models/ontology/mapping/data/devices.py +194 -0
  672. cartography/models/ontology/mapping/data/thirdpartyapps.py +140 -0
  673. cartography/models/ontology/mapping/data/useraccounts.py +416 -0
  674. cartography/models/ontology/mapping/data/users.py +63 -0
  675. cartography/models/ontology/mapping/specs.py +85 -0
  676. cartography/models/ontology/user.py +51 -0
  677. cartography/models/openai/__init__.py +0 -0
  678. cartography/models/openai/adminapikey.py +94 -0
  679. cartography/models/openai/apikey.py +88 -0
  680. cartography/models/openai/organization.py +17 -0
  681. cartography/models/openai/project.py +89 -0
  682. cartography/models/openai/serviceaccount.py +50 -0
  683. cartography/models/openai/user.py +53 -0
  684. cartography/models/scaleway/__init__.py +0 -0
  685. cartography/models/scaleway/iam/__init__.py +0 -0
  686. cartography/models/scaleway/iam/apikey.py +100 -0
  687. cartography/models/scaleway/iam/application.py +52 -0
  688. cartography/models/scaleway/iam/group.py +95 -0
  689. cartography/models/scaleway/iam/user.py +64 -0
  690. cartography/models/scaleway/instance/__init__.py +0 -0
  691. cartography/models/scaleway/instance/flexibleip.py +52 -0
  692. cartography/models/scaleway/instance/instance.py +120 -0
  693. cartography/models/scaleway/organization.py +19 -0
  694. cartography/models/scaleway/project.py +48 -0
  695. cartography/models/scaleway/storage/__init__.py +0 -0
  696. cartography/models/scaleway/storage/snapshot.py +78 -0
  697. cartography/models/scaleway/storage/volume.py +51 -0
  698. cartography/models/semgrep/dependencies.py +102 -0
  699. cartography/models/semgrep/deployment.py +5 -5
  700. cartography/models/semgrep/findings.py +58 -40
  701. cartography/models/semgrep/locations.py +27 -21
  702. cartography/models/sentinelone/__init__.py +1 -0
  703. cartography/models/sentinelone/account.py +40 -0
  704. cartography/models/sentinelone/agent.py +50 -0
  705. cartography/models/sentinelone/application.py +44 -0
  706. cartography/models/sentinelone/application_version.py +96 -0
  707. cartography/models/sentinelone/cve.py +73 -0
  708. cartography/models/slack/__init__.py +0 -0
  709. cartography/models/slack/channels.py +92 -0
  710. cartography/models/slack/group.py +129 -0
  711. cartography/models/slack/team.py +22 -0
  712. cartography/models/slack/user.py +62 -0
  713. cartography/models/snipeit/__init__.py +0 -0
  714. cartography/models/snipeit/asset.py +92 -0
  715. cartography/models/snipeit/tenant.py +19 -0
  716. cartography/models/snipeit/user.py +60 -0
  717. cartography/models/spacelift/__init__.py +0 -0
  718. cartography/models/spacelift/cloudtrailevent.py +120 -0
  719. cartography/models/spacelift/run.py +162 -0
  720. cartography/models/spacelift/space.py +131 -0
  721. cartography/models/spacelift/spaceliftaccount.py +31 -0
  722. cartography/models/spacelift/spaceliftgitcommit.py +157 -0
  723. cartography/models/spacelift/stack.py +96 -0
  724. cartography/models/spacelift/user.py +63 -0
  725. cartography/models/spacelift/worker.py +97 -0
  726. cartography/models/spacelift/workerpool.py +90 -0
  727. cartography/models/tailscale/__init__.py +0 -0
  728. cartography/models/tailscale/device.py +96 -0
  729. cartography/models/tailscale/group.py +86 -0
  730. cartography/models/tailscale/postureintegration.py +58 -0
  731. cartography/models/tailscale/tag.py +102 -0
  732. cartography/models/tailscale/tailnet.py +29 -0
  733. cartography/models/tailscale/user.py +57 -0
  734. cartography/models/trivy/__init__.py +0 -0
  735. cartography/models/trivy/findings.py +66 -0
  736. cartography/models/trivy/fix.py +66 -0
  737. cartography/models/trivy/package.py +71 -0
  738. cartography/rules/README.md +1 -0
  739. cartography/rules/__init__.py +0 -0
  740. cartography/rules/cli.py +261 -0
  741. cartography/rules/data/__init__.py +0 -0
  742. cartography/rules/data/rules/__init__.py +46 -0
  743. cartography/rules/data/rules/cloud_security_product_deactivated.py +49 -0
  744. cartography/rules/data/rules/compute_instance_exposed.py +51 -0
  745. cartography/rules/data/rules/database_instance_exposed.py +53 -0
  746. cartography/rules/data/rules/delegation_boundary_modifiable.py +90 -0
  747. cartography/rules/data/rules/identity_administration_privileges.py +100 -0
  748. cartography/rules/data/rules/inactive_user_active_accounts.py +48 -0
  749. cartography/rules/data/rules/malicious_npm_dependencies_shai_hulud.py +2222 -0
  750. cartography/rules/data/rules/mfa_missing.py +46 -0
  751. cartography/rules/data/rules/object_storage_public.py +100 -0
  752. cartography/rules/data/rules/policy_administration_privileges.py +104 -0
  753. cartography/rules/data/rules/unmanaged_accounts.py +43 -0
  754. cartography/rules/data/rules/workload_identity_admin_capabilities.py +193 -0
  755. cartography/rules/formatters.py +108 -0
  756. cartography/rules/runners.py +216 -0
  757. cartography/rules/spec/__init__.py +0 -0
  758. cartography/rules/spec/model.py +267 -0
  759. cartography/rules/spec/result.py +38 -0
  760. cartography/stats.py +4 -4
  761. cartography/sync.py +137 -31
  762. cartography/util.py +187 -77
  763. cartography-0.123.0.dist-info/METADATA +230 -0
  764. cartography-0.123.0.dist-info/RECORD +856 -0
  765. {cartography-0.93.0rc1.dist-info → cartography-0.123.0.dist-info}/WHEEL +1 -1
  766. {cartography-0.93.0rc1.dist-info → cartography-0.123.0.dist-info}/entry_points.txt +1 -0
  767. {cartography-0.93.0rc1.dist-info → cartography-0.123.0.dist-info/licenses}/LICENSE +1 -1
  768. cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -10
  769. cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -10
  770. cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -10
  771. cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -65
  772. cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -17
  773. cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -45
  774. cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -24
  775. cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -13
  776. cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -50
  777. cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -30
  778. cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -23
  779. cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -47
  780. cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -23
  781. cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -13
  782. cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -8
  783. cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -30
  784. cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -8
  785. cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -23
  786. cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -45
  787. cartography/data/jobs/cleanup/aws_kms_details.json +0 -10
  788. cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -25
  789. cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -15
  790. cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -25
  791. cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -25
  792. cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -15
  793. cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -85
  794. cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -15
  795. cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -15
  796. cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -25
  797. cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -125
  798. cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -95
  799. cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -14
  800. cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -9
  801. cartography/data/jobs/cleanup/crxcavator_import_cleanup.json +0 -18
  802. cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -35
  803. cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -23
  804. cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -17
  805. cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -23
  806. cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -29
  807. cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -17
  808. cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -29
  809. cartography/data/jobs/cleanup/github_users_cleanup.json +0 -23
  810. cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -23
  811. cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -11
  812. cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -70
  813. cartography/intel/crxcavator/__init__.py +0 -44
  814. cartography/intel/crxcavator/crxcavator.py +0 -329
  815. cartography/intel/gcp/crm.py +0 -302
  816. cartography/intel/gsuite/api.py +0 -284
  817. cartography/models/aws/ec2/keypairs.py +0 -64
  818. cartography-0.93.0rc1.dist-info/METADATA +0 -55
  819. cartography-0.93.0rc1.dist-info/NOTICE +0 -4
  820. cartography-0.93.0rc1.dist-info/RECORD +0 -341
  821. /cartography/data/jobs/{analysis → scoped_analysis}/aws_s3acl_analysis.json +0 -0
  822. {cartography-0.93.0rc1.dist-info → cartography-0.123.0.dist-info}/top_level.txt +0 -0
@@ -11,17 +11,19 @@ from oci.exceptions import ConfigFileNotFound
11
11
  from oci.exceptions import InvalidConfig
12
12
  from oci.exceptions import ProfileNotFound
13
13
 
14
+ from cartography.config import Config
15
+
14
16
  from . import iam
15
17
  from . import organizations
16
18
  from . import utils
17
- from cartography.config import Config
19
+
18
20
  # from cartography.util import run_analysis_job
19
21
  # from cartography.util import run_cleanup_job
20
22
  # from . import network
21
23
  # from . import compute
22
24
 
23
25
  logger = logging.getLogger(__name__)
24
- Resources = namedtuple('Resources', 'compute iam network')
26
+ Resources = namedtuple("Resources", "compute iam network")
25
27
 
26
28
 
27
29
  def _sync_one_account(
@@ -32,11 +34,21 @@ def _sync_one_account(
32
34
  common_job_parameters: Dict[str, Any],
33
35
  ) -> None:
34
36
  logger.info("Syncing OCI IAM client for OCI Tenancy with ID '%s'.", tenancy_id)
35
- iam.sync(neo4j_session, resources.iam, tenancy_id, oci_sync_tag, common_job_parameters)
37
+ iam.sync(
38
+ neo4j_session,
39
+ resources.iam,
40
+ tenancy_id,
41
+ oci_sync_tag,
42
+ common_job_parameters,
43
+ )
36
44
 
37
45
  regions = utils.get_regions_in_tenancy(neo4j_session, tenancy_id)
38
46
  for region in regions:
39
- logger.info("Syncing OCI region '%s' for OCI Tenancy with ID '%s'.", region["name"], tenancy_id)
47
+ logger.info(
48
+ "Syncing OCI region '%s' for OCI Tenancy with ID '%s'.",
49
+ region["name"],
50
+ tenancy_id,
51
+ )
40
52
  _change_resources_region(resources, region["name"])
41
53
  # compute.sync(neo4j_session, resources.compute,
42
54
  # tenancy_id, region["name"], oci_sync_tag, common_job_parameters
@@ -56,15 +68,25 @@ def _sync_multiple_accounts(
56
68
  sync_tag: int,
57
69
  common_job_parameters: Dict[str, Any],
58
70
  ) -> None:
59
- logger.debug("Syncing OCI accounts: %s", ', '.join(accounts.keys()))
71
+ logger.debug("Syncing OCI accounts: %s", ", ".join(accounts.keys()))
60
72
  organizations.sync(neo4j_session, accounts, sync_tag, common_job_parameters)
61
73
 
62
74
  for name in accounts:
63
- logger.info("Syncing OCI Tenancy with ID '%s' using configured profile '%s'.", accounts[name]["tenancy"], name)
75
+ logger.info(
76
+ "Syncing OCI Tenancy with ID '%s' using configured profile '%s'.",
77
+ accounts[name]["tenancy"],
78
+ name,
79
+ )
64
80
  resources = _initialize_resources(accounts[name])
65
81
  tenancy_id = accounts[name]["tenancy"]
66
82
  common_job_parameters["OCI_TENANCY_ID"] = tenancy_id
67
- _sync_one_account(neo4j_session, resources, tenancy_id, sync_tag, common_job_parameters)
83
+ _sync_one_account(
84
+ neo4j_session,
85
+ resources,
86
+ tenancy_id,
87
+ sync_tag,
88
+ common_job_parameters,
89
+ )
68
90
 
69
91
  del common_job_parameters["OCI_TENANCY_ID"]
70
92
 
@@ -82,7 +104,9 @@ def _change_resources_region(resources: NamedTuple, region: str) -> None:
82
104
  resource.base_client.set_region(region)
83
105
 
84
106
 
85
- def _get_network_resource(credentials: Dict[str, Any]) -> oci.core.virtual_network_client.VirtualNetworkClient:
107
+ def _get_network_resource(
108
+ credentials: Dict[str, Any],
109
+ ) -> oci.core.virtual_network_client.VirtualNetworkClient:
86
110
  """
87
111
  Instantiates a OCI VirtualNetworkClient resource object to call the Network API.
88
112
  See https://docs.cloud.oracle.com/en-us/iaas/Content/Network/Concepts/overview.htm.
@@ -92,7 +116,9 @@ def _get_network_resource(credentials: Dict[str, Any]) -> oci.core.virtual_netwo
92
116
  return oci.core.VirtualNetworkClient(credentials)
93
117
 
94
118
 
95
- def _get_iam_resource(credentials: Dict[str, Any]) -> oci.identity.identity_client.IdentityClient:
119
+ def _get_iam_resource(
120
+ credentials: Dict[str, Any],
121
+ ) -> oci.identity.identity_client.IdentityClient:
96
122
  """
97
123
  Instantiates a OCI IdentityCleint resource object to call the Identity API. This is used to users,
98
124
  ..., ... and ... data. See https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm.
@@ -102,7 +128,9 @@ def _get_iam_resource(credentials: Dict[str, Any]) -> oci.identity.identity_clie
102
128
  return oci.identity.IdentityClient(credentials)
103
129
 
104
130
 
105
- def _get_compute_resource(credentials: Dict[str, Any]) -> oci.core.compute_client.ComputeClient:
131
+ def _get_compute_resource(
132
+ credentials: Dict[str, Any],
133
+ ) -> oci.core.compute_client.ComputeClient:
106
134
  """
107
135
  Instantiates a OCI ComputeClient resource object to call the Compute API. This is used to pull zone, instance, and
108
136
  networking data. https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm.
@@ -180,7 +208,12 @@ def start_oci_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
180
208
  )
181
209
  return
182
210
 
183
- _sync_multiple_accounts(neo4j_session, oci_accounts, config.update_tag, common_job_parameters)
211
+ _sync_multiple_accounts(
212
+ neo4j_session,
213
+ oci_accounts,
214
+ config.update_tag,
215
+ common_job_parameters,
216
+ )
184
217
 
185
218
  # Look into adding analysis job once compute is implemented.
186
219
  # run_analysis_job(
@@ -10,9 +10,12 @@ from typing import List
10
10
  import neo4j
11
11
  import oci
12
12
 
13
- from . import utils
13
+ from cartography.client.core.tx import read_list_of_dicts_tx
14
+ from cartography.client.core.tx import run_write_query
14
15
  from cartography.util import run_cleanup_job
15
16
 
17
+ from . import utils
18
+
16
19
  logger = logging.getLogger(__name__)
17
20
 
18
21
 
@@ -25,8 +28,17 @@ def sync_compartments(
25
28
  ) -> None:
26
29
  logger.debug("Syncing IAM compartments for account '%s'.", current_tenancy_id)
27
30
  data = get_compartment_list_data(iam, current_tenancy_id)
28
- load_compartments(neo4j_session, data['Compartments'], current_tenancy_id, oci_update_tag)
29
- run_cleanup_job('oci_import_compartments_cleanup.json', neo4j_session, common_job_parameters)
31
+ load_compartments(
32
+ neo4j_session,
33
+ data["Compartments"],
34
+ current_tenancy_id,
35
+ oci_update_tag,
36
+ )
37
+ run_cleanup_job(
38
+ "oci_import_compartments_cleanup.json",
39
+ neo4j_session,
40
+ common_job_parameters,
41
+ )
30
42
 
31
43
 
32
44
  def get_compartment_list_data_recurse(
@@ -35,11 +47,17 @@ def get_compartment_list_data_recurse(
35
47
  compartment_id: str,
36
48
  ) -> None:
37
49
 
38
- response = oci.pagination.list_call_get_all_results(iam.list_compartments, compartment_id)
50
+ response = oci.pagination.list_call_get_all_results(
51
+ iam.list_compartments,
52
+ compartment_id,
53
+ )
39
54
  if not response.data:
40
55
  return
41
56
  compartment_list.update(
42
- {"Compartments": list(compartment_list["Compartments"]) + utils.oci_object_to_json(response.data)},
57
+ {
58
+ "Compartments": list(compartment_list["Compartments"])
59
+ + utils.oci_object_to_json(response.data),
60
+ },
43
61
  )
44
62
  for compartment in response.data:
45
63
  get_compartment_list_data_recurse(iam, compartment_list, compartment.id)
@@ -73,7 +91,8 @@ def load_compartments(
73
91
  """
74
92
 
75
93
  for compartment in compartments:
76
- neo4j_session.run(
94
+ run_write_query(
95
+ neo4j_session,
77
96
  ingest_compartment,
78
97
  OCID=compartment["id"],
79
98
  COMPARTMENT_ID=compartment["compartment-id"],
@@ -110,7 +129,8 @@ def load_users(
110
129
  """
111
130
 
112
131
  for user in users:
113
- neo4j_session.run(
132
+ run_write_query(
133
+ neo4j_session,
114
134
  ingest_user,
115
135
  OCID=user["id"],
116
136
  CREATE_DATE=str(user["time-created"]),
@@ -122,7 +142,9 @@ def load_users(
122
142
  CAN_USE_API_KEYS=user["capabilities"]["can-use-api-keys"],
123
143
  CAN_USE_AUTH_TOKENS=user["capabilities"]["can-use-auth-tokens"],
124
144
  CAN_USE_CONSOLE_PASSWORD=user["capabilities"]["can-use-console-password"],
125
- CAN_USE_CUSTOMER_SECRET_KEYS=user["capabilities"]["can-use-customer-secret-keys"],
145
+ CAN_USE_CUSTOMER_SECRET_KEYS=user["capabilities"][
146
+ "can-use-customer-secret-keys"
147
+ ],
126
148
  CAN_USE_SMTP_CREDENTIALS=user["capabilities"]["can-use-smtp-credentials"],
127
149
  COMPARTMENT_ID=user["compartment-id"],
128
150
  OCI_TENANCY_ID=current_oci_tenancy_id,
@@ -134,8 +156,11 @@ def get_user_list_data(
134
156
  iam: oci.identity.identity_client.IdentityClient,
135
157
  current_tenancy_id: str,
136
158
  ) -> Dict[str, List[Dict[str, Any]]]:
137
- response = oci.pagination.list_call_get_all_results(iam.list_users, current_tenancy_id)
138
- return {'Users': utils.oci_object_to_json(response.data)}
159
+ response = oci.pagination.list_call_get_all_results(
160
+ iam.list_users,
161
+ current_tenancy_id,
162
+ )
163
+ return {"Users": utils.oci_object_to_json(response.data)}
139
164
 
140
165
 
141
166
  def sync_users(
@@ -147,16 +172,23 @@ def sync_users(
147
172
  ) -> None:
148
173
  logger.debug("Syncing IAM users for account '%s'.", current_tenancy_id)
149
174
  data = get_user_list_data(iam, current_tenancy_id)
150
- load_users(neo4j_session, data['Users'], current_tenancy_id, oci_update_tag)
151
- run_cleanup_job('oci_import_users_cleanup.json', neo4j_session, common_job_parameters)
175
+ load_users(neo4j_session, data["Users"], current_tenancy_id, oci_update_tag)
176
+ run_cleanup_job(
177
+ "oci_import_users_cleanup.json",
178
+ neo4j_session,
179
+ common_job_parameters,
180
+ )
152
181
 
153
182
 
154
183
  def get_group_list_data(
155
184
  iam: oci.identity.identity_client.IdentityClient,
156
185
  current_tenancy_id: str,
157
186
  ) -> Dict[str, List[Dict[str, Any]]]:
158
- response = oci.pagination.list_call_get_all_results(iam.list_groups, current_tenancy_id)
159
- return {'Groups': utils.oci_object_to_json(response.data)}
187
+ response = oci.pagination.list_call_get_all_results(
188
+ iam.list_groups,
189
+ current_tenancy_id,
190
+ )
191
+ return {"Groups": utils.oci_object_to_json(response.data)}
160
192
 
161
193
 
162
194
  def load_groups(
@@ -178,7 +210,8 @@ def load_groups(
178
210
  """
179
211
 
180
212
  for group in groups:
181
- neo4j_session.run(
213
+ run_write_query(
214
+ neo4j_session,
182
215
  ingest_group,
183
216
  OCID=group["id"],
184
217
  CREATE_DATE=str(group["time-created"]),
@@ -200,7 +233,11 @@ def sync_groups(
200
233
  logger.debug("Syncing IAM groups for account '%s'.", current_tenancy_id)
201
234
  data = get_group_list_data(iam, current_tenancy_id)
202
235
  load_groups(neo4j_session, data["Groups"], current_tenancy_id, oci_update_tag)
203
- run_cleanup_job('oci_import_groups_cleanup.json', neo4j_session, common_job_parameters)
236
+ run_cleanup_job(
237
+ "oci_import_groups_cleanup.json",
238
+ neo4j_session,
239
+ common_job_parameters,
240
+ )
204
241
 
205
242
 
206
243
  def get_group_membership_data(
@@ -209,9 +246,11 @@ def get_group_membership_data(
209
246
  current_tenancy_id: str,
210
247
  ) -> Dict[str, List[Dict[str, Any]]]:
211
248
  response = oci.pagination.list_call_get_all_results(
212
- iam.list_user_group_memberships, compartment_id=current_tenancy_id, group_id=group_id,
249
+ iam.list_user_group_memberships,
250
+ compartment_id=current_tenancy_id,
251
+ group_id=group_id,
213
252
  )
214
- return {'GroupMemberships': utils.oci_object_to_json(response.data)}
253
+ return {"GroupMemberships": utils.oci_object_to_json(response.data)}
215
254
 
216
255
 
217
256
  def sync_group_memberships(
@@ -222,15 +261,22 @@ def sync_group_memberships(
222
261
  common_job_parameters: Dict[str, Any],
223
262
  ) -> None:
224
263
  logger.debug("Syncing IAM group membership for account '%s'.", current_tenancy_id)
225
- query = "MATCH (group:OCIGroup)<-[:RESOURCE]-(OCITenancy{ocid: $OCI_TENANCY_ID}) " \
226
- "return group.name as name, group.ocid as ocid;"
227
- groups = neo4j_session.run(query, OCI_TENANCY_ID=current_tenancy_id)
264
+ query = (
265
+ "MATCH (group:OCIGroup)<-[:RESOURCE]-(OCITenancy{ocid: $OCI_TENANCY_ID}) "
266
+ "return group.name as name, group.ocid as ocid;"
267
+ )
268
+ groups = neo4j_session.execute_read(
269
+ read_list_of_dicts_tx,
270
+ query,
271
+ OCI_TENANCY_ID=current_tenancy_id,
272
+ )
228
273
  groups_membership = {
229
- group["ocid"]: get_group_membership_data(iam, group['ocid'], current_tenancy_id) for group in groups
274
+ group["ocid"]: get_group_membership_data(iam, group["ocid"], current_tenancy_id)
275
+ for group in groups
230
276
  }
231
277
  load_group_memberships(neo4j_session, groups_membership, oci_update_tag)
232
278
  run_cleanup_job(
233
- 'oci_import_groups_membership_cleanup.json',
279
+ "oci_import_groups_membership_cleanup.json",
234
280
  neo4j_session,
235
281
  common_job_parameters,
236
282
  )
@@ -251,7 +297,8 @@ def load_group_memberships(
251
297
  """
252
298
  for group_ocid, membership_data in group_memberships.items():
253
299
  for info in membership_data["GroupMemberships"]:
254
- neo4j_session.run(
300
+ run_write_query(
301
+ neo4j_session,
255
302
  ingest_membership,
256
303
  COMPARTMENT_ID=info["compartment-id"],
257
304
  GROUP_OCID=info["group-id"],
@@ -280,7 +327,8 @@ def load_policies(
280
327
  """
281
328
 
282
329
  for policy in policies:
283
- neo4j_session.run(
330
+ run_write_query(
331
+ neo4j_session,
284
332
  ingest_policy,
285
333
  OCID=policy["id"],
286
334
  POLICY_NAME=policy["name"],
@@ -298,8 +346,11 @@ def get_policy_list_data(
298
346
  iam: oci.identity.identity_client.IdentityClient,
299
347
  current_tenancy_id: str,
300
348
  ) -> Dict[str, List[Dict[str, Any]]]:
301
- response = oci.pagination.list_call_get_all_results(iam.list_policies, compartment_id=current_tenancy_id)
302
- return {'Policies': utils.oci_object_to_json(response.data)}
349
+ response = oci.pagination.list_call_get_all_results(
350
+ iam.list_policies,
351
+ compartment_id=current_tenancy_id,
352
+ )
353
+ return {"Policies": utils.oci_object_to_json(response.data)}
303
354
 
304
355
 
305
356
  def sync_policies(
@@ -313,12 +364,23 @@ def sync_policies(
313
364
  compartments = utils.get_compartments_in_tenancy(neo4j_session, current_tenancy_id)
314
365
  for compartment in compartments:
315
366
  logger.debug(
316
- "Syncing OCI policies for compartment '%s' in account '%s'.", compartment['ocid'], current_tenancy_id,
367
+ "Syncing OCI policies for compartment '%s' in account '%s'.",
368
+ compartment["ocid"],
369
+ current_tenancy_id,
317
370
  )
318
371
  data = get_policy_list_data(iam, compartment["ocid"])
319
- if (data["Policies"]):
320
- load_policies(neo4j_session, data["Policies"], current_tenancy_id, oci_update_tag)
321
- run_cleanup_job('oci_import_policies_cleanup.json', neo4j_session, common_job_parameters)
372
+ if data["Policies"]:
373
+ load_policies(
374
+ neo4j_session,
375
+ data["Policies"],
376
+ current_tenancy_id,
377
+ oci_update_tag,
378
+ )
379
+ run_cleanup_job(
380
+ "oci_import_policies_cleanup.json",
381
+ neo4j_session,
382
+ common_job_parameters,
383
+ )
322
384
 
323
385
 
324
386
  def load_oci_policy_group_reference(
@@ -335,7 +397,8 @@ def load_oci_policy_group_reference(
335
397
  ON CREATE SET r.firstseen = timestamp()
336
398
  SET r.lastupdated = $oci_update_tag
337
399
  """
338
- neo4j_session.run(
400
+ run_write_query(
401
+ neo4j_session,
339
402
  ingest_policy_group_reference,
340
403
  POLICY_ID=policy_id,
341
404
  GROUP_ID=group_id,
@@ -357,7 +420,8 @@ def load_oci_policy_compartment_reference(
357
420
  ON CREATE SET r.firstseen = timestamp()
358
421
  SET r.lastupdated = $oci_update_tag
359
422
  """
360
- neo4j_session.run(
423
+ run_write_query(
424
+ neo4j_session,
361
425
  ingest_policy_compartment_reference,
362
426
  POLICY_ID=policy_id,
363
427
  COMPARTMENT_ID=compartment_id,
@@ -378,22 +442,33 @@ def sync_oci_policy_references(
378
442
  for policy in policies:
379
443
  check_compart = policy["compartmentid"]
380
444
  for statement in policy["statements"]:
381
- m = re.search('(?<=group\\s)[^ ]*(?=\\s)', statement)
445
+ m = re.search("(?<=group\\s)[^ ]*(?=\\s)", statement)
382
446
  if m:
383
447
  for group in groups:
384
448
  if group["name"].lower() == m.group(0).lower():
385
449
  load_oci_policy_group_reference(
386
- neo4j_session, policy["ocid"], group["ocid"], tenancy_id, oci_update_tag,
450
+ neo4j_session,
451
+ policy["ocid"],
452
+ group["ocid"],
453
+ tenancy_id,
454
+ oci_update_tag,
387
455
  )
388
- m = re.search('(?<=compartment\\s)[^ ]*(?=$)', statement)
456
+ m = re.search("(?<=compartment\\s)[^ ]*(?=$)", statement)
389
457
  if m:
390
458
  for compartment in compartments:
391
459
  # Only look at the compartment or subcompartment name referenced in the policy statement
392
460
  # in which the policy is a member of.
393
- if compartment["ocid"] == check_compart or compartment["compartmentid"] == check_compart:
461
+ if (
462
+ compartment["ocid"] == check_compart
463
+ or compartment["compartmentid"] == check_compart
464
+ ):
394
465
  if compartment["name"].lower() == m.group(0).lower():
395
466
  load_oci_policy_compartment_reference(
396
- neo4j_session, policy["ocid"], compartment['ocid'], tenancy_id, oci_update_tag,
467
+ neo4j_session,
468
+ policy["ocid"],
469
+ compartment["ocid"],
470
+ tenancy_id,
471
+ oci_update_tag,
397
472
  )
398
473
 
399
474
 
@@ -401,8 +476,11 @@ def get_region_subscriptions_list_data(
401
476
  iam: oci.identity.identity_client.IdentityClient,
402
477
  current_tenancy_id: str,
403
478
  ) -> Dict[str, List[Dict[str, Any]]]:
404
- response = oci.pagination.list_call_get_all_results(iam.list_region_subscriptions, current_tenancy_id)
405
- return {'RegionSubscriptions': utils.oci_object_to_json(response.data)}
479
+ response = oci.pagination.list_call_get_all_results(
480
+ iam.list_region_subscriptions,
481
+ current_tenancy_id,
482
+ )
483
+ return {"RegionSubscriptions": utils.oci_object_to_json(response.data)}
406
484
 
407
485
 
408
486
  def load_region_subscriptions(
@@ -422,7 +500,8 @@ def load_region_subscriptions(
422
500
  SET r.lastupdated = $oci_update_tag
423
501
  """
424
502
  for region in regions:
425
- neo4j_session.run(
503
+ run_write_query(
504
+ neo4j_session,
426
505
  query,
427
506
  REGION_KEY=region["region-key"],
428
507
  REGION_NAME=region["region-name"],
@@ -438,9 +517,17 @@ def sync_region_subscriptions(
438
517
  oci_update_tag: int,
439
518
  common_job_parameters: Dict[str, Any],
440
519
  ) -> None:
441
- logger.debug("Syncing IAM region subscriptions for account '%s'.", current_tenancy_id)
520
+ logger.debug(
521
+ "Syncing IAM region subscriptions for account '%s'.",
522
+ current_tenancy_id,
523
+ )
442
524
  data = get_region_subscriptions_list_data(iam, current_tenancy_id)
443
- load_region_subscriptions(neo4j_session, data["RegionSubscriptions"], current_tenancy_id, oci_update_tag)
525
+ load_region_subscriptions(
526
+ neo4j_session,
527
+ data["RegionSubscriptions"],
528
+ current_tenancy_id,
529
+ oci_update_tag,
530
+ )
444
531
  # run_cleanup_job('oci_import_region_subscriptions_cleanup.json', neo4j_session, common_job_parameters)
445
532
 
446
533
 
@@ -454,8 +541,31 @@ def sync(
454
541
  logger.info("Syncing IAM for account '%s'.", tenancy_id)
455
542
  sync_users(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
456
543
  sync_groups(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
457
- sync_group_memberships(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
458
- sync_compartments(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
544
+ sync_group_memberships(
545
+ neo4j_session,
546
+ iam,
547
+ tenancy_id,
548
+ oci_update_tag,
549
+ common_job_parameters,
550
+ )
551
+ sync_compartments(
552
+ neo4j_session,
553
+ iam,
554
+ tenancy_id,
555
+ oci_update_tag,
556
+ common_job_parameters,
557
+ )
459
558
  sync_policies(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
460
- sync_oci_policy_references(neo4j_session, tenancy_id, oci_update_tag, common_job_parameters)
461
- sync_region_subscriptions(neo4j_session, iam, tenancy_id, oci_update_tag, common_job_parameters)
559
+ sync_oci_policy_references(
560
+ neo4j_session,
561
+ tenancy_id,
562
+ oci_update_tag,
563
+ common_job_parameters,
564
+ )
565
+ sync_region_subscriptions(
566
+ neo4j_session,
567
+ iam,
568
+ tenancy_id,
569
+ oci_update_tag,
570
+ common_job_parameters,
571
+ )
@@ -11,6 +11,7 @@ from oci.exceptions import ConfigFileNotFound
11
11
  from oci.exceptions import InvalidConfig
12
12
  from oci.exceptions import ProfileNotFound
13
13
 
14
+ from cartography.client.core.tx import run_write_query
14
15
  from cartography.util import run_cleanup_job
15
16
 
16
17
  logger = logging.getLogger(__name__)
@@ -41,7 +42,7 @@ def get_oci_account_default() -> Dict[str, Any]:
41
42
  def get_oci_profile_names_from_config() -> List[Any]:
42
43
  config_path = oci.config._get_config_path_with_fallback("~/.oci/config")
43
44
  config = open(config_path).read()
44
- pattern = r'\[(.*)\]'
45
+ pattern = r"\[(.*)\]"
45
46
  m = re.findall(pattern, config)
46
47
  return m
47
48
 
@@ -52,16 +53,20 @@ def get_oci_accounts_from_config() -> Dict[str, Any]:
52
53
 
53
54
  d = {}
54
55
  for profile_name in available_profiles:
55
- if profile_name == 'DEFAULT':
56
+ if profile_name == "DEFAULT":
56
57
  logger.debug("Skipping OCI profile 'DEFAULT'.")
57
58
  continue
58
59
  try:
59
- profile_oci_credentials = oci.config.from_file("~/.oci/config", profile_name)
60
+ profile_oci_credentials = oci.config.from_file(
61
+ "~/.oci/config",
62
+ profile_name,
63
+ )
60
64
  oci.config.validate_config(profile_oci_credentials)
61
65
  except (ConfigFileNotFound, ProfileNotFound, InvalidConfig) as e:
62
66
  logger.debug(
63
67
  "Error occurred calling oci.config.from_file with profile_name '%s'.",
64
- profile_name, exc_info=True,
68
+ profile_name,
69
+ exc_info=True,
65
70
  )
66
71
  logger.error(
67
72
  (
@@ -96,7 +101,8 @@ def load_oci_accounts(
96
101
  SET aa.lastupdated = $oci_update_tag, aa.name = $ACCOUNT_NAME
97
102
  """
98
103
  for name in oci_accounts:
99
- neo4j_session.run(
104
+ run_write_query(
105
+ neo4j_session,
100
106
  query,
101
107
  TENANCY_ID=oci_accounts[name]["tenancy"],
102
108
  ACCOUNT_NAME=name,
@@ -104,8 +110,11 @@ def load_oci_accounts(
104
110
  )
105
111
 
106
112
 
107
- def cleanup(neo4j_session: neo4j.Session, common_job_parameters: Dict[str, Any]) -> None:
108
- run_cleanup_job('oci_tenancy_cleanup.json', neo4j_session, common_job_parameters)
113
+ def cleanup(
114
+ neo4j_session: neo4j.Session,
115
+ common_job_parameters: Dict[str, Any],
116
+ ) -> None:
117
+ run_cleanup_job("oci_tenancy_cleanup.json", neo4j_session, common_job_parameters)
109
118
 
110
119
 
111
120
  def sync(