cartography 0.104.0rc2__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 (642) hide show
  1. cartography/_version.py +16 -3
  2. cartography/cli.py +466 -5
  3. cartography/client/aws/__init__.py +19 -0
  4. cartography/client/aws/ecr.py +51 -0
  5. cartography/client/core/tx.py +357 -8
  6. cartography/config.py +153 -0
  7. cartography/data/azure_permission_relationships.yaml +20 -0
  8. cartography/data/gcp_permission_relationships.yaml +21 -0
  9. cartography/data/indexes.cypher +0 -186
  10. cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +2 -2
  11. cartography/data/jobs/analysis/keycloak_inheritance.json +30 -0
  12. cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -12
  13. cartography/data/jobs/cleanup/github_repos_cleanup.json +2 -0
  14. cartography/driftdetect/cli.py +3 -2
  15. cartography/graph/cleanupbuilder.py +198 -41
  16. cartography/graph/job.py +54 -6
  17. cartography/graph/querybuilder.py +528 -27
  18. cartography/graph/statement.py +5 -1
  19. cartography/intel/airbyte/__init__.py +105 -0
  20. cartography/intel/airbyte/connections.py +120 -0
  21. cartography/intel/airbyte/destinations.py +81 -0
  22. cartography/intel/airbyte/organizations.py +59 -0
  23. cartography/intel/airbyte/sources.py +78 -0
  24. cartography/intel/airbyte/tags.py +64 -0
  25. cartography/intel/airbyte/users.py +106 -0
  26. cartography/intel/airbyte/util.py +122 -0
  27. cartography/intel/airbyte/workspaces.py +63 -0
  28. cartography/intel/aws/__init__.py +24 -9
  29. cartography/intel/aws/acm.py +124 -0
  30. cartography/intel/aws/apigateway.py +253 -22
  31. cartography/intel/aws/apigatewayv2.py +116 -0
  32. cartography/intel/aws/cloudtrail.py +17 -39
  33. cartography/intel/aws/cloudtrail_management_events.py +962 -0
  34. cartography/intel/aws/cloudwatch.py +150 -4
  35. cartography/intel/aws/codebuild.py +132 -0
  36. cartography/intel/aws/cognito.py +201 -0
  37. cartography/intel/aws/config.py +7 -3
  38. cartography/intel/aws/ec2/elastic_ip_addresses.py +3 -1
  39. cartography/intel/aws/ec2/instances.py +25 -1
  40. cartography/intel/aws/ec2/internet_gateways.py +4 -2
  41. cartography/intel/aws/ec2/load_balancer_v2s.py +11 -5
  42. cartography/intel/aws/ec2/network_interfaces.py +5 -1
  43. cartography/intel/aws/ec2/reserved_instances.py +3 -1
  44. cartography/intel/aws/ec2/security_groups.py +140 -122
  45. cartography/intel/aws/ec2/snapshots.py +47 -84
  46. cartography/intel/aws/ec2/subnets.py +37 -63
  47. cartography/intel/aws/ec2/tgw.py +11 -5
  48. cartography/intel/aws/ec2/volumes.py +1 -1
  49. cartography/intel/aws/ec2/vpc.py +140 -124
  50. cartography/intel/aws/ec2/vpc_peerings.py +262 -125
  51. cartography/intel/aws/ecr.py +269 -98
  52. cartography/intel/aws/ecr_image_layers.py +923 -0
  53. cartography/intel/aws/ecs.py +251 -380
  54. cartography/intel/aws/efs.py +179 -11
  55. cartography/intel/aws/elasticache.py +102 -79
  56. cartography/intel/aws/elasticsearch.py +13 -4
  57. cartography/intel/aws/eventbridge.py +164 -0
  58. cartography/intel/aws/glue.py +181 -0
  59. cartography/intel/aws/guardduty.py +443 -0
  60. cartography/intel/aws/iam.py +750 -493
  61. cartography/intel/aws/identitycenter.py +605 -83
  62. cartography/intel/aws/inspector.py +221 -105
  63. cartography/intel/aws/kms.py +173 -201
  64. cartography/intel/aws/lambda_function.py +272 -189
  65. cartography/intel/aws/organizations.py +10 -9
  66. cartography/intel/aws/permission_relationships.py +10 -20
  67. cartography/intel/aws/rds.py +337 -446
  68. cartography/intel/aws/redshift.py +9 -4
  69. cartography/intel/aws/resourcegroupstaggingapi.py +78 -19
  70. cartography/intel/aws/resources.py +18 -0
  71. cartography/intel/aws/route53.py +386 -332
  72. cartography/intel/aws/s3.py +322 -14
  73. cartography/intel/aws/secretsmanager.py +81 -49
  74. cartography/intel/aws/securityhub.py +3 -1
  75. cartography/intel/aws/sns.py +62 -2
  76. cartography/intel/aws/sqs.py +36 -90
  77. cartography/intel/aws/ssm.py +3 -5
  78. cartography/intel/azure/__init__.py +202 -48
  79. cartography/intel/azure/aks.py +175 -0
  80. cartography/intel/azure/app_service.py +105 -0
  81. cartography/intel/azure/compute.py +59 -112
  82. cartography/intel/azure/container_instances.py +95 -0
  83. cartography/intel/azure/cosmosdb.py +222 -361
  84. cartography/intel/azure/data_factory.py +85 -0
  85. cartography/intel/azure/data_factory_dataset.py +128 -0
  86. cartography/intel/azure/data_factory_linked_service.py +119 -0
  87. cartography/intel/azure/data_factory_pipeline.py +142 -0
  88. cartography/intel/azure/data_lake.py +124 -0
  89. cartography/intel/azure/event_grid.py +94 -0
  90. cartography/intel/azure/functions.py +124 -0
  91. cartography/intel/azure/load_balancers.py +263 -0
  92. cartography/intel/azure/logic_apps.py +101 -0
  93. cartography/intel/azure/monitor.py +105 -0
  94. cartography/intel/azure/network.py +467 -0
  95. cartography/intel/azure/permission_relationships.py +466 -0
  96. cartography/intel/azure/rbac.py +309 -0
  97. cartography/intel/azure/resource_groups.py +82 -0
  98. cartography/intel/azure/security_center.py +106 -0
  99. cartography/intel/azure/sql.py +145 -292
  100. cartography/intel/azure/storage.py +185 -262
  101. cartography/intel/azure/subscription.py +21 -43
  102. cartography/intel/azure/tenant.py +39 -30
  103. cartography/intel/azure/util/common.py +13 -0
  104. cartography/intel/azure/util/credentials.py +49 -174
  105. cartography/intel/azure/util/tag.py +41 -0
  106. cartography/intel/create_indexes.py +2 -1
  107. cartography/intel/crowdstrike/spotlight.py +5 -2
  108. cartography/intel/dns.py +5 -2
  109. cartography/intel/entra/__init__.py +100 -1
  110. cartography/intel/entra/app_role_assignments.py +284 -0
  111. cartography/intel/entra/applications.py +182 -0
  112. cartography/intel/entra/federation/__init__.py +0 -0
  113. cartography/intel/entra/federation/aws_identity_center.py +77 -0
  114. cartography/intel/entra/groups.py +198 -0
  115. cartography/intel/entra/ou.py +48 -24
  116. cartography/intel/entra/service_principals.py +217 -0
  117. cartography/intel/entra/users.py +105 -57
  118. cartography/intel/gcp/__init__.py +334 -396
  119. cartography/intel/gcp/bigtable_app_profile.py +101 -0
  120. cartography/intel/gcp/bigtable_backup.py +91 -0
  121. cartography/intel/gcp/bigtable_cluster.py +93 -0
  122. cartography/intel/gcp/bigtable_instance.py +86 -0
  123. cartography/intel/gcp/bigtable_table.py +87 -0
  124. cartography/intel/gcp/cai.py +292 -0
  125. cartography/intel/gcp/clients.py +112 -0
  126. cartography/intel/gcp/compute.py +128 -119
  127. cartography/intel/gcp/crm/__init__.py +0 -0
  128. cartography/intel/gcp/crm/folders.py +114 -0
  129. cartography/intel/gcp/crm/orgs.py +70 -0
  130. cartography/intel/gcp/crm/projects.py +120 -0
  131. cartography/intel/gcp/dns.py +83 -169
  132. cartography/intel/gcp/gke.py +72 -113
  133. cartography/intel/gcp/iam.py +111 -91
  134. cartography/intel/gcp/permission_relationships.py +394 -0
  135. cartography/intel/gcp/policy_bindings.py +225 -0
  136. cartography/intel/gcp/storage.py +75 -159
  137. cartography/intel/github/__init__.py +62 -25
  138. cartography/intel/github/commits.py +423 -0
  139. cartography/intel/github/repos.py +463 -85
  140. cartography/intel/github/teams.py +3 -3
  141. cartography/intel/github/users.py +5 -0
  142. cartography/intel/github/util.py +12 -0
  143. cartography/intel/googleworkspace/__init__.py +193 -0
  144. cartography/intel/googleworkspace/devices.py +254 -0
  145. cartography/intel/googleworkspace/groups.py +568 -0
  146. cartography/intel/googleworkspace/oauth_apps.py +259 -0
  147. cartography/intel/googleworkspace/tenant.py +85 -0
  148. cartography/intel/googleworkspace/users.py +138 -0
  149. cartography/intel/gsuite/__init__.py +17 -9
  150. cartography/intel/gsuite/groups.py +291 -0
  151. cartography/intel/gsuite/users.py +142 -0
  152. cartography/intel/jamf/computers.py +7 -1
  153. cartography/intel/keycloak/__init__.py +153 -0
  154. cartography/intel/keycloak/authenticationexecutions.py +322 -0
  155. cartography/intel/keycloak/authenticationflows.py +77 -0
  156. cartography/intel/keycloak/clients.py +187 -0
  157. cartography/intel/keycloak/groups.py +126 -0
  158. cartography/intel/keycloak/identityproviders.py +94 -0
  159. cartography/intel/keycloak/organizations.py +163 -0
  160. cartography/intel/keycloak/realms.py +61 -0
  161. cartography/intel/keycloak/roles.py +202 -0
  162. cartography/intel/keycloak/scopes.py +73 -0
  163. cartography/intel/keycloak/users.py +70 -0
  164. cartography/intel/keycloak/util.py +47 -0
  165. cartography/intel/kubernetes/__init__.py +60 -14
  166. cartography/intel/kubernetes/clusters.py +86 -0
  167. cartography/intel/kubernetes/eks.py +402 -0
  168. cartography/intel/kubernetes/namespaces.py +59 -57
  169. cartography/intel/kubernetes/pods.py +168 -75
  170. cartography/intel/kubernetes/rbac.py +597 -0
  171. cartography/intel/kubernetes/secrets.py +95 -45
  172. cartography/intel/kubernetes/services.py +131 -67
  173. cartography/intel/kubernetes/util.py +142 -14
  174. cartography/intel/oci/iam.py +23 -9
  175. cartography/intel/oci/organizations.py +3 -1
  176. cartography/intel/oci/utils.py +28 -5
  177. cartography/intel/okta/applications.py +15 -5
  178. cartography/intel/okta/awssaml.py +14 -10
  179. cartography/intel/okta/factors.py +3 -1
  180. cartography/intel/okta/groups.py +5 -2
  181. cartography/intel/okta/organization.py +3 -1
  182. cartography/intel/okta/origins.py +3 -1
  183. cartography/intel/okta/roles.py +5 -2
  184. cartography/intel/okta/users.py +10 -2
  185. cartography/intel/ontology/__init__.py +44 -0
  186. cartography/intel/ontology/devices.py +54 -0
  187. cartography/intel/ontology/users.py +54 -0
  188. cartography/intel/ontology/utils.py +176 -0
  189. cartography/intel/pagerduty/escalation_policies.py +13 -6
  190. cartography/intel/pagerduty/schedules.py +9 -4
  191. cartography/intel/pagerduty/services.py +7 -3
  192. cartography/intel/pagerduty/teams.py +5 -2
  193. cartography/intel/pagerduty/users.py +3 -1
  194. cartography/intel/pagerduty/vendors.py +3 -1
  195. cartography/intel/scaleway/__init__.py +127 -0
  196. cartography/intel/scaleway/iam/__init__.py +0 -0
  197. cartography/intel/scaleway/iam/apikeys.py +71 -0
  198. cartography/intel/scaleway/iam/applications.py +71 -0
  199. cartography/intel/scaleway/iam/groups.py +71 -0
  200. cartography/intel/scaleway/iam/users.py +71 -0
  201. cartography/intel/scaleway/instances/__init__.py +0 -0
  202. cartography/intel/scaleway/instances/flexibleips.py +86 -0
  203. cartography/intel/scaleway/instances/instances.py +92 -0
  204. cartography/intel/scaleway/projects.py +79 -0
  205. cartography/intel/scaleway/storage/__init__.py +0 -0
  206. cartography/intel/scaleway/storage/snapshots.py +86 -0
  207. cartography/intel/scaleway/storage/volumes.py +84 -0
  208. cartography/intel/scaleway/utils.py +37 -0
  209. cartography/intel/sentinelone/__init__.py +75 -0
  210. cartography/intel/sentinelone/account.py +140 -0
  211. cartography/intel/sentinelone/agent.py +139 -0
  212. cartography/intel/sentinelone/api.py +124 -0
  213. cartography/intel/sentinelone/application.py +248 -0
  214. cartography/intel/sentinelone/cve.py +119 -0
  215. cartography/intel/sentinelone/utils.py +28 -0
  216. cartography/intel/slack/__init__.py +78 -0
  217. cartography/intel/slack/channels.py +80 -0
  218. cartography/intel/slack/groups.py +90 -0
  219. cartography/intel/slack/teams.py +65 -0
  220. cartography/intel/slack/users.py +57 -0
  221. cartography/intel/slack/utils.py +29 -0
  222. cartography/intel/spacelift/__init__.py +161 -0
  223. cartography/intel/spacelift/account.py +73 -0
  224. cartography/intel/spacelift/ec2_ownership.py +280 -0
  225. cartography/intel/spacelift/runs.py +463 -0
  226. cartography/intel/spacelift/spaces.py +112 -0
  227. cartography/intel/spacelift/stacks.py +119 -0
  228. cartography/intel/spacelift/util.py +122 -0
  229. cartography/intel/spacelift/workerpools.py +131 -0
  230. cartography/intel/spacelift/workers.py +128 -0
  231. cartography/intel/trivy/__init__.py +272 -0
  232. cartography/intel/trivy/scanner.py +386 -0
  233. cartography/models/airbyte/__init__.py +0 -0
  234. cartography/models/airbyte/connection.py +138 -0
  235. cartography/models/airbyte/destination.py +75 -0
  236. cartography/models/airbyte/organization.py +19 -0
  237. cartography/models/airbyte/source.py +75 -0
  238. cartography/models/airbyte/stream.py +74 -0
  239. cartography/models/airbyte/tag.py +69 -0
  240. cartography/models/airbyte/user.py +115 -0
  241. cartography/models/airbyte/workspace.py +46 -0
  242. cartography/models/anthropic/apikey.py +4 -0
  243. cartography/models/anthropic/user.py +4 -0
  244. cartography/models/aws/acm/__init__.py +0 -0
  245. cartography/models/aws/acm/certificate.py +75 -0
  246. cartography/models/aws/apigateway/__init__.py +0 -0
  247. cartography/models/aws/apigateway/apigatewaydeployment.py +74 -0
  248. cartography/models/aws/apigateway/apigatewayintegration.py +79 -0
  249. cartography/models/aws/apigateway/apigatewaymethod.py +74 -0
  250. cartography/models/aws/apigatewayv2/__init__.py +0 -0
  251. cartography/models/aws/apigatewayv2/apigatewayv2.py +53 -0
  252. cartography/models/aws/cloudtrail/management_events.py +153 -0
  253. cartography/models/aws/cloudtrail/trail.py +45 -0
  254. cartography/models/aws/cloudwatch/log_metric_filter.py +79 -0
  255. cartography/models/aws/cloudwatch/metric_alarm.py +53 -0
  256. cartography/models/aws/codebuild/__init__.py +0 -0
  257. cartography/models/aws/codebuild/project.py +49 -0
  258. cartography/models/aws/cognito/__init__.py +0 -0
  259. cartography/models/aws/cognito/identity_pool.py +70 -0
  260. cartography/models/aws/cognito/user_pool.py +47 -0
  261. cartography/models/aws/dynamodb/tables.py +2 -0
  262. cartography/models/aws/ec2/instances.py +25 -1
  263. cartography/models/aws/ec2/networkinterfaces.py +4 -0
  264. cartography/models/aws/ec2/security_group_rules.py +109 -0
  265. cartography/models/aws/ec2/security_groups.py +90 -0
  266. cartography/models/aws/ec2/snapshots.py +58 -0
  267. cartography/models/aws/ec2/subnet_instance.py +2 -0
  268. cartography/models/aws/ec2/subnet_networkinterface.py +2 -0
  269. cartography/models/aws/ec2/subnets.py +65 -0
  270. cartography/models/aws/ec2/volumes.py +20 -0
  271. cartography/models/aws/ec2/vpc.py +46 -0
  272. cartography/models/aws/ec2/vpc_cidr.py +102 -0
  273. cartography/models/aws/ec2/vpc_peering.py +157 -0
  274. cartography/models/aws/ecr/__init__.py +0 -0
  275. cartography/models/aws/ecr/image.py +146 -0
  276. cartography/models/aws/ecr/image_layer.py +107 -0
  277. cartography/models/aws/ecr/repository.py +72 -0
  278. cartography/models/aws/ecr/repository_image.py +95 -0
  279. cartography/models/aws/ecs/__init__.py +0 -0
  280. cartography/models/aws/ecs/clusters.py +64 -0
  281. cartography/models/aws/ecs/container_definitions.py +93 -0
  282. cartography/models/aws/ecs/container_instances.py +84 -0
  283. cartography/models/aws/ecs/containers.py +101 -0
  284. cartography/models/aws/ecs/services.py +134 -0
  285. cartography/models/aws/ecs/task_definitions.py +135 -0
  286. cartography/models/aws/ecs/tasks.py +134 -0
  287. cartography/models/aws/efs/access_point.py +77 -0
  288. cartography/models/aws/efs/file_system.py +60 -0
  289. cartography/models/aws/efs/mount_target.py +29 -2
  290. cartography/models/aws/elasticache/__init__.py +0 -0
  291. cartography/models/aws/elasticache/cluster.py +65 -0
  292. cartography/models/aws/elasticache/topic.py +67 -0
  293. cartography/models/aws/eventbridge/__init__.py +0 -0
  294. cartography/models/aws/eventbridge/rule.py +77 -0
  295. cartography/models/aws/eventbridge/target.py +71 -0
  296. cartography/models/aws/glue/__init__.py +0 -0
  297. cartography/models/aws/glue/connection.py +51 -0
  298. cartography/models/aws/glue/job.py +69 -0
  299. cartography/models/aws/guardduty/__init__.py +1 -0
  300. cartography/models/aws/guardduty/detectors.py +50 -0
  301. cartography/models/aws/guardduty/findings.py +121 -0
  302. cartography/models/aws/iam/access_key.py +103 -0
  303. cartography/models/aws/iam/account_role.py +24 -0
  304. cartography/models/aws/iam/federated_principal.py +60 -0
  305. cartography/models/aws/iam/group.py +60 -0
  306. cartography/models/aws/iam/group_membership.py +27 -0
  307. cartography/models/aws/iam/inline_policy.py +78 -0
  308. cartography/models/aws/iam/managed_policy.py +51 -0
  309. cartography/models/aws/iam/policy_statement.py +57 -0
  310. cartography/models/aws/iam/role.py +83 -0
  311. cartography/models/aws/iam/root_principal.py +52 -0
  312. cartography/models/aws/iam/service_principal.py +30 -0
  313. cartography/models/aws/iam/sts_assumerole_allow.py +38 -0
  314. cartography/models/aws/iam/user.py +59 -0
  315. cartography/models/aws/identitycenter/awsidentitycenter.py +1 -0
  316. cartography/models/aws/identitycenter/awspermissionset.py +70 -0
  317. cartography/models/aws/identitycenter/awssogroup.py +70 -0
  318. cartography/models/aws/identitycenter/awsssouser.py +49 -9
  319. cartography/models/aws/inspector/findings.py +37 -0
  320. cartography/models/aws/inspector/packages.py +1 -31
  321. cartography/models/aws/kms/__init__.py +0 -0
  322. cartography/models/aws/kms/aliases.py +86 -0
  323. cartography/models/aws/kms/grants.py +65 -0
  324. cartography/models/aws/kms/keys.py +88 -0
  325. cartography/models/aws/lambda_function/__init__.py +0 -0
  326. cartography/models/aws/lambda_function/alias.py +74 -0
  327. cartography/models/aws/lambda_function/event_source_mapping.py +88 -0
  328. cartography/models/aws/lambda_function/lambda_function.py +91 -0
  329. cartography/models/aws/lambda_function/layer.py +72 -0
  330. cartography/models/aws/rds/__init__.py +0 -0
  331. cartography/models/aws/rds/cluster.py +91 -0
  332. cartography/models/aws/rds/event_subscription.py +146 -0
  333. cartography/models/aws/rds/instance.py +156 -0
  334. cartography/models/aws/rds/snapshot.py +108 -0
  335. cartography/models/aws/rds/subnet_group.py +101 -0
  336. cartography/models/aws/route53/__init__.py +0 -0
  337. cartography/models/aws/route53/dnsrecord.py +235 -0
  338. cartography/models/aws/route53/nameserver.py +63 -0
  339. cartography/models/aws/route53/subzone.py +40 -0
  340. cartography/models/aws/route53/zone.py +47 -0
  341. cartography/models/aws/s3/notification.py +24 -0
  342. cartography/models/aws/secretsmanager/secret.py +106 -0
  343. cartography/models/aws/secretsmanager/secret_version.py +0 -2
  344. cartography/models/aws/sns/topic_subscription.py +74 -0
  345. cartography/models/aws/sqs/__init__.py +0 -0
  346. cartography/models/aws/sqs/queue.py +89 -0
  347. cartography/models/azure/__init__.py +0 -0
  348. cartography/models/azure/aks_cluster.py +54 -0
  349. cartography/models/azure/aks_nodepool.py +54 -0
  350. cartography/models/azure/app_service.py +59 -0
  351. cartography/models/azure/container_instance.py +57 -0
  352. cartography/models/azure/cosmosdb/__init__.py +0 -0
  353. cartography/models/azure/cosmosdb/account.py +77 -0
  354. cartography/models/azure/cosmosdb/accountfailoverpolicy.py +77 -0
  355. cartography/models/azure/cosmosdb/cassandrakeyspace.py +82 -0
  356. cartography/models/azure/cosmosdb/cassandratable.py +81 -0
  357. cartography/models/azure/cosmosdb/corspolicy.py +74 -0
  358. cartography/models/azure/cosmosdb/dblocation.py +120 -0
  359. cartography/models/azure/cosmosdb/mongodbcollection.py +82 -0
  360. cartography/models/azure/cosmosdb/mongodbdatabase.py +78 -0
  361. cartography/models/azure/cosmosdb/privateendpointconnection.py +81 -0
  362. cartography/models/azure/cosmosdb/sqlcontainer.py +88 -0
  363. cartography/models/azure/cosmosdb/sqldatabase.py +78 -0
  364. cartography/models/azure/cosmosdb/tableresource.py +76 -0
  365. cartography/models/azure/cosmosdb/virtualnetworkrule.py +78 -0
  366. cartography/models/azure/data_factory/__init__.py +0 -0
  367. cartography/models/azure/data_factory/data_factory.py +51 -0
  368. cartography/models/azure/data_factory/data_factory_dataset.py +94 -0
  369. cartography/models/azure/data_factory/data_factory_linked_service.py +78 -0
  370. cartography/models/azure/data_factory/data_factory_pipeline.py +93 -0
  371. cartography/models/azure/data_lake_filesystem.py +51 -0
  372. cartography/models/azure/event_grid_topic.py +57 -0
  373. cartography/models/azure/function_app.py +59 -0
  374. cartography/models/azure/load_balancer/__init__.py +0 -0
  375. cartography/models/azure/load_balancer/load_balancer.py +49 -0
  376. cartography/models/azure/load_balancer/load_balancer_backend_pool.py +73 -0
  377. cartography/models/azure/load_balancer/load_balancer_frontend_ip.py +75 -0
  378. cartography/models/azure/load_balancer/load_balancer_inbound_nat_rule.py +78 -0
  379. cartography/models/azure/load_balancer/load_balancer_rule.py +108 -0
  380. cartography/models/azure/logic_apps.py +56 -0
  381. cartography/models/azure/monitor.py +54 -0
  382. cartography/models/azure/network_interface.py +112 -0
  383. cartography/models/azure/network_security_group.py +50 -0
  384. cartography/models/azure/permission_relationships.py +60 -0
  385. cartography/models/azure/principal.py +41 -0
  386. cartography/models/azure/public_ip_address.py +50 -0
  387. cartography/models/azure/rbac.py +268 -0
  388. cartography/models/azure/resource_groups.py +52 -0
  389. cartography/models/azure/security_center.py +50 -0
  390. cartography/models/azure/sql/__init__.py +0 -0
  391. cartography/models/azure/sql/databasethreatdetectionpolicy.py +85 -0
  392. cartography/models/azure/sql/elasticpool.py +77 -0
  393. cartography/models/azure/sql/failovergroup.py +73 -0
  394. cartography/models/azure/sql/recoverabledatabase.py +75 -0
  395. cartography/models/azure/sql/replicationlink.py +81 -0
  396. cartography/models/azure/sql/restorabledroppeddatabase.py +82 -0
  397. cartography/models/azure/sql/restorepoint.py +74 -0
  398. cartography/models/azure/sql/serveradadministrator.py +74 -0
  399. cartography/models/azure/sql/serverdnsalias.py +71 -0
  400. cartography/models/azure/sql/sqldatabase.py +85 -0
  401. cartography/models/azure/sql/sqlserver.py +50 -0
  402. cartography/models/azure/sql/transparentdataencryption.py +76 -0
  403. cartography/models/azure/storage/__init__.py +0 -0
  404. cartography/models/azure/storage/account.py +59 -0
  405. cartography/models/azure/storage/blobcontainer.py +85 -0
  406. cartography/models/azure/storage/blobservice.py +71 -0
  407. cartography/models/azure/storage/fileservice.py +71 -0
  408. cartography/models/azure/storage/fileshare.py +82 -0
  409. cartography/models/azure/storage/queue.py +71 -0
  410. cartography/models/azure/storage/queueservice.py +73 -0
  411. cartography/models/azure/storage/table.py +72 -0
  412. cartography/models/azure/storage/tableservice.py +73 -0
  413. cartography/models/azure/subnet.py +101 -0
  414. cartography/models/azure/subscription.py +47 -0
  415. cartography/models/azure/tags/__init__.py +0 -0
  416. cartography/models/azure/tags/storage_tag.py +40 -0
  417. cartography/models/azure/tags/tag.py +37 -0
  418. cartography/models/azure/tenant.py +17 -0
  419. cartography/models/azure/virtual_network.py +49 -0
  420. cartography/models/azure/vm/__init__.py +0 -0
  421. cartography/models/azure/vm/datadisk.py +80 -0
  422. cartography/models/azure/vm/disk.py +55 -0
  423. cartography/models/azure/vm/snapshot.py +56 -0
  424. cartography/models/azure/vm/virtualmachine.py +59 -0
  425. cartography/models/bigfix/bigfix_computer.py +1 -1
  426. cartography/models/cloudflare/member.py +4 -0
  427. cartography/models/core/common.py +1 -0
  428. cartography/models/core/nodes.py +15 -2
  429. cartography/models/core/relationships.py +44 -0
  430. cartography/models/crowdstrike/hosts.py +1 -1
  431. cartography/models/digitalocean/droplet.py +2 -0
  432. cartography/models/duo/endpoint.py +1 -1
  433. cartography/models/duo/phone.py +2 -2
  434. cartography/models/duo/user.py +4 -0
  435. cartography/models/entra/app_role_assignment.py +115 -0
  436. cartography/models/entra/application.py +49 -0
  437. cartography/models/entra/entra_user_to_aws_sso.py +41 -0
  438. cartography/models/entra/group.py +117 -0
  439. cartography/models/entra/service_principal.py +104 -0
  440. cartography/models/entra/user.py +42 -51
  441. cartography/models/gcp/__init__.py +0 -0
  442. cartography/models/gcp/bigtable/__init__.py +0 -0
  443. cartography/models/gcp/bigtable/app_profile.py +94 -0
  444. cartography/models/gcp/bigtable/backup.py +91 -0
  445. cartography/models/gcp/bigtable/cluster.py +73 -0
  446. cartography/models/gcp/bigtable/instance.py +52 -0
  447. cartography/models/gcp/bigtable/table.py +69 -0
  448. cartography/models/gcp/compute/__init__.py +0 -0
  449. cartography/models/gcp/compute/subnet.py +74 -0
  450. cartography/models/gcp/compute/vpc.py +50 -0
  451. cartography/models/gcp/crm/__init__.py +0 -0
  452. cartography/models/gcp/crm/folders.py +98 -0
  453. cartography/models/gcp/crm/organizations.py +21 -0
  454. cartography/models/gcp/crm/projects.py +100 -0
  455. cartography/models/gcp/dns.py +109 -0
  456. cartography/models/gcp/gke.py +69 -0
  457. cartography/models/gcp/iam.py +3 -0
  458. cartography/models/gcp/permission_relationships.py +61 -0
  459. cartography/models/gcp/policy_bindings.py +93 -0
  460. cartography/models/gcp/storage/__init__.py +0 -0
  461. cartography/models/gcp/storage/bucket.py +119 -0
  462. cartography/models/github/commits.py +63 -0
  463. cartography/models/github/dependencies.py +73 -0
  464. cartography/models/github/manifests.py +49 -0
  465. cartography/models/github/users.py +10 -0
  466. cartography/models/googleworkspace/__init__.py +0 -0
  467. cartography/models/googleworkspace/device.py +132 -0
  468. cartography/models/googleworkspace/group.py +382 -0
  469. cartography/models/googleworkspace/oauth_app.py +124 -0
  470. cartography/models/googleworkspace/tenant.py +30 -0
  471. cartography/models/googleworkspace/user.py +113 -0
  472. cartography/models/gsuite/__init__.py +0 -0
  473. cartography/models/gsuite/group.py +218 -0
  474. cartography/models/gsuite/tenant.py +29 -0
  475. cartography/models/gsuite/user.py +107 -0
  476. cartography/models/kandji/device.py +1 -2
  477. cartography/models/keycloak/__init__.py +0 -0
  478. cartography/models/keycloak/authenticationexecution.py +160 -0
  479. cartography/models/keycloak/authenticationflow.py +54 -0
  480. cartography/models/keycloak/client.py +179 -0
  481. cartography/models/keycloak/group.py +101 -0
  482. cartography/models/keycloak/identityprovider.py +89 -0
  483. cartography/models/keycloak/organization.py +116 -0
  484. cartography/models/keycloak/organizationdomain.py +73 -0
  485. cartography/models/keycloak/realm.py +173 -0
  486. cartography/models/keycloak/role.py +126 -0
  487. cartography/models/keycloak/scope.py +73 -0
  488. cartography/models/keycloak/user.py +55 -0
  489. cartography/models/kubernetes/__init__.py +0 -0
  490. cartography/models/kubernetes/clusterrolebindings.py +138 -0
  491. cartography/models/kubernetes/clusterroles.py +52 -0
  492. cartography/models/kubernetes/clusters.py +26 -0
  493. cartography/models/kubernetes/containers.py +133 -0
  494. cartography/models/kubernetes/groups.py +107 -0
  495. cartography/models/kubernetes/namespaces.py +51 -0
  496. cartography/models/kubernetes/oidc.py +51 -0
  497. cartography/models/kubernetes/pods.py +80 -0
  498. cartography/models/kubernetes/rolebindings.py +159 -0
  499. cartography/models/kubernetes/roles.py +76 -0
  500. cartography/models/kubernetes/secrets.py +79 -0
  501. cartography/models/kubernetes/serviceaccounts.py +77 -0
  502. cartography/models/kubernetes/services.py +108 -0
  503. cartography/models/kubernetes/users.py +105 -0
  504. cartography/models/lastpass/user.py +4 -0
  505. cartography/models/ontology/__init__.py +0 -0
  506. cartography/models/ontology/device.py +137 -0
  507. cartography/models/ontology/mapping/__init__.py +76 -0
  508. cartography/models/ontology/mapping/data/__init__.py +0 -0
  509. cartography/models/ontology/mapping/data/apikeys.py +93 -0
  510. cartography/models/ontology/mapping/data/computeinstance.py +95 -0
  511. cartography/models/ontology/mapping/data/containers.py +88 -0
  512. cartography/models/ontology/mapping/data/databases.py +182 -0
  513. cartography/models/ontology/mapping/data/devices.py +194 -0
  514. cartography/models/ontology/mapping/data/thirdpartyapps.py +140 -0
  515. cartography/models/ontology/mapping/data/useraccounts.py +416 -0
  516. cartography/models/ontology/mapping/data/users.py +63 -0
  517. cartography/models/ontology/mapping/specs.py +85 -0
  518. cartography/models/ontology/user.py +51 -0
  519. cartography/models/openai/adminapikey.py +4 -0
  520. cartography/models/openai/apikey.py +4 -0
  521. cartography/models/openai/user.py +4 -0
  522. cartography/models/scaleway/__init__.py +0 -0
  523. cartography/models/scaleway/iam/__init__.py +0 -0
  524. cartography/models/scaleway/iam/apikey.py +100 -0
  525. cartography/models/scaleway/iam/application.py +52 -0
  526. cartography/models/scaleway/iam/group.py +95 -0
  527. cartography/models/scaleway/iam/user.py +64 -0
  528. cartography/models/scaleway/instance/__init__.py +0 -0
  529. cartography/models/scaleway/instance/flexibleip.py +52 -0
  530. cartography/models/scaleway/instance/instance.py +120 -0
  531. cartography/models/scaleway/organization.py +19 -0
  532. cartography/models/scaleway/project.py +48 -0
  533. cartography/models/scaleway/storage/__init__.py +0 -0
  534. cartography/models/scaleway/storage/snapshot.py +78 -0
  535. cartography/models/scaleway/storage/volume.py +51 -0
  536. cartography/models/sentinelone/__init__.py +1 -0
  537. cartography/models/sentinelone/account.py +40 -0
  538. cartography/models/sentinelone/agent.py +50 -0
  539. cartography/models/sentinelone/application.py +44 -0
  540. cartography/models/sentinelone/application_version.py +96 -0
  541. cartography/models/sentinelone/cve.py +73 -0
  542. cartography/models/slack/__init__.py +0 -0
  543. cartography/models/slack/channels.py +92 -0
  544. cartography/models/slack/group.py +129 -0
  545. cartography/models/slack/team.py +22 -0
  546. cartography/models/slack/user.py +62 -0
  547. cartography/models/snipeit/asset.py +2 -0
  548. cartography/models/snipeit/user.py +4 -0
  549. cartography/models/spacelift/__init__.py +0 -0
  550. cartography/models/spacelift/cloudtrailevent.py +120 -0
  551. cartography/models/spacelift/run.py +162 -0
  552. cartography/models/spacelift/space.py +131 -0
  553. cartography/models/spacelift/spaceliftaccount.py +31 -0
  554. cartography/models/spacelift/spaceliftgitcommit.py +157 -0
  555. cartography/models/spacelift/stack.py +96 -0
  556. cartography/models/spacelift/user.py +63 -0
  557. cartography/models/spacelift/worker.py +97 -0
  558. cartography/models/spacelift/workerpool.py +90 -0
  559. cartography/models/tailscale/device.py +2 -1
  560. cartography/models/tailscale/user.py +6 -1
  561. cartography/models/trivy/__init__.py +0 -0
  562. cartography/models/trivy/findings.py +66 -0
  563. cartography/models/trivy/fix.py +66 -0
  564. cartography/models/trivy/package.py +71 -0
  565. cartography/rules/README.md +1 -0
  566. cartography/rules/__init__.py +0 -0
  567. cartography/rules/cli.py +261 -0
  568. cartography/rules/data/__init__.py +0 -0
  569. cartography/rules/data/rules/__init__.py +46 -0
  570. cartography/rules/data/rules/cloud_security_product_deactivated.py +49 -0
  571. cartography/rules/data/rules/compute_instance_exposed.py +51 -0
  572. cartography/rules/data/rules/database_instance_exposed.py +53 -0
  573. cartography/rules/data/rules/delegation_boundary_modifiable.py +90 -0
  574. cartography/rules/data/rules/identity_administration_privileges.py +100 -0
  575. cartography/rules/data/rules/inactive_user_active_accounts.py +48 -0
  576. cartography/rules/data/rules/malicious_npm_dependencies_shai_hulud.py +2222 -0
  577. cartography/rules/data/rules/mfa_missing.py +46 -0
  578. cartography/rules/data/rules/object_storage_public.py +100 -0
  579. cartography/rules/data/rules/policy_administration_privileges.py +104 -0
  580. cartography/rules/data/rules/unmanaged_accounts.py +43 -0
  581. cartography/rules/data/rules/workload_identity_admin_capabilities.py +193 -0
  582. cartography/rules/formatters.py +108 -0
  583. cartography/rules/runners.py +216 -0
  584. cartography/rules/spec/__init__.py +0 -0
  585. cartography/rules/spec/model.py +267 -0
  586. cartography/rules/spec/result.py +38 -0
  587. cartography/sync.py +25 -5
  588. cartography/util.py +101 -31
  589. {cartography-0.104.0rc2.dist-info → cartography-0.123.0.dist-info}/METADATA +61 -22
  590. cartography-0.123.0.dist-info/RECORD +856 -0
  591. {cartography-0.104.0rc2.dist-info → cartography-0.123.0.dist-info}/entry_points.txt +1 -0
  592. cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -65
  593. cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -17
  594. cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -24
  595. cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -13
  596. cartography/data/jobs/cleanup/aws_import_identity_center_cleanup.json +0 -16
  597. cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -50
  598. cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -30
  599. cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -23
  600. cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -47
  601. cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -23
  602. cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -13
  603. cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -8
  604. cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -30
  605. cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -8
  606. cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -23
  607. cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -45
  608. cartography/data/jobs/cleanup/aws_kms_details.json +0 -10
  609. cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -25
  610. cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -15
  611. cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -25
  612. cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -25
  613. cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -15
  614. cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -85
  615. cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -15
  616. cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -15
  617. cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -25
  618. cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -125
  619. cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -95
  620. cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -14
  621. cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -9
  622. cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -35
  623. cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -23
  624. cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -17
  625. cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -23
  626. cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -29
  627. cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -17
  628. cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -29
  629. cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -23
  630. cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -11
  631. cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -70
  632. cartography/intel/gcp/crm.py +0 -355
  633. cartography/intel/gsuite/api.py +0 -342
  634. cartography-0.104.0rc2.dist-info/RECORD +0 -455
  635. /cartography/data/jobs/{analysis → scoped_analysis}/aws_s3acl_analysis.json +0 -0
  636. /cartography/models/aws/{apigateway.py → apigateway/apigateway.py} +0 -0
  637. /cartography/models/aws/{apigatewaycertificate.py → apigateway/apigatewaycertificate.py} +0 -0
  638. /cartography/models/aws/{apigatewayresource.py → apigateway/apigatewayresource.py} +0 -0
  639. /cartography/models/aws/{apigatewaystage.py → apigateway/apigatewaystage.py} +0 -0
  640. {cartography-0.104.0rc2.dist-info → cartography-0.123.0.dist-info}/WHEEL +0 -0
  641. {cartography-0.104.0rc2.dist-info → cartography-0.123.0.dist-info}/licenses/LICENSE +0 -0
  642. {cartography-0.104.0rc2.dist-info → cartography-0.123.0.dist-info}/top_level.txt +0 -0
