cartography 0.94.0rc3__tar.gz → 0.95.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (359) hide show
  1. {cartography-0.94.0rc3 → cartography-0.95.0}/LICENSE +1 -1
  2. {cartography-0.94.0rc3/cartography.egg-info → cartography-0.95.0}/PKG-INFO +3 -5
  3. cartography-0.95.0/README.md +122 -0
  4. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/cli.py +42 -24
  5. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/config.py +12 -8
  6. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/indexes.cypher +0 -2
  7. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/cli.py +1 -1
  8. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/job.py +8 -1
  9. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/permission_relationships.py +6 -2
  10. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/__init__.py +110 -23
  11. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kandji/__init__.py +1 -1
  12. cartography-0.95.0/cartography/intel/semgrep/__init__.py +30 -0
  13. cartography-0.95.0/cartography/intel/semgrep/dependencies.py +201 -0
  14. cartography-0.95.0/cartography/intel/semgrep/deployment.py +67 -0
  15. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/semgrep/findings.py +22 -53
  16. cartography-0.95.0/cartography/intel/snipeit/__init__.py +30 -0
  17. cartography-0.95.0/cartography/intel/snipeit/asset.py +74 -0
  18. cartography-0.95.0/cartography/intel/snipeit/user.py +75 -0
  19. cartography-0.95.0/cartography/intel/snipeit/util.py +35 -0
  20. cartography-0.95.0/cartography/models/semgrep/dependencies.py +77 -0
  21. cartography-0.95.0/cartography/models/snipeit/asset.py +81 -0
  22. cartography-0.95.0/cartography/models/snipeit/tenant.py +17 -0
  23. cartography-0.95.0/cartography/models/snipeit/user.py +49 -0
  24. cartography-0.95.0/cartography/py.typed +0 -0
  25. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/sync.py +2 -2
  26. {cartography-0.94.0rc3 → cartography-0.95.0/cartography.egg-info}/PKG-INFO +3 -5
  27. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography.egg-info/SOURCES.txt +12 -5
  28. {cartography-0.94.0rc3 → cartography-0.95.0}/setup.cfg +0 -3
  29. {cartography-0.94.0rc3 → cartography-0.95.0}/setup.py +3 -4
  30. cartography-0.94.0rc3/NOTICE +0 -4
  31. cartography-0.94.0rc3/README.md +0 -79
  32. cartography-0.94.0rc3/cartography/data/jobs/cleanup/crxcavator_import_cleanup.json +0 -18
  33. cartography-0.94.0rc3/cartography/intel/crxcavator/__init__.py +0 -44
  34. cartography-0.94.0rc3/cartography/intel/crxcavator/crxcavator.py +0 -329
  35. cartography-0.94.0rc3/cartography/intel/semgrep/__init__.py +0 -23
  36. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/__init__.py +0 -0
  37. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/__main__.py +0 -0
  38. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/client/__init__.py +0 -0
  39. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/client/aws/__init__.py +0 -0
  40. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/client/aws/iam.py +0 -0
  41. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/client/core/__init__.py +0 -0
  42. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/client/core/tx.py +0 -0
  43. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/__init__.py +0 -0
  44. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/__init__.py +0 -0
  45. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/__init__.py +0 -0
  46. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +0 -0
  47. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -0
  48. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -0
  49. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +0 -0
  50. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_eks_asset_exposure.json +0 -0
  51. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_foreign_accounts.json +0 -0
  52. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_lambda_ecr.json +0 -0
  53. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/aws_s3acl_analysis.json +0 -0
  54. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +0 -0
  55. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/gcp_gke_asset_exposure.json +0 -0
  56. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/gcp_gke_basic_auth.json +0 -0
  57. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/analysis/gsuite_human_link.json +0 -0
  58. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/__init__.py +0 -0
  59. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_account_cleanup.json +0 -0
  60. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -0
  61. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -0
  62. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -0
  63. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -0
  64. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_config_cleanup.json +0 -0
  65. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json +0 -0
  66. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -0
  67. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json +0 -0
  68. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json +0 -0
  69. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_elastic_ip_addresses_cleanup.json +0 -0
  70. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_elasticache_cleanup.json +0 -0
  71. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_es_cleanup.json +0 -0
  72. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -0
  73. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_groups_membership_cleanup.json +0 -0
  74. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_groups_policy_cleanup.json +0 -0
  75. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_internet_gateways_cleanup.json +0 -0
  76. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_kms_cleanup.json +0 -0
  77. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -0
  78. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -0
  79. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -0
  80. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -0
  81. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -0
  82. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_redshift_clusters_cleanup.json +0 -0
  83. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_reserved_instances_cleanup.json +0 -0
  84. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -0
  85. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_roles_policy_cleanup.json +0 -0
  86. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_s3_acl_cleanup.json +0 -0
  87. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_s3_buckets_cleanup.json +0 -0
  88. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -0
  89. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_securityhub_cleanup.json +0 -0
  90. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -0
  91. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_sqs_queues_cleanup.json +0 -0
  92. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_tags_cleanup.json +0 -0
  93. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_tgw_cleanup.json +0 -0
  94. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -0
  95. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -0
  96. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -0
  97. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_ingest_ec2_auto_scaling_groups_cleanup.json +0 -0
  98. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_cleanup.json +0 -0
  99. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_v2_cleanup.json +0 -0
  100. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_ingest_subnets_cleanup.json +0 -0
  101. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_kms_details.json +0 -0
  102. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_post_ingestion_principals_cleanup.json +0 -0
  103. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/aws_s3_details.json +0 -0
  104. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -0
  105. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -0
  106. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -0
  107. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -0
  108. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -0
  109. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -0
  110. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -0
  111. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -0
  112. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -0
  113. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -0
  114. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -0
  115. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -0
  116. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -0
  117. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -0
  118. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json +0 -0
  119. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/digitalocean_project_cleanup.json +0 -0
  120. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json +0 -0
  121. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_compute_forwarding_rules_cleanup.json +0 -0
  122. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_compute_instance_cleanup.json +0 -0
  123. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -0
  124. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -0
  125. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -0
  126. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -0
  127. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -0
  128. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -0
  129. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -0
  130. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -0
  131. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/github_repos_cleanup.json +0 -0
  132. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/github_users_cleanup.json +0 -0
  133. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -0
  134. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -0
  135. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/jamf_import_computers_cleanup.json +0 -0
  136. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -0
  137. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_import_compartments_cleanup.json +0 -0
  138. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_import_groups_cleanup.json +0 -0
  139. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_import_groups_membership_cleanup.json +0 -0
  140. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_import_policies_cleanup.json +0 -0
  141. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_import_users_cleanup.json +0 -0
  142. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/oci_tenancy_cleanup.json +0 -0
  143. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/okta_groups_cleanup.json +0 -0
  144. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/okta_import_cleanup.json +0 -0
  145. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/cleanup/pagerduty_import_cleanup.json +0 -0
  146. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/scoped_analysis/__init__.py +0 -0
  147. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +0 -0
  148. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/data/permission_relationships.yaml +0 -0
  149. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/__init__.py +0 -0
  150. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/__main__.py +0 -0
  151. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/add_shortcut.py +0 -0
  152. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/config.py +0 -0
  153. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/detect_deviations.py +0 -0
  154. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/get_states.py +0 -0
  155. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/model.py +0 -0
  156. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/reporter.py +0 -0
  157. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/serializers.py +0 -0
  158. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/shortcut.py +0 -0
  159. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/storage.py +0 -0
  160. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/driftdetect/util.py +0 -0
  161. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/__init__.py +0 -0
  162. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/cleanupbuilder.py +0 -0
  163. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/context.py +0 -0
  164. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/querybuilder.py +0 -0
  165. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/graph/statement.py +0 -0
  166. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/__init__.py +0 -0
  167. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/analysis.py +0 -0
  168. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/__init__.py +0 -0
  169. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/apigateway.py +0 -0
  170. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/config.py +0 -0
  171. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/dynamodb.py +0 -0
  172. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/__init__.py +0 -0
  173. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/auto_scaling_groups.py +0 -0
  174. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/elastic_ip_addresses.py +0 -0
  175. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/images.py +0 -0
  176. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/instances.py +0 -0
  177. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/internet_gateways.py +0 -0
  178. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/key_pairs.py +0 -0
  179. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/launch_templates.py +0 -0
  180. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/load_balancer_v2s.py +0 -0
  181. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/load_balancers.py +0 -0
  182. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/network_interfaces.py +0 -0
  183. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/reserved_instances.py +0 -0
  184. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/security_groups.py +0 -0
  185. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/snapshots.py +0 -0
  186. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/subnets.py +0 -0
  187. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/tgw.py +0 -0
  188. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/util.py +0 -0
  189. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/volumes.py +0 -0
  190. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/vpc.py +0 -0
  191. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ec2/vpc_peerings.py +0 -0
  192. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ecr.py +0 -0
  193. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ecs.py +0 -0
  194. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/eks.py +0 -0
  195. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/elasticache.py +0 -0
  196. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/elasticsearch.py +0 -0
  197. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/emr.py +0 -0
  198. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/iam.py +0 -0
  199. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/inspector.py +0 -0
  200. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/kms.py +0 -0
  201. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/lambda_function.py +0 -0
  202. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/organizations.py +0 -0
  203. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/rds.py +0 -0
  204. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/redshift.py +0 -0
  205. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/resourcegroupstaggingapi.py +0 -0
  206. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/resources.py +0 -0
  207. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/route53.py +0 -0
  208. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/s3.py +0 -0
  209. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/secretsmanager.py +0 -0
  210. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/securityhub.py +0 -0
  211. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/sqs.py +0 -0
  212. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/ssm.py +0 -0
  213. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/util/__init__.py +0 -0
  214. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/util/arns.py +0 -0
  215. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/aws/util/common.py +0 -0
  216. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/__init__.py +0 -0
  217. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/compute.py +0 -0
  218. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/cosmosdb.py +0 -0
  219. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/sql.py +0 -0
  220. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/storage.py +0 -0
  221. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/subscription.py +0 -0
  222. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/tenant.py +0 -0
  223. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/util/__init__.py +0 -0
  224. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/azure/util/credentials.py +0 -0
  225. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/bigfix/__init__.py +0 -0
  226. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/bigfix/computers.py +0 -0
  227. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/create_indexes.py +0 -0
  228. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/crowdstrike/__init__.py +0 -0
  229. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/crowdstrike/endpoints.py +0 -0
  230. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/crowdstrike/spotlight.py +0 -0
  231. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/crowdstrike/util.py +0 -0
  232. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/cve/__init__.py +0 -0
  233. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/cve/feed.py +0 -0
  234. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/digitalocean/__init__.py +0 -0
  235. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/digitalocean/compute.py +0 -0
  236. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/digitalocean/management.py +0 -0
  237. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/digitalocean/platform.py +0 -0
  238. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/dns.py +0 -0
  239. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/__init__.py +0 -0
  240. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/api_host.py +0 -0
  241. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/endpoints.py +0 -0
  242. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/groups.py +0 -0
  243. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/phones.py +0 -0
  244. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/tokens.py +0 -0
  245. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/users.py +0 -0
  246. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/duo/web_authn_credentials.py +0 -0
  247. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/compute.py +0 -0
  248. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/crm.py +0 -0
  249. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/dns.py +0 -0
  250. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/gke.py +0 -0
  251. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gcp/storage.py +0 -0
  252. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/github/__init__.py +0 -0
  253. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/github/repos.py +0 -0
  254. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/github/teams.py +0 -0
  255. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/github/users.py +0 -0
  256. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/github/util.py +0 -0
  257. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gsuite/__init__.py +0 -0
  258. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/gsuite/api.py +0 -0
  259. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/jamf/__init__.py +0 -0
  260. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/jamf/computers.py +0 -0
  261. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/jamf/util.py +0 -0
  262. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kandji/devices.py +0 -0
  263. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/__init__.py +0 -0
  264. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/namespaces.py +0 -0
  265. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/pods.py +0 -0
  266. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/secrets.py +0 -0
  267. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/services.py +0 -0
  268. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/kubernetes/util.py +0 -0
  269. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/lastpass/__init__.py +0 -0
  270. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/lastpass/users.py +0 -0
  271. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/oci/__init__.py +0 -0
  272. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/oci/iam.py +0 -0
  273. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/oci/organizations.py +0 -0
  274. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/oci/utils.py +0 -0
  275. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/__init__.py +0 -0
  276. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/applications.py +0 -0
  277. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/awssaml.py +0 -0
  278. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/factors.py +0 -0
  279. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/groups.py +0 -0
  280. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/organization.py +0 -0
  281. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/origins.py +0 -0
  282. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/roles.py +0 -0
  283. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/sync_state.py +0 -0
  284. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/users.py +0 -0
  285. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/okta/utils.py +0 -0
  286. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/__init__.py +0 -0
  287. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/escalation_policies.py +0 -0
  288. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/schedules.py +0 -0
  289. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/services.py +0 -0
  290. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/teams.py +0 -0
  291. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/users.py +0 -0
  292. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/intel/pagerduty/vendors.py +0 -0
  293. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/__init__.py +0 -0
  294. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/__init__.py +0 -0
  295. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/dynamodb/__init__.py +0 -0
  296. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/dynamodb/gsi.py +0 -0
  297. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/dynamodb/tables.py +0 -0
  298. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/__init__.py +0 -0
  299. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/images.py +0 -0
  300. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/instances.py +0 -0
  301. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/keypairs.py +0 -0
  302. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/launch_template_versions.py +0 -0
  303. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/launch_templates.py +0 -0
  304. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/loadbalancerv2.py +0 -0
  305. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/networkinterface_instance.py +0 -0
  306. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/networkinterfaces.py +0 -0
  307. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/privateip_networkinterface.py +0 -0
  308. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/reservations.py +0 -0
  309. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/securitygroup_instance.py +0 -0
  310. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/securitygroup_networkinterface.py +0 -0
  311. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/subnet_instance.py +0 -0
  312. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/subnet_networkinterface.py +0 -0
  313. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ec2/volumes.py +0 -0
  314. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/eks/__init__.py +0 -0
  315. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/eks/clusters.py +0 -0
  316. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/emr.py +0 -0
  317. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/inspector/__init__.py +0 -0
  318. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/inspector/findings.py +0 -0
  319. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/inspector/packages.py +0 -0
  320. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ssm/__init__.py +0 -0
  321. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ssm/instance_information.py +0 -0
  322. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/aws/ssm/instance_patch.py +0 -0
  323. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/bigfix/__init__.py +0 -0
  324. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/bigfix/bigfix_computer.py +0 -0
  325. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/bigfix/bigfix_root.py +0 -0
  326. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/core/__init__.py +0 -0
  327. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/core/common.py +0 -0
  328. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/core/nodes.py +0 -0
  329. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/core/relationships.py +0 -0
  330. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/cve/__init__.py +0 -0
  331. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/cve/cve.py +0 -0
  332. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/cve/cve_feed.py +0 -0
  333. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/__init__.py +0 -0
  334. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/api_host.py +0 -0
  335. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/endpoint.py +0 -0
  336. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/group.py +0 -0
  337. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/phone.py +0 -0
  338. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/token.py +0 -0
  339. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/user.py +0 -0
  340. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/duo/web_authn_credential.py +0 -0
  341. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/github/__init__.py +0 -0
  342. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/github/teams.py +0 -0
  343. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/kandji/__init__.py +0 -0
  344. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/kandji/device.py +0 -0
  345. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/kandji/tenant.py +0 -0
  346. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/lastpass/__init__.py +0 -0
  347. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/lastpass/tenant.py +0 -0
  348. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/lastpass/user.py +0 -0
  349. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/semgrep/__init__.py +0 -0
  350. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/semgrep/deployment.py +0 -0
  351. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/semgrep/findings.py +0 -0
  352. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/models/semgrep/locations.py +0 -0
  353. /cartography-0.94.0rc3/cartography/py.typed → /cartography-0.95.0/cartography/models/snipeit/__init__.py +0 -0
  354. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/stats.py +0 -0
  355. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography/util.py +0 -0
  356. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography.egg-info/dependency_links.txt +0 -0
  357. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography.egg-info/entry_points.txt +0 -0
  358. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography.egg-info/requires.txt +0 -0
  359. {cartography-0.94.0rc3 → cartography-0.95.0}/cartography.egg-info/top_level.txt +0 -0
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2019 Lyft, Inc.
190
+ Copyright 2024 The Linux Foundation
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
@@ -1,10 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.94.0rc3
3
+ Version: 0.95.0
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
- Home-page: https://www.github.com/lyft/cartography
6
- Maintainer: Lyft
7
- Maintainer-email: security@lyft.com
5
+ Home-page: https://www.github.com/cartography-cncf/cartography
6
+ Maintainer: Cartography Contributors
8
7
  License: apache2