cartography/config.py CHANGED
@@ -31,6 +31,8 @@ class Config:
31
31
  :type aws_best_effort_mode: bool
32
32
  :param aws_best_effort_mode: If True, AWS sync will not raise any exceptions, just log. If False (default),
33
33
  exceptions will be raised.
34
+ :type aws_cloudtrail_management_events_lookback_hours: int
35
+ :param aws_cloudtrail_management_events_lookback_hours: Number of hours back to retrieve CloudTrail management events from. Optional.
34
36
  :type azure_sync_all_subscriptions: bool
35
37
  :param azure_sync_all_subscriptions: If True, Azure sync will run for all profiles in azureProfile.json. If
36
38
  False (default), Azure sync will run using current user session via CLI credentials. Optional.
@@ -43,6 +45,8 @@ class Config:
43
45
  :param azure_client_id: Client Id for connecting in a Service Principal Authentication approach. Optional.
44
46
  :type azure_client_secret: str
45
47
  :param azure_client_secret: Client Secret for connecting in a Service Principal Authentication approach. Optional.
48
+ :type azure_subscription_id: str | None
49
+ :param azure_subscription_id: The Azure Subscription ID to sync.
46
50
  :type entra_tenant_id: str
47
51
  :param entra_tenant_id: Tenant Id for connecting in a Service Principal Authentication approach. Optional.