9
8
  Classifier: Development Status :: 4 - Beta
10
9
  Classifier: Intended Audience :: Developers
@@ -18,7 +17,6 @@ Classifier: Topic :: Software Development :: Libraries
18
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
18
  Description-Content-Type: text/markdown
20
19
  License-File: LICENSE
21
- License-File: NOTICE
22
20
  Requires-Dist: backoff>=2.1.2
23
21
  Requires-Dist: boto3>=1.15.1
24
22
  Requires-Dist: botocore>=1.18.1
@@ -0,0 +1,122 @@
1
+ ![Cartography](docs/root/images/logo-horizontal.png)
2
+
3
+ Cartography is a Python tool that consolidates infrastructure assets and the relationships between them in an intuitive graph view powered by a [Neo4j](https://www.neo4j.com) database.
4
+
5
+ ![Visualization of RDS nodes and AWS nodes](docs/root/images/accountsandrds.png)
6
+
7
+ ## Why Cartography?
8
+ Cartography aims to enable a broad set of exploration and automation scenarios. It is particularly good at exposing otherwise hidden dependency relationships between your service's assets so that you may validate assumptions about security risks.
9
+
10
+ Service owners can generate asset reports, Red Teamers can discover attack paths, and Blue Teamers can identify areas for security improvement. All can benefit from using the graph for manual exploration through a web frontend interface, or in an automated fashion by calling the APIs.
11
+
12
+ Cartography is not the only [security](https://github.com/dowjones/hammer) [graph](https://github.com/BloodHoundAD/BloodHound) [tool](https://github.com/Netflix/security_monkey) [out](https://github.com/vysecurity/ANGRYPUPPY) [there](https://github.com/duo-labs/cloudmapper), but it differentiates itself by being fully-featured yet generic and [extensible](https://cartography-cncf.github.io/cartography/dev/writing-analysis-jobs.html) enough to help make anyone better understand their risk exposure, regardless of what platforms they use. Rather than being focused on one core scenario or attack vector like the other linked tools, Cartography focuses on flexibility and exploration.
13
+
14
+ You can learn more about the story behind Cartography in our [presentation at BSidesSF 2019](https://www.youtube.com/watch?v=ZukUmZSKSek).
15
+
16
+
17
+ ## Supported platforms
18
+
19
+ - [Amazon Web Services](https://cartography-cncf.github.io/cartography/modules/aws/index.html) - API Gateway, Config, EC2, ECS, ECR, Elasticsearch, Elastic Kubernetes Service (EKS), DynamoDB, IAM, Inspector, KMS, Lambda, RDS, Redshift, Route53, S3, Secrets Manager, Security Hub, SQS, SSM, STS, Tags
20
+ - [Google Cloud Platform](https://cartography-cncf.github.io/cartography/modules/gcp/index.html) - Cloud Resource Manager, Compute, DNS, Storage, Google Kubernetes Engine
21
+ - [Google GSuite](https://cartography-cncf.github.io/cartography/modules/gsuite/index.html) - users, groups
22
+ - [Oracle Cloud Infrastructure](docs/setup/config/oci.md) - IAM
23
+ - [Okta](https://cartography-cncf.github.io/cartography/modules/okta/index.html) - users, groups, organizations, roles, applications, factors, trusted origins, reply URIs
24
+ - [GitHub](https://cartography-cncf.github.io/cartography/modules/github/index.html) - repos, branches, users, teams
25
+ - [DigitalOcean](https://cartography-cncf.github.io/cartography/modules/digitalocean/index.html)
26
+ - [Microsoft Azure](https://cartography-cncf.github.io/cartography/modules/azure/index.html) - CosmosDB, SQL, Storage, Virtual Machine
27
+ - [Kubernetes](https://cartography-cncf.github.io/cartography/modules/kubernetes/index.html) - Cluster, Namespace, Service, Pod, Container
28
+ - [PagerDuty](https://cartography-cncf.github.io/cartography/modules/pagerduty/index.html) - Users, teams, services, schedules, escalation policies, integrations, vendors
29
+ - [Crowdstrike Falcon](https://cartography-cncf.github.io/cartography/modules/crowdstrike/index.html) - Hosts, Spotlight vulnerabilities, CVEs
30
+ - [NIST CVE](https://cartography-cncf.github.io/cartography/modules/cve/index.html) - Common Vulnerabilities and Exposures (CVE) data from NIST database
31
+ - [Lastpass](https://cartography-cncf.github.io/cartography/modules/lastpass/index.html) - users
32
+ - [BigFix](https://cartography-cncf.github.io/cartography/modules/bigfix/index.html) - Computers
33
+ - [Duo](https://cartography-cncf.github.io/cartography/modules/duo/index.html) - Users, Groups, Endpoints
34
+ - [Kandji](https://cartography-cncf.github.io/cartography/modules/kandji/index.html) - Devices
35
+ - [SnipeIT](https://cartography-cncf.github.io/cartography/modules/snipeit/index.html) - Users, Assets
36
+
37
+
38
+ ## Philosophy
39
+ Here are some points that can help you decide if adopting Cartography is a good fit for your problem.
40
+
41
+ ### What Cartography is
42
+ - A simple Python script that pulls data from multiple providers and writes it to a Neo4j graph database in batches.
43
+ - A powerful analysis tool that captures the current snapshot of the environment, building a uniquely useful inventory where you can ask complex questions such as:
44
+ - Which identities have access to which datastores?
45
+ - What are the cross-tenant permission relationships in the environment?
46
+ - What are the network paths in and out of the environment?
47
+ - What are the backup policies for my datastores?
48
+ - Battle-tested in production by [many companies](#who-uses-cartography).
49
+ - Straightforward to extend with your own custom plugins.
50
+ - Provides a useful data-plane that you can build automation and CSPM (Cloud Security Posture Management) applications on top of.
51
+
52
+ ### What Cartography is not
53
+ - A near-real time capability.
54
+ - Cartography is not designed for very fast updates. Cartography writes to the database in a batches (not streamed).
55
+ - Cartography is also limited by how most upstream sources only provide APIs to retrieve assets in a batched manner.
56
+ - By itself, Cartography does not capture data changes over time.
57
+ - Although we do include a [drift detection](https://cartography-cncf.github.io/cartography/usage/drift-detect.html) feature.
58
+ - It's also possible to implement other processes in your Cartography installation to make this happen.
59
+
60
+
61
+ ## Install and configure
62
+
63
+ ### Trying out Cartography on a test machine
64
+ Start [here](https://cartography-cncf.github.io/cartography/install.html) to set up a test graph and get data into it.
65
+
66
+ ### Setting up Cartography in production
67
+ When you are ready to try it in production, read [here](https://cartography-cncf.github.io/cartography/ops.html) for recommendations on getting cartography spun up in your environment.
68
+
69
+ ## Usage
70
+
71
+ ### Querying the database directly
72
+
73
+ ![poweruser.png](docs/root/images/poweruser.png)
74
+
75
+ Now that data is in the graph, you can quickly start with our [querying tutorial](https://cartography-cncf.github.io/cartography/usage/tutorial.html). Our [data schema](https://cartography-cncf.github.io/cartography/usage/schema.html) is a helpful reference when you get stuck.
76
+
77
+ ### Building applications around Cartography
78
+ Directly querying Neo4j is already very useful as a sort of "swiss army knife" for security data problems, but you can also build applications and data pipelines around Cartography. View this doc on [applications](https://cartography-cncf.github.io/cartography/usage/applications.html).
79
+
80
+
81
+ ## Community
82
+
83
+ - Join us on `#cartography` on the [Lyft OSS Slack](https://join.slack.com/t/lyftoss/shared_invite/enQtOTYzODg5OTQwNDE2LTFiYjgwZWM3NTNhMTFkZjc4Y2IxOTI4NTdiNTdhNjQ4M2Q5NTIzMjVjOWI4NmVlNjRiZmU2YzA5NTc3MmFjYTQ).
84
+ - Talk to us and see what we're working on at our [monthly community meeting](https://calendar.google.com/calendar/embed?src=lyft.com_p10o6ceuiieq9sqcn1ef61v1io%40group.calendar.google.com&ctz=America%2FLos_Angeles).
85
+ - Meeting minutes are [here](https://docs.google.com/document/d/1VyRKmB0dpX185I15BmNJZpfAJ_Ooobwz0U1WIhjDxvw).
86
+ - Recorded videos are posted [here](https://www.youtube.com/playlist?list=PLMga2YJvAGzidUWJB_fnG7EHI4wsDDsE1).
87
+ - Our current project roadmap is [here](https://github.com/orgs/lyft/projects/26/views/1).
88
+
89
+ ## License
90
+
91
+ This project is licensed under the [Apache 2.0 License](LICENSE).
92
+
93
+ ## Contributing
94
+ Thank you for considering contributing to Cartography!
95
+
96
+ ### Code of conduct
97
+ All contributors and participants of this project must follow the [CNCF code of conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
98
+
99
+ ### Bug reports and feature requests and discussions
100
+ Submit a GitHub issue to report a bug or request a new feature. If we decide that the issue needs more discussion - usually because the scope is too large or we need to make careful decision - we will convert the issue to a [GitHub Discussion](https://github.com/lyft/cartography/discussions).
101
+
102
+ ### Developing Cartography
103
+
104
+ Get started with our [developer documentation](https://cartography-cncf.github.io/cartography/dev/developer-guide.html). Please feel free to submit your own PRs to update documentation if you've found a better way to explain something.
105
+
106
+ ## Who uses Cartography?
107
+
108
+ 1. [Lyft](https://www.lyft.com)
109
+ 1. [Thought Machine](https://thoughtmachine.net/)
110
+ 1. [MessageBird](https://messagebird.com)
111
+ 1. [Cloudanix](https://www.cloudanix.com/)
112
+ 1. [Corelight](https://www.corelight.com/)
113
+ 1. {Your company here} :-)
114
+
115
+ If your organization uses Cartography, please file a PR and update this list. Say hi on Slack too!
116
+
117
+ ---
118
+
119
+ Cartography is a [Cloud Native Computing Foundation](https://www.cncf.io/) sandbox project.<br>
120
+ <div style="background-color: white; display: inline-block; padding: 10px;">
121
+ <img src="docs/root/images/cncf-color.png" alt="CNCF Logo" width="200">
122
+ </div>
@@ -220,23 +220,6 @@ class CLI:
220
220
  ' If not specified, cartography by default will run all AWS sync modules available.'
221
221
  ),
222
222
  )
223
- parser.add_argument(
224
- '--crxcavator-api-base-uri',
225
- type=str,
226
- default='https://api.crxcavator.io/v1',
227
- help=(
228
- 'Base URI for the CRXcavator API. Defaults to public API endpoint.'
229
- ),
230
- )
231
- parser.add_argument(
232
- '--crxcavator-api-key-env-var',
233
- type=str,
234
- default=None,
235
- help=(
236
- 'The name of an environment variable containing a key with which to auth to the CRXcavator API. '
237
- 'Required if you are using the CRXcavator intel module. Ignored otherwise.'
238
- ),
239
- )
240
223
  parser.add_argument(
241
224
  '--analysis-job-directory',
242
225
  type=str,
@@ -541,6 +524,28 @@ class CLI:
541
524
  'Required if you are using the Semgrep intel module. Ignored otherwise.'
542
525
  ),
543
526
  )
527
+ parser.add_argument(
528
+ '--snipeit-base-uri',
529
+ type=str,
530
+ default=None,
531
+ help=(
532
+ 'Your SnipeIT base URI'
533
+ 'Required if you are using the SnipeIT intel module. Ignored otherwise.'
534
+ ),
535
+ )
536
+ parser.add_argument(
537
+ '--snipeit-token-env-var',
538
+ type=str,
539
+ default=None,
540
+ help='The name of an environment variable containing token with which to authenticate to SnipeIT.',
541
+ )
542
+ parser.add_argument(
543
+ '--snipeit-tenant-id',
544
+ type=str,
545
+ default=None,
546
+ help='An ID for the SnipeIT tenant.',
547
+ )
548
+
544
549
  return parser
545
550
 
546
551
  def main(self, argv: str) -> int:
@@ -604,13 +609,6 @@ class CLI:
604
609
  else:
605
610
  config.okta_api_key = None
606
611
 
607
- # CRXcavator config
608
- if config.crxcavator_api_base_uri and config.crxcavator_api_key_env_var:
609
- logger.debug(f"Reading API key for CRXcavator from env variable {config.crxcavator_api_key_env_var}.")
610
- config.crxcavator_api_key = os.environ.get(config.crxcavator_api_key_env_var)
611
- else:
612
- config.crxcavator_api_key = None
613
-
614
612
  # GitHub config
615
613
  if config.github_config_env_var:
616
614
  logger.debug(f"Reading config string for GitHub from environment variable {config.github_config_env_var}")
@@ -744,6 +742,26 @@ class CLI:
744
742
  else:
745
743
  config.cve_api_key = None
746
744
 
745
+ # SnipeIT config
746
+ if config.snipeit_base_uri:
747
+ if config.snipeit_token_env_var:
748
+ logger.debug(
749
+ "Reading SnipeIT API token from environment variable '%s'.",
750
+ config.snipeit_token_env_var,
751
+ )
752
+ config.snipeit_token = os.environ.get(config.snipeit_token_env_var)
753
+ elif os.environ.get('SNIPEIT_TOKEN'):
754
+ logger.debug(
755
+ "Reading SnipeIT API token from environment variable 'SNIPEIT_TOKEN'.",
756
+ )
757
+ config.snipeit_token = os.environ.get('SNIPEIT_TOKEN')
758
+ else:
759
+ logger.warning("A SnipeIT base URI was provided but a token was not.")
760
+ config.kandji_token = None
761
+ else:
762
+ logger.warning("A SnipeIT base URI was not provided.")
763
+ config.snipeit_base_uri = None
764
+
747
765
  # Run cartography
748
766
  try:
749
767
  return cartography.sync.run_with_config(self.sync, config)
@@ -43,10 +43,6 @@ class Config:
43
43
  :param azure_client_secret: Client Secret for connecting in a Service Principal Authentication approach. Optional.
44
44
  :type aws_requested_syncs: str
45
45
  :param aws_requested_syncs: Comma-separated list of AWS resources to sync. Optional.
46
- :type crxcavator_api_base_uri: str
47
- :param crxcavator_api_base_uri: URI for CRXcavator API. Optional.
48
- :type crxcavator_api_key: str
49
- :param crxcavator_api_key: Auth key for CRXcavator API. Optional.
50
46
  :type analysis_job_directory: str
51
47
  :param analysis_job_directory: Path to a directory tree containing analysis jobs to run. Optional.
52
48
  :type oci_sync_all_profiles: bool
@@ -111,6 +107,12 @@ class Config:
111
107
  :param duo_api_hostname: The Duo api hostname, e.g. "api-abc123.duosecurity.com". Optional.
112
108
  :param semgrep_app_token: The Semgrep api token. Optional.
113
109
  :type semgrep_app_token: str
110
+ :type snipeit_base_uri: string
111
+ :param snipeit_base_uri: SnipeIT data provider base URI. Optional.
112
+ :type snipeit_token: string
113
+ :param snipeit_token: Token used to authenticate to the SnipeIT data provider. Optional.
114
+ :type snipeit_tenant_id: string
115
+ :param snipeit_tenant_id: Token used to authenticate to the SnipeIT data provider. Optional.
114
116
  """
115
117
 
116
118
  def __init__(
@@ -131,8 +133,6 @@ class Config:
131
133
  azure_client_secret=None,
132
134
  aws_requested_syncs=None,
133
135
  analysis_job_directory=None,
134
- crxcavator_api_base_uri=None,
135
- crxcavator_api_key=None,
136
136
  oci_sync_all_profiles=None,
137
137
  okta_org_id=None,
138
138
  okta_api_key=None,
@@ -170,6 +170,9 @@ class Config:
170
170
  duo_api_secret=None,
171
171
  duo_api_hostname=None,
172
172
  semgrep_app_token=None,
173
+ snipeit_base_uri=None,
174
+ snipeit_token=None,
175
+ snipeit_tenant_id=None,
173
176
  ):
174
177
  self.neo4j_uri = neo4j_uri
175
178
  self.neo4j_user = neo4j_user
@@ -187,8 +190,6 @@ class Config:
187
190
  self.azure_client_secret = azure_client_secret
188
191
  self.aws_requested_syncs = aws_requested_syncs
189
192
  self.analysis_job_directory = analysis_job_directory
190
- self.crxcavator_api_base_uri = crxcavator_api_base_uri
191
- self.crxcavator_api_key = crxcavator_api_key
192
193
  self.oci_sync_all_profiles = oci_sync_all_profiles
193
194
  self.okta_org_id = okta_org_id
194
195
  self.okta_api_key = okta_api_key
@@ -226,3 +227,6 @@ class Config:
226
227
  self.duo_api_secret = duo_api_secret
227
228
  self.duo_api_hostname = duo_api_hostname
228
229
  self.semgrep_app_token = semgrep_app_token
230
+ self.snipeit_base_uri = snipeit_base_uri
231
+ self.snipeit_token = snipeit_token
232
+ self.snipeit_tenant_id = snipeit_tenant_id
@@ -65,8 +65,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.accesskeyid);
65
65
  CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.lastupdated);
66
66
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.arn);
67
67
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.lastupdated);
68
- CREATE INDEX IF NOT EXISTS FOR (n:ChromeExtension) ON (n.id);
69
- CREATE INDEX IF NOT EXISTS FOR (n:ChromeExtension) ON (n.lastupdated);
70
68
  CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.id);
71
69
  CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.instance_id);
72
70
  CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.lastupdated);
@@ -30,7 +30,7 @@ class CLI:
30
30
  'graph database and reports the deviations.'
31
31
  ),
32
32
  epilog='For more documentation please visit: '
33
- 'https://github.com/lyft/cartography/blob/master/docs/drift-detect.md',
33
+ 'https://cartography-cncf.github.io/cartography/usage/drift-detect.html',
34
34
  )
35
35
  parser.add_argument(
36
36
  '-v',
@@ -150,7 +150,14 @@ class GraphJob:
150
150
  )
151
151
 
152
152
  statements: List[GraphStatement] = [
153
- GraphStatement(query, parameters=parameters, iterative=True, iterationsize=100) for query in queries
153
+ GraphStatement(
154
+ query,
155
+ parameters=parameters,
156
+ iterative=True,
157
+ iterationsize=100,
158
+ parent_job_name=node_schema.label,
159
+ parent_job_sequence_num=idx,
160
+ ) for idx, query in enumerate(queries, start=1)
154
161
  ]
155
162
 
156
163
  return cls(
@@ -322,8 +322,12 @@ def cleanup_rpr(
322
322
  )
323
323
 
324
324
  statement = GraphStatement(
325
- cleanup_rpr_query_template, {'UPDATE_TAG': update_tag, 'AWS_ID': current_aws_id},
326
- True, 1000,
325
+ cleanup_rpr_query_template,
326
+ {'UPDATE_TAG': update_tag, 'AWS_ID': current_aws_id},
327
+ True,
328
+ 1000,
329
+ parent_job_name=f"{relationship_name}:{node_label}",
330
+ parent_job_sequence_num=1,
327
331
  )
328
332
  statement.run(neo4j_session)
329
333
 
@@ -120,11 +120,11 @@ def _initialize_resources(credentials: GoogleCredentials) -> Resource:
120
120
  return Resources(
121
121
  crm_v1=_get_crm_resource_v1(credentials),
122
122
  crm_v2=_get_crm_resource_v2(credentials),
123
- compute=_get_compute_resource(credentials),
124
- storage=_get_storage_resource(credentials),
125
- container=_get_container_resource(credentials),
126
123
  serviceusage=_get_serviceusage_resource(credentials),
127
- dns=_get_dns_resource(credentials),
124
+ compute=None,
125
+ container=None,
126
+ dns=None,
127
+ storage=None,
128
128
  )
129
129
 
130
130
 
@@ -159,12 +159,12 @@ def _services_enabled_on_project(serviceusage: Resource, project_id: str) -> Set
159
159
  return set()
160
160
 
161
161
 
162
- def _sync_single_project(
162
+ def _sync_single_project_compute(
163
163
  neo4j_session: neo4j.Session, resources: Resource, project_id: str, gcp_update_tag: int,
164
164
  common_job_parameters: Dict,
165
165
  ) -> None:
166
166
  """
167
- Handles graph sync for a single GCP project.
167
+ Handles graph sync for a single GCP project on Compute resources.
168
168
  :param neo4j_session: The Neo4j session
169
169
  :param resources: namedtuple of the GCP resource objects
170
170
  :param project_id: The project ID number to sync. See the `projectId` field in
@@ -175,14 +175,72 @@ def _sync_single_project(
175
175
  """
176
176
  # Determine the resources available on the project.
177
177
  enabled_services = _services_enabled_on_project(resources.serviceusage, project_id)
178
+ compute_cred = _get_compute_resource(get_gcp_credentials())
178
179
  if service_names.compute in enabled_services:
179
- compute.sync(neo4j_session, resources.compute, project_id, gcp_update_tag, common_job_parameters)
180
+ compute.sync(neo4j_session, compute_cred, project_id, gcp_update_tag, common_job_parameters)
181
+
182
+
183
+ def _sync_single_project_storage(
184
+ neo4j_session: neo4j.Session, resources: Resource, project_id: str, gcp_update_tag: int,
185
+ common_job_parameters: Dict,
186
+ ) -> None:
187
+ """
188
+ Handles graph sync for a single GCP project on Storage resources.
189
+ :param neo4j_session: The Neo4j session
190
+ :param resources: namedtuple of the GCP resource objects
191
+ :param project_id: The project ID number to sync. See the `projectId` field in
192
+ https://cloud.google.com/resource-manager/reference/rest/v1/projects
193
+ :param gcp_update_tag: The timestamp value to set our new Neo4j nodes with
194
+ :param common_job_parameters: Other parameters sent to Neo4j
195
+ :return: Nothing
196
+ """
197
+ # Determine the resources available on the project.
198
+ enabled_services = _services_enabled_on_project(resources.serviceusage, project_id)
199
+ storage_cred = _get_storage_resource(get_gcp_credentials())
180
200
  if service_names.storage in enabled_services:
181
- storage.sync_gcp_buckets(neo4j_session, resources.storage, project_id, gcp_update_tag, common_job_parameters)
201
+ storage.sync_gcp_buckets(neo4j_session, storage_cred, project_id, gcp_update_tag, common_job_parameters)
202
+
203
+
204
+ def _sync_single_project_gke(
205
+ neo4j_session: neo4j.Session, resources: Resource, project_id: str, gcp_update_tag: int,
206
+ common_job_parameters: Dict,
207
+ ) -> None:
208
+ """
209
+ Handles graph sync for a single GCP project GKE resources.
210
+ :param neo4j_session: The Neo4j session
211
+ :param resources: namedtuple of the GCP resource objects
212
+ :param project_id: The project ID number to sync. See the `projectId` field in
213
+ https://cloud.google.com/resource-manager/reference/rest/v1/projects
214
+ :param gcp_update_tag: The timestamp value to set our new Neo4j nodes with
215
+ :param common_job_parameters: Other parameters sent to Neo4j
216
+ :return: Nothing
217
+ """
218
+ # Determine the resources available on the project.
219
+ enabled_services = _services_enabled_on_project(resources.serviceusage, project_id)
220
+ container_cred = _get_container_resource(get_gcp_credentials())
182
221
  if service_names.gke in enabled_services:
183
- gke.sync_gke_clusters(neo4j_session, resources.container, project_id, gcp_update_tag, common_job_parameters)
222
+ gke.sync_gke_clusters(neo4j_session, container_cred, project_id, gcp_update_tag, common_job_parameters)
223
+
224
+
225
+ def _sync_single_project_dns(
226
+ neo4j_session: neo4j.Session, resources: Resource, project_id: str, gcp_update_tag: int,
227
+ common_job_parameters: Dict,
228
+ ) -> None:
229
+ """
230
+ Handles graph sync for a single GCP project DNS resources.
231
+ :param neo4j_session: The Neo4j session
232
+ :param resources: namedtuple of the GCP resource objects
233
+ :param project_id: The project ID number to sync. See the `projectId` field in
234
+ https://cloud.google.com/resource-manager/reference/rest/v1/projects
235
+ :param gcp_update_tag: The timestamp value to set our new Neo4j nodes with
236
+ :param common_job_parameters: Other parameters sent to Neo4j
237
+ :return: Nothing
238
+ """
239
+ # Determine the resources available on the project.
240
+ enabled_services = _services_enabled_on_project(resources.serviceusage, project_id)
241
+ dns_cred = _get_dns_resource(get_gcp_credentials())
184
242
  if service_names.dns in enabled_services:
185
- dns.sync(neo4j_session, resources.dns, project_id, gcp_update_tag, common_job_parameters)
243
+ dns.sync(neo4j_session, dns_cred, project_id, gcp_update_tag, common_job_parameters)
186
244
 
187
245
 
188
246
  def _sync_multiple_projects(
@@ -203,26 +261,38 @@ def _sync_multiple_projects(
203
261
  """
204
262
  logger.info("Syncing %d GCP projects.", len(projects))
205
263
  crm.sync_gcp_projects(neo4j_session, projects, gcp_update_tag, common_job_parameters)
264
+ # Compute data sync
265
+ for project in projects:
266
+ project_id = project['projectId']
267
+ logger.info("Syncing GCP project %s for Compute.", project_id)
268
+ _sync_single_project_compute(neo4j_session, resources, project_id, gcp_update_tag, common_job_parameters)
206
269
 
270
+ # Storage data sync
207
271
  for project in projects:
208
272
  project_id = project['projectId']
209
- logger.info("Syncing GCP project %s.", project_id)
210
- _sync_single_project(neo4j_session, resources, project_id, gcp_update_tag, common_job_parameters)
273
+ logger.info("Syncing GCP project %s for Storage", project_id)
274
+ _sync_single_project_storage(neo4j_session, resources, project_id, gcp_update_tag, common_job_parameters)
275
+
276
+ # GKE data sync
277
+ for project in projects:
278
+ project_id = project['projectId']
279
+ logger.info("Syncing GCP project %s for GKE", project_id)
280
+ _sync_single_project_gke(neo4j_session, resources, project_id, gcp_update_tag, common_job_parameters)
281
+
282
+ # DNS data sync
283
+ for project in projects:
284
+ project_id = project['projectId']
285
+ logger.info("Syncing GCP project %s for DNS", project_id)
286
+ _sync_single_project_dns(neo4j_session, resources, project_id, gcp_update_tag, common_job_parameters)
211
287
 
212
288
 
213
289
  @timeit
214
- def start_gcp_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
290
+ def get_gcp_credentials() -> GoogleCredentials:
215
291
  """
216
- Starts the GCP ingestion process by initializing Google Application Default Credentials, creating the necessary
217
- resource objects, listing all GCP organizations and projects available to the GCP identity, and supplying that
218
- context to all intel modules.
219
- :param neo4j_session: The Neo4j session
220
- :param config: A `cartography.config` object
221
- :return: Nothing
292
+ Gets access tokens for GCP API access.
293
+ :param: None
294
+ :return: GoogleCredentials
222
295
  """
223
- common_job_parameters = {
224
- "UPDATE_TAG": config.update_tag,
225
- }
226
296
  try:
227
297
  # Explicitly use Application Default Credentials.
228
298
  # See https://oauth2client.readthedocs.io/en/latest/source/
@@ -239,7 +309,24 @@ def start_gcp_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
239
309
  ),
240
310
  e,
241
311
  )
242
- return
312
+ return credentials
313
+
314
+
315
+ @timeit
316
+ def start_gcp_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
317
+ """
318
+ Starts the GCP ingestion process by initializing Google Application Default Credentials, creating the necessary
319
+ resource objects, listing all GCP organizations and projects available to the GCP identity, and supplying that
320
+ context to all intel modules.
321
+ :param neo4j_session: The Neo4j session
322
+ :param config: A `cartography.config` object
323
+ :return: Nothing
324
+ """
325
+ common_job_parameters = {
326
+ "UPDATE_TAG": config.update_tag,
327
+ }
328
+
329
+ credentials = get_gcp_credentials()
243
330
 
244
331
  resources = _initialize_resources(credentials)
245
332
 
@@ -21,7 +21,7 @@ def start_kandji_ingestion(neo4j_session: neo4j.Session, config: Config) -> None
21
21
  """
22
22
  if config.kandji_base_uri is None or config.kandji_token is None or config.kandji_tenant_id is None:
23
23
  logger.warning(
24
- 'Required parameter(s) missing. Skipping sync.',
24
+ 'Required parameter missing. Skipping sync. '
25
25
  'See docs to configure.',
26
26
  )
27
27
  return
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+ import neo4j
4
+
5
+ from cartography.config import Config
6
+ from cartography.intel.semgrep.dependencies import sync_dependencies
7
+ from cartography.intel.semgrep.deployment import sync_deployment
8
+ from cartography.intel.semgrep.findings import sync_findings
9
+ from cartography.util import timeit
10
+
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ @timeit
16
+ def start_semgrep_ingestion(
17
+ neo4j_session: neo4j.Session, config: Config,
18
+ ) -> None:
19
+ common_job_parameters = {
20
+ "UPDATE_TAG": config.update_tag,
21
+ }
22
+ if not config.semgrep_app_token:
23
+ logger.info('Semgrep import is not configured - skipping this module. See docs to configure.')
24
+ return
25
+
26
+ # sync_deployment must be called first since it populates common_job_parameters
27
+ # with the deployment ID and slug, which are required by the other sync functions
28
+ sync_deployment(neo4j_session, config.semgrep_app_token, config.update_tag, common_job_parameters)
29
+ sync_dependencies(neo4j_session, config.semgrep_app_token, config.update_tag, common_job_parameters)
30
+ sync_findings(neo4j_session, config.semgrep_app_token, config.update_tag, common_job_parameters)