48
52
  :type entra_client_id: str
@@ -51,6 +55,12 @@ class Config:
51
55
  :param entra_client_secret: Client Secret for connecting in a Service Principal Authentication approach. Optional.
52
56
  :type aws_requested_syncs: str
53
57
  :param aws_requested_syncs: Comma-separated list of AWS resources to sync. Optional.
58
+ :type aws_guardduty_severity_threshold: str
59
+ :param aws_guardduty_severity_threshold: GuardDuty severity threshold filter. Only findings at or above this
60
+ severity level will be synced. Valid values: LOW, MEDIUM, HIGH, CRITICAL. Optional.
61
+ :type experimental_aws_inspector_batch: int
62
+ :param experimental_aws_inspector_batch: EXPERIMENTAL: Batch size for AWS Inspector findings sync. Controls how
63
+ many findings are fetched, processed and cleaned up at a time. Default is 1000. Optional.
54
64
  :type analysis_job_directory: str
55
65
  :param analysis_job_directory: Path to a directory tree containing analysis jobs to run. Optional.
56
66
  :type oci_sync_all_profiles: bool
@@ -63,10 +73,16 @@ class Config:
63
73
  :param okta_saml_role_regex: The regex used to map okta groups to AWS roles. Optional.
64
74
  :type github_config: str
65
75
  :param github_config: Base64 encoded config object for GitHub ingestion. Optional.
76
+ :type github_commit_lookback_days: int
77
+ :param github_commit_lookback_days: Number of days to look back for GitHub commit tracking. Optional.
66
78
  :type digitalocean_token: str
67
79
  :param digitalocean_token: DigitalOcean access token. Optional.
68
80
  :type permission_relationships_file: str
69
81
  :param permission_relationships_file: File path for the resource permission relationships file. Optional.
82
+ :type azure_permission_relationships_file: str
83
+ :param azure_permission_relationships_file: File path for the Azure permission relationships file. Optional.
84
+ :type gcp_permission_relationships_file: str
85
+ :param gcp_permission_relationships_file: File path for the GCP resource permission relationships file. Optional.
70
86
  :type jamf_base_uri: string
71
87
  :param jamf_base_uri: Jamf data provider base URI, e.g. https://example.com/JSSResource. Optional.
72
88
  :type jamf_user: string
@@ -87,6 +103,8 @@ class Config:
87
103
  :param statsd_port: If statsd_enabled is True, send metrics to this port on statsd_host. Optional.
88
104
  :type: k8s_kubeconfig: str
89
105
  :param k8s_kubeconfig: Path to kubeconfig file for kubernetes cluster(s). Optional
106
+ :type: managed_kubernetes: str
107
+ :param managed_kubernetes: Type of managed Kubernetes service (e.g., "eks"). Optional.
90
108
  :type: pagerduty_api_key: str
91
109
  :param pagerduty_api_key: API authentication key for pagerduty. Optional.
92
110
  :type: pagerduty_request_timeout: int
@@ -97,6 +115,10 @@ class Config:
97
115
  :param gsuite_auth_method: Auth method (delegated, oauth) used for Google Workspace. Optional.
98
116
  :type gsuite_config: str
99
117
  :param gsuite_config: Base64 encoded config object or config file path for Google Workspace. Optional.
118
+ :type googleworkspace_auth_method: str
119
+ :param googleworkspace_auth_method: Auth method (delegated, oauth, default) used for Google Workspace. Optional.
120
+ :type googleworkspace_config: str
121
+ :param googleworkspace_config: Base64 encoded config object or config file path for Google Workspace. Optional.
100
122
  :type lastpass_cid: str
101
123
  :param lastpass_cid: Lastpass account ID. Optional.
102
124
  :type lastpass_provhash: str
@@ -137,6 +159,61 @@ class Config:
137
159
  :param openai_org_id: OpenAI organization id. Optional.
138
160
  :type anthropic_apikey: string
139
161
  :param anthropic_apikey: Anthropic API key. Optional.
162
+ :type airbyte_client_id: str
163
+ :param airbyte_client_id: Airbyte client ID for API authentication. Optional.
164
+ :type airbyte_client_secret: str
165
+ :param airbyte_client_secret: Airbyte client secret for API authentication. Optional.
166
+ :type airbyte_api_url: str
167
+ :param airbyte_api_url: Airbyte API base URL, e.g. https://api.airbyte.com/v1. Optional.
168
+ :type trivy_s3_bucket: str
169
+ :param trivy_s3_bucket: The S3 bucket name containing Trivy scan results. Optional.
170
+ :type trivy_s3_prefix: str
171
+ :param trivy_s3_prefix: The S3 prefix path containing Trivy scan results. Optional.
172
+ :type ontology_users_source: str
173
+ :param ontology_users_source: Comma-separated list of sources of truth for user data in the ontology. Optional.
174
+ :type ontology_devices_source: str
175
+ :param ontology_devices_source: Comma-separated list of sources of truth for client computers data in the ontology.
176
+ Optional.
177
+ :type trivy_results_dir: str
178
+ :param trivy_results_dir: Local directory containing Trivy scan results. Optional.
179
+ :type scaleway_access_key: str
180
+ :param scaleway_access_key: Scaleway access key. Optional.
181
+ :type scaleway_secret_key: str
182
+ :param scaleway_secret_key: Scaleway secret key. Optional.
183
+ :type scaleway_org: str
184
+ :param scaleway_org: Scaleway organization id. Optional.
185
+ :type sentinelone_api_url: string
186
+ :param sentinelone_api_url: SentinelOne API URL. Optional.
187
+ :type sentinelone_api_token: string
188
+ :param sentinelone_api_token: SentinelOne API token for authentication. Optional.
189
+ :type sentinelone_account_ids: list[str]
190
+ :param sentinelone_account_ids: List of SentinelOne account IDs to sync. Optional.
191
+ :type spacelift_api_endpoint: string
192
+ :param spacelift_api_endpoint: Spacelift GraphQL API endpoint. Optional.
193
+ :type spacelift_api_token: string
194
+ :param spacelift_api_token: Spacelift API token for authentication. Optional (can use API key instead).
195
+ :type spacelift_api_key_id: string
196
+ :param spacelift_api_key_id: Spacelift API key ID for token exchange authentication. Optional (alternative to token).
197
+ :type spacelift_api_key_secret: string
198
+ :param spacelift_api_key_secret: Spacelift API key secret for token exchange authentication. Optional (alternative to token).
199
+ :type spacelift_ec2_ownership_s3_bucket: string
200
+ :param spacelift_ec2_ownership_s3_bucket: S3 bucket name containing EC2 ownership data from Athena. Optional.
201
+ :type spacelift_ec2_ownership_s3_prefix: string
202
+ :param spacelift_ec2_ownership_s3_prefix: S3 prefix for EC2 ownership data from Athena. All JSON files under this prefix will be processed. Optional.
203
+ :type keycloak_client_id: str
204
+ :param keycloak_client_id: Keycloak client ID for API authentication. Optional.
205
+ :type keycloak_client_secret: str
206
+ :param keycloak_client_secret: Keycloak client secret for API authentication. Optional.
207
+ :type keycloak_realm: str
208
+ :param keycloak_realm: Keycloak realm for authentication (all realms will be synced). Optional.
209
+ :type keycloak_url: str
210
+ :param keycloak_url: Keycloak base URL, e.g. https://keycloak.example.com. Optional.
211
+ :type slack_token: str
212
+ :param slack_token: Slack API token. Optional.
213
+ :type slack_teams: list[str]
214
+ :param slack_teams: List of Slack team IDs to sync. Optional.
215
+ :type slack_channels_memberships: bool
216
+ :param slack_channels_memberships: If True, sync Slack channel membership data. Optional.
140
217
  """
141
218
 
142
219
  def __init__(
@@ -151,23 +228,30 @@ class Config:
151
228
  aws_sync_all_profiles=False,
152
229
  aws_regions=None,
153
230
  aws_best_effort_mode=False,
231
+ aws_cloudtrail_management_events_lookback_hours=None,
232
+ experimental_aws_inspector_batch=1000,
154
233
  azure_sync_all_subscriptions=False,
155
234
  azure_sp_auth=None,
156
235
  azure_tenant_id=None,
157
236
  azure_client_id=None,
158
237
  azure_client_secret=None,
238
+ azure_subscription_id: str | None = None,
159
239
  entra_tenant_id=None,
160
240
  entra_client_id=None,
161
241
  entra_client_secret=None,
162
242
  aws_requested_syncs=None,
243
+ aws_guardduty_severity_threshold=None,
163
244
  analysis_job_directory=None,
164
245
  oci_sync_all_profiles=None,
165
246
  okta_org_id=None,
166
247
  okta_api_key=None,
167
248
  okta_saml_role_regex=None,
168
249
  github_config=None,
250
+ github_commit_lookback_days=30,
169
251
  digitalocean_token=None,
170
252
  permission_relationships_file=None,
253
+ azure_permission_relationships_file=None,
254
+ gcp_permission_relationships_file=None,
171
255
  jamf_base_uri=None,
172
256
  jamf_user=None,
173
257
  jamf_password=None,
@@ -175,6 +259,7 @@ class Config:
175
259
  kandji_tenant_id=None,
176
260
  kandji_token=None,
177
261
  k8s_kubeconfig=None,
262
+ managed_kubernetes=None,
178
263
  statsd_enabled=False,
179
264
  statsd_prefix=None,
180
265
  statsd_host=None,
@@ -189,6 +274,8 @@ class Config:
189
274
  crowdstrike_api_url=None,
190
275
  gsuite_auth_method=None,
191
276
  gsuite_config=None,
277
+ googleworkspace_auth_method=None,
278
+ googleworkspace_config=None,
192
279
  lastpass_cid=None,
193
280
  lastpass_provhash=None,
194
281
  bigfix_username=None,
@@ -209,6 +296,33 @@ class Config:
209
296
  openai_apikey=None,
210
297
  openai_org_id=None,
211
298
  anthropic_apikey=None,
299
+ airbyte_client_id=None,
300
+ airbyte_client_secret=None,
301
+ airbyte_api_url=None,
302
+ trivy_s3_bucket=None,
303
+ trivy_s3_prefix=None,
304
+ ontology_users_source=None,
305
+ ontology_devices_source=None,
306
+ trivy_results_dir=None,
307
+ scaleway_access_key=None,
308
+ scaleway_secret_key=None,
309
+ scaleway_org=None,
310
+ sentinelone_api_url=None,
311
+ sentinelone_api_token=None,
312
+ sentinelone_account_ids=None,
313
+ spacelift_api_endpoint=None,
314
+ spacelift_api_token=None,
315
+ spacelift_api_key_id=None,
316
+ spacelift_api_key_secret=None,
317
+ spacelift_ec2_ownership_s3_bucket=None,
318
+ spacelift_ec2_ownership_s3_prefix=None,
319
+ keycloak_client_id=None,
320
+ keycloak_client_secret=None,
321
+ keycloak_realm=None,
322
+ keycloak_url=None,
323
+ slack_token=None,
324
+ slack_teams=None,
325
+ slack_channels_memberships=False,
212
326
  ):
213
327
  self.neo4j_uri = neo4j_uri
214
328
  self.neo4j_user = neo4j_user
@@ -220,23 +334,32 @@ class Config:
220
334
  self.aws_sync_all_profiles = aws_sync_all_profiles
221
335
  self.aws_regions = aws_regions
222
336
  self.aws_best_effort_mode = aws_best_effort_mode
337
+ self.aws_cloudtrail_management_events_lookback_hours = (
338
+ aws_cloudtrail_management_events_lookback_hours
339
+ )
340
+ self.experimental_aws_inspector_batch = experimental_aws_inspector_batch
223
341
  self.azure_sync_all_subscriptions = azure_sync_all_subscriptions
224
342
  self.azure_sp_auth = azure_sp_auth
225
343
  self.azure_tenant_id = azure_tenant_id
226
344
  self.azure_client_id = azure_client_id
227
345
  self.azure_client_secret = azure_client_secret
346
+ self.azure_subscription_id = azure_subscription_id
228
347
  self.entra_tenant_id = entra_tenant_id
229
348
  self.entra_client_id = entra_client_id
230
349
  self.entra_client_secret = entra_client_secret
231
350
  self.aws_requested_syncs = aws_requested_syncs
351
+ self.aws_guardduty_severity_threshold = aws_guardduty_severity_threshold
232
352
  self.analysis_job_directory = analysis_job_directory
233
353
  self.oci_sync_all_profiles = oci_sync_all_profiles
234
354
  self.okta_org_id = okta_org_id
235
355
  self.okta_api_key = okta_api_key
236
356
  self.okta_saml_role_regex = okta_saml_role_regex
237
357
  self.github_config = github_config
358
+ self.github_commit_lookback_days = github_commit_lookback_days
238
359
  self.digitalocean_token = digitalocean_token
239
360
  self.permission_relationships_file = permission_relationships_file
361
+ self.azure_permission_relationships_file = azure_permission_relationships_file
362
+ self.gcp_permission_relationships_file = gcp_permission_relationships_file
240
363
  self.jamf_base_uri = jamf_base_uri
241
364
  self.jamf_user = jamf_user
242
365
  self.jamf_password = jamf_password
@@ -244,6 +367,7 @@ class Config:
244
367
  self.kandji_tenant_id = kandji_tenant_id
245
368
  self.kandji_token = kandji_token
246
369
  self.k8s_kubeconfig = k8s_kubeconfig
370
+ self.managed_kubernetes = managed_kubernetes
247
371
  self.statsd_enabled = statsd_enabled
248
372
  self.statsd_prefix = statsd_prefix
249
373
  self.statsd_host = statsd_host
@@ -258,6 +382,8 @@ class Config:
258
382
  self.crowdstrike_api_url = crowdstrike_api_url
259
383
  self.gsuite_auth_method = gsuite_auth_method
260
384
  self.gsuite_config = gsuite_config
385
+ self.googleworkspace_auth_method = googleworkspace_auth_method
386
+ self.googleworkspace_config = googleworkspace_config
261
387
  self.lastpass_cid = lastpass_cid
262
388
  self.lastpass_provhash = lastpass_provhash
263
389
  self.bigfix_username = bigfix_username
@@ -278,3 +404,30 @@ class Config:
278
404
  self.openai_apikey = openai_apikey
279
405
  self.openai_org_id = openai_org_id
280
406
  self.anthropic_apikey = anthropic_apikey
407
+ self.airbyte_client_id = airbyte_client_id
408
+ self.airbyte_client_secret = airbyte_client_secret
409
+ self.airbyte_api_url = airbyte_api_url
410
+ self.trivy_s3_bucket = trivy_s3_bucket
411
+ self.trivy_s3_prefix = trivy_s3_prefix
412
+ self.ontology_users_source = ontology_users_source
413
+ self.ontology_devices_source = ontology_devices_source
414
+ self.trivy_results_dir = trivy_results_dir
415
+ self.scaleway_access_key = scaleway_access_key
416
+ self.scaleway_secret_key = scaleway_secret_key
417
+ self.scaleway_org = scaleway_org
418
+ self.sentinelone_api_url = sentinelone_api_url
419
+ self.sentinelone_api_token = sentinelone_api_token
420
+ self.sentinelone_account_ids = sentinelone_account_ids
421
+ self.spacelift_api_endpoint = spacelift_api_endpoint
422
+ self.spacelift_api_token = spacelift_api_token
423
+ self.spacelift_api_key_id = spacelift_api_key_id
424
+ self.spacelift_api_key_secret = spacelift_api_key_secret
425
+ self.spacelift_ec2_ownership_s3_bucket = spacelift_ec2_ownership_s3_bucket
426
+ self.spacelift_ec2_ownership_s3_prefix = spacelift_ec2_ownership_s3_prefix
427
+ self.keycloak_client_id = keycloak_client_id
428
+ self.keycloak_client_secret = keycloak_client_secret
429
+ self.keycloak_realm = keycloak_realm
430
+ self.keycloak_url = keycloak_url
431
+ self.slack_token = slack_token
432
+ self.slack_teams = slack_teams
433
+ self.slack_channels_memberships = slack_channels_memberships
@@ -0,0 +1,20 @@
1
+ # Map principals that can manage Azure SQL Servers. Specifically,
2
+ # create an (:EntraUser|EntraGroup|EntraServicePrincipal)-[:CAN_MANAGE]->(:AzureSQLServer) relationship
3
+ # for principals that have a role assignment with _any_ of the below
4
+ # permissions. Similar logic applies for the other entries in this file.
5
+ - target_label: AzureSQLServer
6
+ permissions:
7
+ - Microsoft.Sql/servers/delete
8
+ relationship_name: CAN_MANAGE
9
+
10
+ # Map principals that can read Azure SQL Servers.
11
+ - target_label: AzureSQLServer
12
+ permissions:
13
+ - Microsoft.Sql/servers/read
14
+ relationship_name: CAN_READ
15
+
16
+ # Map principals that can write to Azure SQL Servers.
17
+ - target_label: AzureSQLServer
18
+ permissions:
19
+ - Microsoft.Sql/servers/write
20
+ relationship_name: CAN_WRITE
@@ -0,0 +1,21 @@
1
+ # Map principals that can read objects from a GCPBucket. Specifically,
2
+ # create an (:GCPPrincipal)-[:CAN_READ]->(:GCPBucket) relationship
3
+ # for principals that have a policy attached with _any_ of the below
4
+ # permissions. Similar logic applies for the other entries in this file.
5
+ - target_label: GCPBucket
6
+ permissions:
7
+ - storage.objects.get
8
+ relationship_name: CAN_READ
9
+
10
+ # Map principals that can write objects to a GCPBucket.
11
+ - target_label: GCPBucket
12
+ permissions:
13
+ - storage.objects.create
14
+ - storage.objects.update
15
+ relationship_name: CAN_WRITE
16
+
17
+ # Map principals that can delete objects from a GCPBucket.
18
+ - target_label: GCPBucket
19
+ permissions:
20
+ - storage.objects.delete
21
+ relationship_name: CAN_DELETE
@@ -21,33 +21,12 @@ CREATE INDEX IF NOT EXISTS FOR (n:AWSDNSRecord) ON (n.lastupdated);
21
21
  CREATE INDEX IF NOT EXISTS FOR (n:AWSDNSZone) ON (n.name);
22
22
  CREATE INDEX IF NOT EXISTS FOR (n:AWSDNSZone) ON (n.zoneid);
23
23
  CREATE INDEX IF NOT EXISTS FOR (n:AWSDNSZone) ON (n.lastupdated);
24
- CREATE INDEX IF NOT EXISTS FOR (n:AWSGroup) ON (n.arn);
25
- CREATE INDEX IF NOT EXISTS FOR (n:AWSGroup) ON (n.lastupdated);
26
24
  CREATE INDEX IF NOT EXISTS FOR (n:AWSInternetGateway) ON (n.id);
27
25
  CREATE INDEX IF NOT EXISTS FOR (n:AWSInternetGateway) ON (n.lastupdated);
28
26
  CREATE INDEX IF NOT EXISTS FOR (n:AWSIpv4CidrBlock) ON (n.id);
29
27
  CREATE INDEX IF NOT EXISTS FOR (n:AWSIpv4CidrBlock) ON (n.lastupdated);
30
28
  CREATE INDEX IF NOT EXISTS FOR (n:AWSIpv6CidrBlock) ON (n.id);
31
29
  CREATE INDEX IF NOT EXISTS FOR (n:AWSIpv6CidrBlock) ON (n.lastupdated);
32
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambda) ON (n.id);
33
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambda) ON (n.lastupdated);
34
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaEventSourceMapping) ON (n.id);
35
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaEventSourceMapping) ON (n.lastupdated);
36
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaFunctionAlias) ON (n.id);
37
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaFunctionAlias) ON (n.lastupdated);
38
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaLayer) ON (n.id);
39
- CREATE INDEX IF NOT EXISTS FOR (n:AWSLambdaLayer) ON (n.lastupdated);
40
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPeeringConnection) ON (n.id);
41
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPeeringConnection) ON (n.lastupdated);
42
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPolicy) ON (n.id);
43
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPolicy) ON (n.name);
44
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPolicy) ON (n.lastupdated);
45
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPolicyStatement) ON (n.id);
46
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPolicyStatement) ON (n.lastupdated);
47
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPrincipal) ON (n.arn);
48
- CREATE INDEX IF NOT EXISTS FOR (n:AWSPrincipal) ON (n.lastupdated);
49
- CREATE INDEX IF NOT EXISTS FOR (n:AWSRole) ON (n.arn);
50
- CREATE INDEX IF NOT EXISTS FOR (n:AWSRole) ON (n.lastupdated);
51
30
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTag) ON (n.id);
52
31
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTag) ON (n.key);
53
32
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTag) ON (n.lastupdated);
@@ -56,13 +35,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:AWSTransitGateway) ON (n.id);
56
35
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTransitGateway) ON (n.lastupdated);
57
36
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTransitGatewayAttachment) ON (n.id);
58
37
  CREATE INDEX IF NOT EXISTS FOR (n:AWSTransitGatewayAttachment) ON (n.lastupdated);
59
- CREATE INDEX IF NOT EXISTS FOR (n:AWSUser) ON (n.arn);
60
- CREATE INDEX IF NOT EXISTS FOR (n:AWSUser) ON (n.name);
61
- CREATE INDEX IF NOT EXISTS FOR (n:AWSUser) ON (n.lastupdated);
62
- CREATE INDEX IF NOT EXISTS FOR (n:AWSVpc) ON (n.id);
63
- CREATE INDEX IF NOT EXISTS FOR (n:AWSVpc) ON (n.lastupdated);
64
- CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.accesskeyid);
65
- CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.lastupdated);
66
38
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.arn);
67
39
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.lastupdated);
68
40
  CREATE INDEX IF NOT EXISTS FOR (n:CVE) ON (n.id);
@@ -81,14 +53,9 @@ CREATE INDEX IF NOT EXISTS FOR (n:DODroplet) ON (n.id);
81
53
  CREATE INDEX IF NOT EXISTS FOR (n:DODroplet) ON (n.lastupdated);
82
54
  CREATE INDEX IF NOT EXISTS FOR (n:DOProject) ON (n.id);
83
55
  CREATE INDEX IF NOT EXISTS FOR (n:DOProject) ON (n.lastupdated);
84
- CREATE INDEX IF NOT EXISTS FOR (n:EBSSnapshot) ON (n.id);
85
- CREATE INDEX IF NOT EXISTS FOR (n:EBSSnapshot) ON (n.lastupdated);
86
56
  CREATE INDEX IF NOT EXISTS FOR (n:EC2KeyPair) ON (n.keyfingerprint);
87
57
  CREATE INDEX IF NOT EXISTS FOR (n:EC2ReservedInstance) ON (n.id);
88
58
  CREATE INDEX IF NOT EXISTS FOR (n:EC2ReservedInstance) ON (n.lastupdated);
89
- CREATE INDEX IF NOT EXISTS FOR (n:ECRImage) ON (n.id);
90
- CREATE INDEX IF NOT EXISTS FOR (n:ECRImage) ON (n.digest);
91
- CREATE INDEX IF NOT EXISTS FOR (n:ECRImage) ON (n.lastupdated);
92
59
  CREATE INDEX IF NOT EXISTS FOR (n:ECRRepository) ON (n.id);
93
60
  CREATE INDEX IF NOT EXISTS FOR (n:ECRRepository) ON (n.name);
94
61
  CREATE INDEX IF NOT EXISTS FOR (n:ECRRepository) ON (n.uri);
@@ -99,21 +66,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:ECRRepositoryImage) ON (n.tag);
99
66
  CREATE INDEX IF NOT EXISTS FOR (n:ECRRepositoryImage) ON (n.lastupdated);
100
67
  CREATE INDEX IF NOT EXISTS FOR (n:ECRScanFinding) ON (n.id);
101
68
  CREATE INDEX IF NOT EXISTS FOR (n:ECRScanFinding) ON (n.lastupdated);
102
- CREATE INDEX IF NOT EXISTS FOR (n:ECSCluster) ON (n.id);
103
- CREATE INDEX IF NOT EXISTS FOR (n:ECSCluster) ON (n.lastupdated);
104
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainerInstance) ON (n.id);
105
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainerInstance) ON (n.lastupdated);
106
- CREATE INDEX IF NOT EXISTS FOR (n:ECSService) ON (n.id);
107
- CREATE INDEX IF NOT EXISTS FOR (n:ECSService) ON (n.lastupdated);
108
- CREATE INDEX IF NOT EXISTS FOR (n:ECSTaskDefinition) ON (n.id);
109
- CREATE INDEX IF NOT EXISTS FOR (n:ECSTaskDefinition) ON (n.arn);
110
- CREATE INDEX IF NOT EXISTS FOR (n:ECSTaskDefinition) ON (n.lastupdated);
111
- CREATE INDEX IF NOT EXISTS FOR (n:ECSTask) ON (n.id);
112
- CREATE INDEX IF NOT EXISTS FOR (n:ECSTask) ON (n.lastupdated);
113
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainerDefinition) ON (n.id);
114
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainerDefinition) ON (n.lastupdated);
115
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainer) ON (n.id);
116
- CREATE INDEX IF NOT EXISTS FOR (n:ECSContainer) ON (n.lastupdated);
117
69
  CREATE INDEX IF NOT EXISTS FOR (n:ElasticacheCluster) ON (n.id);
118
70
  CREATE INDEX IF NOT EXISTS FOR (n:ElasticacheCluster) ON (n.arn);
119
71
  CREATE INDEX IF NOT EXISTS FOR (n:ElasticacheCluster) ON (n.lastupdated);
@@ -129,12 +81,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:ESDomain) ON (n.arn);
129
81
  CREATE INDEX IF NOT EXISTS FOR (n:ESDomain) ON (n.id);
130
82
  CREATE INDEX IF NOT EXISTS FOR (n:ESDomain) ON (n.name);
131
83
  CREATE INDEX IF NOT EXISTS FOR (n:ESDomain) ON (n.lastupdated);
132
- CREATE INDEX IF NOT EXISTS FOR (n:GCPDNSZone) ON (n.id);
133
- CREATE INDEX IF NOT EXISTS FOR (n:GCPDNSZone) ON (n.lastupdated);
134
- CREATE INDEX IF NOT EXISTS FOR (n:GCPRecordSet) ON (n.id);
135
- CREATE INDEX IF NOT EXISTS FOR (n:GCPRecordSet) ON (n.lastupdated);
136
- CREATE INDEX IF NOT EXISTS FOR (n:GCPFolder) ON (n.id);
137
- CREATE INDEX IF NOT EXISTS FOR (n:GCPFolder) ON (n.lastupdated);
138
84
  CREATE INDEX IF NOT EXISTS FOR (n:GCPForwardingRule) ON (n.id);
139
85
  CREATE INDEX IF NOT EXISTS FOR (n:GCPForwardingRule) ON (n.lastupdated);
140
86
  CREATE INDEX IF NOT EXISTS FOR (n:GCPInstance) ON (n.id);
@@ -145,49 +91,21 @@ CREATE INDEX IF NOT EXISTS FOR (n:GCPNetworkTag) ON (n.id);
145
91
  CREATE INDEX IF NOT EXISTS FOR (n:GCPNetworkTag) ON (n.lastupdated);
146
92
  CREATE INDEX IF NOT EXISTS FOR (n:GCPNicAccessConfig) ON (n.id);
147
93
  CREATE INDEX IF NOT EXISTS FOR (n:GCPNicAccessConfig) ON (n.lastupdated);
148
- CREATE INDEX IF NOT EXISTS FOR (n:GCPOrganization) ON (n.id);
149
- CREATE INDEX IF NOT EXISTS FOR (n:GCPOrganization) ON (n.lastupdated);
150
- CREATE INDEX IF NOT EXISTS FOR (n:GCPProject) ON (n.id);
151
- CREATE INDEX IF NOT EXISTS FOR (n:GCPProject) ON (n.projectnumber);
152
- CREATE INDEX IF NOT EXISTS FOR (n:GCPProject) ON (n.lastupdated);
153
94
  CREATE INDEX IF NOT EXISTS FOR (n:GCPBucket) ON (n.id);
154
95
  CREATE INDEX IF NOT EXISTS FOR (n:GCPBucket) ON (n.lastupdated);
155
96
  CREATE INDEX IF NOT EXISTS FOR (n:GCPBucketLabel) ON (n.key);
156
97
  CREATE INDEX IF NOT EXISTS FOR (n:GCPBucketLabel) ON (n.lastupdated);
157
- CREATE INDEX IF NOT EXISTS FOR (n:GCPSubnet) ON (n.id);
158
- CREATE INDEX IF NOT EXISTS FOR (n:GCPSubnet) ON (n.lastupdated);
159
98
  CREATE INDEX IF NOT EXISTS FOR (n:GCPVpc) ON (n.id);
160
99
  CREATE INDEX IF NOT EXISTS FOR (n:GCPVpc) ON (n.lastupdated);
161
100
  CREATE INDEX IF NOT EXISTS FOR (n:GitHubRepository) ON (n.id);
162
101
  CREATE INDEX IF NOT EXISTS FOR (n:GitHubRepository) ON (n.lastupdated);
163
- CREATE INDEX IF NOT EXISTS FOR (n:GKECluster) ON (n.id);
164
- CREATE INDEX IF NOT EXISTS FOR (n:GKECluster) ON (n.lastupdated);
165
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteGroup) ON (n.email);
166
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteGroup) ON (n.id);
167
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteGroup) ON (n.lastupdated);
168
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteUser) ON (n.email);
169
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteUser) ON (n.id);
170
- CREATE INDEX IF NOT EXISTS FOR (n:GSuiteUser) ON (n.lastupdated);
171
102
  CREATE INDEX IF NOT EXISTS FOR (n:Ip) ON (n.id);
172
103
  CREATE INDEX IF NOT EXISTS FOR (n:Ip) ON (n.ip);
173
104
  CREATE INDEX IF NOT EXISTS FOR (n:Ip) ON (n.lastupdated);
174
- CREATE INDEX IF NOT EXISTS FOR (n:IpPermissionInbound) ON (n.ruleid);
175
- CREATE INDEX IF NOT EXISTS FOR (n:IpPermissionInbound) ON (n.lastupdated);
176
- CREATE INDEX IF NOT EXISTS FOR (n:IpPermissionsEgress) ON (n.ruleid);
177
- CREATE INDEX IF NOT EXISTS FOR (n:IpPermissionsEgress) ON (n.lastupdated);
178
105
  CREATE INDEX IF NOT EXISTS FOR (n:IpRange) ON (n.id);
179
106
  CREATE INDEX IF NOT EXISTS FOR (n:IpRange) ON (n.lastupdated);
180
- CREATE INDEX IF NOT EXISTS FOR (n:IpRule) ON (n.ruleid);
181
- CREATE INDEX IF NOT EXISTS FOR (n:IpRule) ON (n.lastupdated);
182
107
  CREATE INDEX IF NOT EXISTS FOR (n:JamfComputerGroup) ON (n.id);
183
108
  CREATE INDEX IF NOT EXISTS FOR (n:JamfComputerGroup) ON (n.lastupdated);
184
- CREATE INDEX IF NOT EXISTS FOR (n:KMSKey) ON (n.id);
185
- CREATE INDEX IF NOT EXISTS FOR (n:KMSKey) ON (n.arn);
186
- CREATE INDEX IF NOT EXISTS FOR (n:KMSKey) ON (n.lastupdated);
187
- CREATE INDEX IF NOT EXISTS FOR (n:KMSAlias) ON (n.id);
188
- CREATE INDEX IF NOT EXISTS FOR (n:KMSAlias) ON (n.lastupdated);
189
- CREATE INDEX IF NOT EXISTS FOR (n:KMSGrant) ON (n.id);
190
- CREATE INDEX IF NOT EXISTS FOR (n:KMSGrant) ON (n.lastupdated);
191
109
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.id);
192
110
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.name);
193
111
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.lastupdated);
@@ -227,9 +145,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:OCITenancy) ON (n.lastupdated);
227
145
  CREATE INDEX IF NOT EXISTS FOR (n:OCIUser) ON (n.ocid);
228
146
  CREATE INDEX IF NOT EXISTS FOR (n:OCIUser) ON (n.name);
229
147
  CREATE INDEX IF NOT EXISTS FOR (n:OCIUser) ON (n.lastupdated);
230
- CREATE INDEX IF NOT EXISTS FOR (n:Package) ON (n.id);
231
- CREATE INDEX IF NOT EXISTS FOR (n:Package) ON (n.name);
232
- CREATE INDEX IF NOT EXISTS FOR (n:Package) ON (n.lastupdated);
233
148
  CREATE INDEX IF NOT EXISTS FOR (n:PagerDutyEscalationPolicy) ON (n.id);
234
149
  CREATE INDEX IF NOT EXISTS FOR (n:PagerDutyEscalationPolicy) ON (n.name);
235
150
  CREATE INDEX IF NOT EXISTS FOR (n:PagerDutyEscalationPolicy) ON (n.lastupdated);
@@ -285,8 +200,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:S3Bucket) ON (n.id);
285
200
  CREATE INDEX IF NOT EXISTS FOR (n:S3Bucket) ON (n.name);
286
201
  CREATE INDEX IF NOT EXISTS FOR (n:S3Bucket) ON (n.arn);
287
202
  CREATE INDEX IF NOT EXISTS FOR (n:S3Bucket) ON (n.lastupdated);
288
- CREATE INDEX IF NOT EXISTS FOR (n:SecretsManagerSecret) ON (n.id);
289
- CREATE INDEX IF NOT EXISTS FOR (n:SecretsManagerSecret) ON (n.lastupdated);
290
203
  CREATE INDEX IF NOT EXISTS FOR (n:SecurityHub) ON (n.id);
291
204
  CREATE INDEX IF NOT EXISTS FOR (n:SecurityHub) ON (n.lastupdated);
292
205
  CREATE INDEX IF NOT EXISTS FOR (n:SpotlightVulnerability) ON (n.id);
@@ -296,104 +209,5 @@ CREATE INDEX IF NOT EXISTS FOR (n:SpotlightVulnerability) ON (n.lastupdated);
296
209
  CREATE INDEX IF NOT EXISTS FOR (n:SQSQueue) ON (n.id);
297
210
  CREATE INDEX IF NOT EXISTS FOR (n:SQSQueue) ON (n.lastupdated);
298
211
  CREATE INDEX IF NOT EXISTS FOR (n:UserAccount) ON (n.id);
299
- CREATE INDEX IF NOT EXISTS FOR (n:AzureTenant) ON (n.id);
300
- CREATE INDEX IF NOT EXISTS FOR (n:AzureTenant) ON (n.lastupdated);
301
- CREATE INDEX IF NOT EXISTS FOR (n:AzurePrincipal) ON (n.email);
302
- CREATE INDEX IF NOT EXISTS FOR (n:AzurePrincipal) ON (n.lastupdated);
303
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSubscription) ON (n.id);
304
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSubscription) ON (n.lastupdated);
305
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBAccount) ON (n.id);
306
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBAccount) ON (n.lastupdated);
307
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBLocation) ON (n.id);
308
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBLocation) ON (n.lastupdated);
309
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCorsPolicy) ON (n.id);
310
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCorsPolicy) ON (n.lastupdated);
311
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBAccountFailoverPolicy) ON (n.id);
312
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBAccountFailoverPolicy) ON (n.lastupdated);
313
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCDBPrivateEndpointConnection) ON (n.id);
314
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCDBPrivateEndpointConnection) ON (n.lastupdated);
315
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBVirtualNetworkRule) ON (n.id);
316
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBVirtualNetworkRule) ON (n.lastupdated);
317
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBSqlDatabase) ON (n.id);
318
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBSqlDatabase) ON (n.lastupdated);
319
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCassandraKeyspace) ON (n.id);
320
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCassandraKeyspace) ON (n.lastupdated);
321
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBMongoDBDatabase) ON (n.id);
322
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBMongoDBDatabase) ON (n.lastupdated);
323
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBTableResource) ON (n.id);
324
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBTableResource) ON (n.lastupdated);
325
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBSqlContainer) ON (n.id);
326
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBSqlContainer) ON (n.lastupdated);
327
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCassandraTable) ON (n.id);
328
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBCassandraTable) ON (n.lastupdated);
329
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBMongoDBCollection) ON (n.id);
330
- CREATE INDEX IF NOT EXISTS FOR (n:AzureCosmosDBMongoDBCollection) ON (n.lastupdated);
331
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageAccount) ON (n.id);
332
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageAccount) ON (n.lastupdated);
333
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageQueueService) ON (n.id);
334
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageQueueService) ON (n.lastupdated);
335
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageTableService) ON (n.id);
336
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageTableService) ON (n.lastupdated);
337
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageFileService) ON (n.id);
338
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageFileService) ON (n.lastupdated);
339
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageBlobService) ON (n.id);
340
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageBlobService) ON (n.lastupdated);
341
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageQueue) ON (n.id);
342
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageQueue) ON (n.lastupdated);
343
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageTable) ON (n.id);
344
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageTable) ON (n.lastupdated);
345
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageFileShare) ON (n.id);
346
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageFileShare) ON (n.lastupdated);
347
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageBlobContainer) ON (n.id);
348
- CREATE INDEX IF NOT EXISTS FOR (n:AzureStorageBlobContainer) ON (n.lastupdated);
349
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSQLServer) ON (n.id);
350
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSQLServer) ON (n.lastupdated);
351
- CREATE INDEX IF NOT EXISTS FOR (n:AzureServerDNSAlias) ON (n.id);
352
- CREATE INDEX IF NOT EXISTS FOR (n:AzureServerDNSAlias) ON (n.lastupdated);
353
- CREATE INDEX IF NOT EXISTS FOR (n:AzureServerADAdministrator) ON (n.id);
354
- CREATE INDEX IF NOT EXISTS FOR (n:AzureServerADAdministrator) ON (n.lastupdated);
355
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRecoverableDatabase) ON (n.id);
356
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRecoverableDatabase) ON (n.lastupdated);
357
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRestorableDroppedDatabase) ON (n.id);
358
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRestorableDroppedDatabase) ON (n.lastupdated);
359
- CREATE INDEX IF NOT EXISTS FOR (n:AzureFailoverGroup) ON (n.id);
360
- CREATE INDEX IF NOT EXISTS FOR (n:AzureFailoverGroup) ON (n.lastupdated);
361
- CREATE INDEX IF NOT EXISTS FOR (n:AzureElasticPool) ON (n.id);
362
- CREATE INDEX IF NOT EXISTS FOR (n:AzureElasticPool) ON (n.lastupdated);
363
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSQLDatabase) ON (n.id);
364
- CREATE INDEX IF NOT EXISTS FOR (n:AzureSQLDatabase) ON (n.lastupdated);
365
- CREATE INDEX IF NOT EXISTS FOR (n:AzureReplicationLink) ON (n.id);
366
- CREATE INDEX IF NOT EXISTS FOR (n:AzureReplicationLink) ON (n.lastupdated);
367
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDatabaseThreatDetectionPolicy) ON (n.id);
368
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDatabaseThreatDetectionPolicy) ON (n.lastupdated);
369
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRestorePoint) ON (n.id);
370
- CREATE INDEX IF NOT EXISTS FOR (n:AzureRestorePoint) ON (n.lastupdated);
371
- CREATE INDEX IF NOT EXISTS FOR (n:AzureTransparentDataEncryption) ON (n.id);
372
- CREATE INDEX IF NOT EXISTS FOR (n:AzureTransparentDataEncryption) ON (n.lastupdated);
373
- CREATE INDEX IF NOT EXISTS FOR (n:AzureVirtualMachine) ON (n.id);
374
- CREATE INDEX IF NOT EXISTS FOR (n:AzureVirtualMachine) ON (n.lastupdated);
375
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDataDisk) ON (n.id);
376
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDataDisk) ON (n.lastupdated);
377
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDisk) ON (n.id);
378
- CREATE INDEX IF NOT EXISTS FOR (n:AzureDisk) ON (n.lastupdated);
379
212
  CREATE INDEX IF NOT EXISTS FOR (n:AzureSnapshot) ON (n.id);
380
213
  CREATE INDEX IF NOT EXISTS FOR (n:AzureSnapshot) ON (n.lastupdated);
381
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesCluster) ON (n.id);
382
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesCluster) ON (n.name);
383
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesCluster) ON (n.lastupdated);
384
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesNamespace) ON (n.id);
385
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesNamespace) ON (n.name);
386
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesNamespace) ON (n.lastupdated);
387
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesPod) ON (n.id);
388
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesPod) ON (n.name);
389
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesPod) ON (n.lastupdated);
390
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesContainer) ON (n.id);
391
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesContainer) ON (n.name);
392
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesContainer) ON (n.image);
393
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesContainer) ON (n.lastupdated);
394
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesSecret) ON (n.id);
395
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesSecret) ON (n.name);
396
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesSecret) ON (n.lastupdated);
397
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesService) ON (n.id);
398
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesService) ON (n.name);
399
- CREATE INDEX IF NOT EXISTS FOR (n:KubernetesService) ON (n.lastupdated);
@@ -22,8 +22,8 @@
22
22
  "iterative": false
23
23
  },
24
24
  {
25
- "__comment__": "Attach EC2KeyPairs with matching fingerprints to eachother and set duplicate_keyfingerprint = True",
26
- "query": "MATCH (k1:EC2KeyPair), (k2:EC2KeyPair) WHERE k1.id <> k2.id AND k1.keyfingerprint = k2.keyfingerprint SET k1.duplicate_keyfingerprint = True, k2.duplicate_keyfingerprint = True MERGE (k1)-[r:MATCHING_FINGERPRINT]-(k2) ON CREATE SET r.firstseen = $UPDATE_TAG SET r.lastupdated = $UPDATE_TAG return COUNT(*) as TotalCompleted",
25
+ "__comment__": "Attach EC2KeyPairs with matching fingerprints to each other and set duplicate_keyfingerprint = True. Use id(k1) < id(k2) to avoid Cartesian product warning and ensure O(1) comparison.",
26
+ "query": "MATCH (k1:EC2KeyPair) MATCH (k2:EC2KeyPair) WHERE id(k1) < id(k2) AND k1.keyfingerprint = k2.keyfingerprint SET k1.duplicate_keyfingerprint = True, k2.duplicate_keyfingerprint = True MERGE (k1)-[r:MATCHING_FINGERPRINT]-(k2) ON CREATE SET r.firstseen = $UPDATE_TAG SET r.lastupdated = $UPDATE_TAG RETURN COUNT(*) as TotalCompleted",
27
27
  "iterative": false
28
28
  }
29
29
  ]
@@ -0,0 +1,30 @@
1
+ {
2
+ "statements": [
3
+ {
4
+ "__comment__": "Inherit group memberships from subgroups to parent groups",
5
+ "query": "MATCH (u:KeycloakUser)-[:MEMBER_OF]->(g:KeycloakGroup)-[:SUBGROUP_OF*1..5]->(pg:KeycloakGroup) MERGE (u)-[r:INHERITED_MEMBER_OF]->(pg) ON CREATE SET r.firstseen = $UPDATE_TAG SET r.lastupdated = $UPDATE_TAG",
6
+ "iterative": false
7
+ },
8
+ {
9
+ "__comment__": "Assign roles to users based on group memberships",
10
+ "query": "MATCH (u:KeycloakUser)-[:MEMBER_OF|INHERITED_MEMBER_OR]->(g:KeycloakGroup)-[:GRANTS]->(r:KeycloakRole) MERGE (u)-[r0:ASSUME_ROLE]-(r) ON CREATE SET r0.firstseen = $UPDATE_TAG SET r0.lastupdated = $UPDATE_TAG",
11
+ "iterative": false
12
+ },
13
+ {
14
+ "__comment__": "Propagate role grants to composite roles",
15
+ "query": "MATCH (r:KeycloakRole)-[:INCLUDES*1..5]->(c:KeycloakRole)-[:GRANTS]->(s:KeycloakScope) MERGE (r)-[r0:INDIRECT_GRANTS]-(s) ON CREATE SET r0.firstseen = $UPDATE_TAG SET r0.lastupdated = $UPDATE_TAG",
16
+ "iterative": false
17
+ },
18
+ {
19
+ "__comment__": "Identify legitimate scopes for users based on assumed roles",
20
+ "query": "MATCH (u:KeycloakUser)-[:ASSUME_ROLE]-(:KeycloakRole)-[:GRANTS|INDIRECT_GRANTS]->(s:KeycloakScope) MERGE (u)-[r:ASSUME_SCOPE]->(s) ON CREATE SET r.firstseen = $UPDATE_TAG SET r.lastupdated = $UPDATE_TAG",
21
+ "iterative": false
22
+ },
23
+ {
24
+ "__comment__": "Assign assumed scopes to users for orphan scopes (scopes not granted by any role)",
25
+ "query": "MATCH (s:KeycloakScope)<-[:RESOURCE]-(r:KeycloakRealm) MATCH (u:KeycloakUser)<-[:RESOURCE]-(r) WHERE NOT (s)<-[:GRANTS|INDIRECT_GRANTS]-(:KeycloakRole) MERGE (u)-[r0:ASSUME_SCOPE]->(s) SET r0.firstseen = $UPDATE_TAG SET r0.lastupdated = $UPDATE_TAG",
26
+ "iterative": false
27
+ }
28
+ ],
29
+ "name": "Keycloak inheritance analysis"
30
+ }
@@ -1,17 +1,5 @@
1
1
  {
2
2
  "statements": [
3
- {
4
- "query": "MATCH (n:GCPVpc) WHERE n.lastupdated <> $UPDATE_TAG WITH n LIMIT $LIMIT_SIZE DETACH DELETE (n)",
5
- "iterative": true,
6
- "iterationsize": 100,
7
- "__comment__": "Delete GCP VPCs that no longer exist and detach them from all previously connected nodes."
8
- },
9
- {
10
- "query": "MATCH (:GCPVpc)<-[r:RESOURCE]-(:GCPProject) WHERE r.lastupdated <> $UPDATE_TAG WITH r LIMIT $LIMIT_SIZE DELETE (r)",
11
- "iterative": true,
12
- "iterationsize": 100,
13
- "__comment__": "Remove GCP VPC-to-Project relationships that are out of date."
14
- },
15
3
  {
16
4
  "query": "MATCH (:GCPInstance)-[r:MEMBER_OF_GCP_VPC]->(:GCPVpc) WHERE r.lastupdated <> $UPDATE_TAG WITH r LIMIT $LIMIT_SIZE DELETE (r)",
17
5
  "iterative": true,