cartography 0.95.0__tar.gz → 0.96.0rc1__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 (356) hide show
  1. {cartography-0.95.0 → cartography-0.96.0rc1}/PKG-INFO +1 -1
  2. {cartography-0.95.0 → cartography-0.96.0rc1}/README.md +1 -2
  3. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/querybuilder.py +4 -0
  4. cartography-0.96.0rc1/cartography/intel/aws/ec2/network_acls.py +208 -0
  5. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/resources.py +2 -0
  6. cartography-0.96.0rc1/cartography/models/aws/ec2/network_acl_rules.py +97 -0
  7. cartography-0.96.0rc1/cartography/models/aws/ec2/network_acls.py +86 -0
  8. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/core/common.py +18 -1
  9. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/PKG-INFO +1 -1
  10. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/SOURCES.txt +3 -0
  11. {cartography-0.95.0 → cartography-0.96.0rc1}/setup.py +1 -1
  12. {cartography-0.95.0 → cartography-0.96.0rc1}/LICENSE +0 -0
  13. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/__init__.py +0 -0
  14. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/__main__.py +0 -0
  15. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/cli.py +0 -0
  16. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/client/__init__.py +0 -0
  17. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/client/aws/__init__.py +0 -0
  18. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/client/aws/iam.py +0 -0
  19. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/client/core/__init__.py +0 -0
  20. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/client/core/tx.py +0 -0
  21. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/config.py +0 -0
  22. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/__init__.py +0 -0
  23. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/indexes.cypher +0 -0
  24. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/__init__.py +0 -0
  25. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/__init__.py +0 -0
  26. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +0 -0
  27. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -0
  28. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -0
  29. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +0 -0
  30. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_eks_asset_exposure.json +0 -0
  31. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_foreign_accounts.json +0 -0
  32. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_lambda_ecr.json +0 -0
  33. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/aws_s3acl_analysis.json +0 -0
  34. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +0 -0
  35. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/gcp_gke_asset_exposure.json +0 -0
  36. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/gcp_gke_basic_auth.json +0 -0
  37. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/analysis/gsuite_human_link.json +0 -0
  38. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/__init__.py +0 -0
  39. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_account_cleanup.json +0 -0
  40. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -0
  41. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -0
  42. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -0
  43. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -0
  44. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_config_cleanup.json +0 -0
  45. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json +0 -0
  46. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -0
  47. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json +0 -0
  48. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json +0 -0
  49. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_elastic_ip_addresses_cleanup.json +0 -0
  50. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_elasticache_cleanup.json +0 -0
  51. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_es_cleanup.json +0 -0
  52. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -0
  53. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_membership_cleanup.json +0 -0
  54. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_policy_cleanup.json +0 -0
  55. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_internet_gateways_cleanup.json +0 -0
  56. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_kms_cleanup.json +0 -0
  57. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -0
  58. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -0
  59. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -0
  60. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -0
  61. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -0
  62. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_redshift_clusters_cleanup.json +0 -0
  63. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_reserved_instances_cleanup.json +0 -0
  64. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -0
  65. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_policy_cleanup.json +0 -0
  66. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_acl_cleanup.json +0 -0
  67. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_buckets_cleanup.json +0 -0
  68. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -0
  69. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_securityhub_cleanup.json +0 -0
  70. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -0
  71. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_sqs_queues_cleanup.json +0 -0
  72. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_tags_cleanup.json +0 -0
  73. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_tgw_cleanup.json +0 -0
  74. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -0
  75. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -0
  76. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -0
  77. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_ingest_ec2_auto_scaling_groups_cleanup.json +0 -0
  78. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_cleanup.json +0 -0
  79. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_v2_cleanup.json +0 -0
  80. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_ingest_subnets_cleanup.json +0 -0
  81. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_kms_details.json +0 -0
  82. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_post_ingestion_principals_cleanup.json +0 -0
  83. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/aws_s3_details.json +0 -0
  84. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -0
  85. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -0
  86. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -0
  87. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -0
  88. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -0
  89. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -0
  90. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -0
  91. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -0
  92. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -0
  93. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -0
  94. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -0
  95. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -0
  96. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -0
  97. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -0
  98. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json +0 -0
  99. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/digitalocean_project_cleanup.json +0 -0
  100. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json +0 -0
  101. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_compute_forwarding_rules_cleanup.json +0 -0
  102. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_compute_instance_cleanup.json +0 -0
  103. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -0
  104. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -0
  105. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -0
  106. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -0
  107. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -0
  108. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -0
  109. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -0
  110. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -0
  111. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/github_repos_cleanup.json +0 -0
  112. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/github_users_cleanup.json +0 -0
  113. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -0
  114. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -0
  115. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/jamf_import_computers_cleanup.json +0 -0
  116. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -0
  117. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_import_compartments_cleanup.json +0 -0
  118. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_cleanup.json +0 -0
  119. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_membership_cleanup.json +0 -0
  120. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_import_policies_cleanup.json +0 -0
  121. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_import_users_cleanup.json +0 -0
  122. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/oci_tenancy_cleanup.json +0 -0
  123. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/okta_groups_cleanup.json +0 -0
  124. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/okta_import_cleanup.json +0 -0
  125. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/cleanup/pagerduty_import_cleanup.json +0 -0
  126. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/scoped_analysis/__init__.py +0 -0
  127. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +0 -0
  128. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/data/permission_relationships.yaml +0 -0
  129. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/__init__.py +0 -0
  130. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/__main__.py +0 -0
  131. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/add_shortcut.py +0 -0
  132. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/cli.py +0 -0
  133. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/config.py +0 -0
  134. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/detect_deviations.py +0 -0
  135. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/get_states.py +0 -0
  136. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/model.py +0 -0
  137. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/reporter.py +0 -0
  138. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/serializers.py +0 -0
  139. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/shortcut.py +0 -0
  140. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/storage.py +0 -0
  141. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/driftdetect/util.py +0 -0
  142. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/__init__.py +0 -0
  143. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/cleanupbuilder.py +0 -0
  144. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/context.py +0 -0
  145. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/job.py +0 -0
  146. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/graph/statement.py +0 -0
  147. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/__init__.py +0 -0
  148. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/analysis.py +0 -0
  149. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/__init__.py +0 -0
  150. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/apigateway.py +0 -0
  151. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/config.py +0 -0
  152. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/dynamodb.py +0 -0
  153. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/__init__.py +0 -0
  154. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/auto_scaling_groups.py +0 -0
  155. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/elastic_ip_addresses.py +0 -0
  156. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/images.py +0 -0
  157. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/instances.py +0 -0
  158. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/internet_gateways.py +0 -0
  159. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/key_pairs.py +0 -0
  160. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/launch_templates.py +0 -0
  161. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/load_balancer_v2s.py +0 -0
  162. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/load_balancers.py +0 -0
  163. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/network_interfaces.py +0 -0
  164. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/reserved_instances.py +0 -0
  165. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/security_groups.py +0 -0
  166. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/snapshots.py +0 -0
  167. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/subnets.py +0 -0
  168. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/tgw.py +0 -0
  169. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/util.py +0 -0
  170. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/volumes.py +0 -0
  171. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/vpc.py +0 -0
  172. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ec2/vpc_peerings.py +0 -0
  173. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ecr.py +0 -0
  174. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ecs.py +0 -0
  175. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/eks.py +0 -0
  176. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/elasticache.py +0 -0
  177. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/elasticsearch.py +0 -0
  178. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/emr.py +0 -0
  179. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/iam.py +0 -0
  180. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/inspector.py +0 -0
  181. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/kms.py +0 -0
  182. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/lambda_function.py +0 -0
  183. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/organizations.py +0 -0
  184. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/permission_relationships.py +0 -0
  185. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/rds.py +0 -0
  186. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/redshift.py +0 -0
  187. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/resourcegroupstaggingapi.py +0 -0
  188. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/route53.py +0 -0
  189. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/s3.py +0 -0
  190. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/secretsmanager.py +0 -0
  191. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/securityhub.py +0 -0
  192. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/sqs.py +0 -0
  193. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/ssm.py +0 -0
  194. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/util/__init__.py +0 -0
  195. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/util/arns.py +0 -0
  196. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/aws/util/common.py +0 -0
  197. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/__init__.py +0 -0
  198. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/compute.py +0 -0
  199. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/cosmosdb.py +0 -0
  200. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/sql.py +0 -0
  201. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/storage.py +0 -0
  202. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/subscription.py +0 -0
  203. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/tenant.py +0 -0
  204. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/util/__init__.py +0 -0
  205. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/azure/util/credentials.py +0 -0
  206. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/bigfix/__init__.py +0 -0
  207. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/bigfix/computers.py +0 -0
  208. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/create_indexes.py +0 -0
  209. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/crowdstrike/__init__.py +0 -0
  210. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/crowdstrike/endpoints.py +0 -0
  211. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/crowdstrike/spotlight.py +0 -0
  212. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/crowdstrike/util.py +0 -0
  213. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/cve/__init__.py +0 -0
  214. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/cve/feed.py +0 -0
  215. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/digitalocean/__init__.py +0 -0
  216. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/digitalocean/compute.py +0 -0
  217. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/digitalocean/management.py +0 -0
  218. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/digitalocean/platform.py +0 -0
  219. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/dns.py +0 -0
  220. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/__init__.py +0 -0
  221. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/api_host.py +0 -0
  222. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/endpoints.py +0 -0
  223. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/groups.py +0 -0
  224. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/phones.py +0 -0
  225. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/tokens.py +0 -0
  226. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/users.py +0 -0
  227. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/duo/web_authn_credentials.py +0 -0
  228. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/__init__.py +0 -0
  229. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/compute.py +0 -0
  230. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/crm.py +0 -0
  231. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/dns.py +0 -0
  232. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/gke.py +0 -0
  233. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gcp/storage.py +0 -0
  234. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/github/__init__.py +0 -0
  235. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/github/repos.py +0 -0
  236. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/github/teams.py +0 -0
  237. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/github/users.py +0 -0
  238. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/github/util.py +0 -0
  239. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gsuite/__init__.py +0 -0
  240. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/gsuite/api.py +0 -0
  241. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/jamf/__init__.py +0 -0
  242. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/jamf/computers.py +0 -0
  243. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/jamf/util.py +0 -0
  244. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kandji/__init__.py +0 -0
  245. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kandji/devices.py +0 -0
  246. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/__init__.py +0 -0
  247. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/namespaces.py +0 -0
  248. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/pods.py +0 -0
  249. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/secrets.py +0 -0
  250. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/services.py +0 -0
  251. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/kubernetes/util.py +0 -0
  252. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/lastpass/__init__.py +0 -0
  253. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/lastpass/users.py +0 -0
  254. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/oci/__init__.py +0 -0
  255. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/oci/iam.py +0 -0
  256. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/oci/organizations.py +0 -0
  257. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/oci/utils.py +0 -0
  258. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/__init__.py +0 -0
  259. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/applications.py +0 -0
  260. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/awssaml.py +0 -0
  261. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/factors.py +0 -0
  262. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/groups.py +0 -0
  263. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/organization.py +0 -0
  264. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/origins.py +0 -0
  265. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/roles.py +0 -0
  266. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/sync_state.py +0 -0
  267. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/users.py +0 -0
  268. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/okta/utils.py +0 -0
  269. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/__init__.py +0 -0
  270. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/escalation_policies.py +0 -0
  271. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/schedules.py +0 -0
  272. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/services.py +0 -0
  273. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/teams.py +0 -0
  274. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/users.py +0 -0
  275. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/pagerduty/vendors.py +0 -0
  276. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/semgrep/__init__.py +0 -0
  277. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/semgrep/dependencies.py +0 -0
  278. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/semgrep/deployment.py +0 -0
  279. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/semgrep/findings.py +0 -0
  280. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/snipeit/__init__.py +0 -0
  281. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/snipeit/asset.py +0 -0
  282. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/snipeit/user.py +0 -0
  283. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/intel/snipeit/util.py +0 -0
  284. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/__init__.py +0 -0
  285. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/__init__.py +0 -0
  286. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/dynamodb/__init__.py +0 -0
  287. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/dynamodb/gsi.py +0 -0
  288. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/dynamodb/tables.py +0 -0
  289. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/__init__.py +0 -0
  290. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/images.py +0 -0
  291. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/instances.py +0 -0
  292. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/keypairs.py +0 -0
  293. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/launch_template_versions.py +0 -0
  294. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/launch_templates.py +0 -0
  295. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/loadbalancerv2.py +0 -0
  296. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/networkinterface_instance.py +0 -0
  297. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/networkinterfaces.py +0 -0
  298. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/privateip_networkinterface.py +0 -0
  299. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/reservations.py +0 -0
  300. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/securitygroup_instance.py +0 -0
  301. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/securitygroup_networkinterface.py +0 -0
  302. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/subnet_instance.py +0 -0
  303. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/subnet_networkinterface.py +0 -0
  304. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ec2/volumes.py +0 -0
  305. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/eks/__init__.py +0 -0
  306. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/eks/clusters.py +0 -0
  307. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/emr.py +0 -0
  308. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/inspector/__init__.py +0 -0
  309. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/inspector/findings.py +0 -0
  310. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/inspector/packages.py +0 -0
  311. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ssm/__init__.py +0 -0
  312. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ssm/instance_information.py +0 -0
  313. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/aws/ssm/instance_patch.py +0 -0
  314. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/bigfix/__init__.py +0 -0
  315. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/bigfix/bigfix_computer.py +0 -0
  316. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/bigfix/bigfix_root.py +0 -0
  317. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/core/__init__.py +0 -0
  318. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/core/nodes.py +0 -0
  319. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/core/relationships.py +0 -0
  320. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/cve/__init__.py +0 -0
  321. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/cve/cve.py +0 -0
  322. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/cve/cve_feed.py +0 -0
  323. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/__init__.py +0 -0
  324. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/api_host.py +0 -0
  325. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/endpoint.py +0 -0
  326. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/group.py +0 -0
  327. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/phone.py +0 -0
  328. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/token.py +0 -0
  329. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/user.py +0 -0
  330. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/duo/web_authn_credential.py +0 -0
  331. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/github/__init__.py +0 -0
  332. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/github/teams.py +0 -0
  333. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/kandji/__init__.py +0 -0
  334. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/kandji/device.py +0 -0
  335. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/kandji/tenant.py +0 -0
  336. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/lastpass/__init__.py +0 -0
  337. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/lastpass/tenant.py +0 -0
  338. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/lastpass/user.py +0 -0
  339. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/semgrep/__init__.py +0 -0
  340. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/semgrep/dependencies.py +0 -0
  341. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/semgrep/deployment.py +0 -0
  342. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/semgrep/findings.py +0 -0
  343. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/semgrep/locations.py +0 -0
  344. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/snipeit/__init__.py +0 -0
  345. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/snipeit/asset.py +0 -0
  346. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/snipeit/tenant.py +0 -0
  347. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/models/snipeit/user.py +0 -0
  348. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/py.typed +0 -0
  349. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/stats.py +0 -0
  350. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/sync.py +0 -0
  351. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography/util.py +0 -0
  352. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/dependency_links.txt +0 -0
  353. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/entry_points.txt +0 -0
  354. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/requires.txt +0 -0
  355. {cartography-0.95.0 → cartography-0.96.0rc1}/cartography.egg-info/top_level.txt +0 -0
  356. {cartography-0.95.0 → cartography-0.96.0rc1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.95.0
3
+ Version: 0.96.0rc1
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Home-page: https://www.github.com/cartography-cncf/cartography
6
6
  Maintainer: Cartography Contributors
@@ -80,11 +80,10 @@ Directly querying Neo4j is already very useful as a sort of "swiss army knife" f
80
80
 
81
81
  ## Community
82
82
 
83
- - Join us on `#cartography` on the [Lyft OSS Slack](https://join.slack.com/t/lyftoss/shared_invite/enQtOTYzODg5OTQwNDE2LTFiYjgwZWM3NTNhMTFkZjc4Y2IxOTI4NTdiNTdhNjQ4M2Q5NTIzMjVjOWI4NmVlNjRiZmU2YzA5NTc3MmFjYTQ).
83
+ - Hang out with us on Slack: Join the CNCF Slack workspace [here](https://communityinviter.com/apps/cloud-native/cncf), and then join the `#cartography` channel.
84
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
85
  - Meeting minutes are [here](https://docs.google.com/document/d/1VyRKmB0dpX185I15BmNJZpfAJ_Ooobwz0U1WIhjDxvw).
86
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
87
 
89
88
  ## License
90
89
 
@@ -118,6 +118,7 @@ def _build_where_clause_for_rel_match(node_var: str, matcher: TargetNodeMatcher)
118
118
  """
119
119
  match = Template("$node_var.$key = $prop_ref")
120
120
  case_insensitive_match = Template("toLower($node_var.$key) = toLower($prop_ref)")
121
+ fuzzy_and_ignorecase_match = Template("toLower($node_var.$key) CONTAINS toLower($prop_ref)")
121
122
 
122
123
  matcher_asdict = asdict(matcher)
123
124
 
@@ -125,7 +126,10 @@ def _build_where_clause_for_rel_match(node_var: str, matcher: TargetNodeMatcher)
125
126
  for key, prop_ref in matcher_asdict.items():
126
127
  if prop_ref.ignore_case:
127
128
  prop_line = case_insensitive_match.safe_substitute(node_var=node_var, key=key, prop_ref=prop_ref)
129
+ elif prop_ref.fuzzy_and_ignore_case:
130
+ prop_line = fuzzy_and_ignorecase_match.safe_substitute(node_var=node_var, key=key, prop_ref=prop_ref)
128
131
  else:
132
+ # Exact match (default; most efficient)
129
133
  prop_line = match.safe_substitute(node_var=node_var, key=key, prop_ref=prop_ref)
130
134
  result.append(prop_line)
131
135
  return ' AND\n'.join(result)
@@ -0,0 +1,208 @@
1
+ import logging
2
+ from collections import namedtuple
3
+ from typing import Any
4
+
5
+ import boto3
6
+ import neo4j
7
+
8
+ from .util import get_botocore_config
9
+ from cartography.client.core.tx import load
10
+ from cartography.graph.job import GraphJob
11
+ from cartography.models.aws.ec2.network_acl_rules import EC2NetworkAclEgressRuleSchema
12
+ from cartography.models.aws.ec2.network_acl_rules import EC2NetworkAclInboundRuleSchema
13
+ from cartography.models.aws.ec2.network_acls import EC2NetworkAclSchema
14
+ from cartography.util import aws_handle_regions
15
+ from cartography.util import timeit
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+ Ec2AclObjects = namedtuple(
20
+ "Ec2AclObjects", [
21
+ 'network_acls',
22
+ 'inbound_rules',
23
+ 'outbound_rules',
24
+ ],
25
+ )
26
+
27
+
28
+ @timeit
29
+ @aws_handle_regions
30
+ def get_network_acl_data(boto3_session: boto3.session.Session, region: str) -> list[dict[str, Any]]:
31
+ client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
32
+ paginator = client.get_paginator('describe_network_acls')
33
+ acls = []
34
+ for page in paginator.paginate():
35
+ acls.extend(page['NetworkAcls'])
36
+ return acls
37
+
38
+
39
+ def transform_network_acl_data(
40
+ data_list: list[dict[str, Any]],
41
+ region: str,
42
+ current_aws_account_id: str,
43
+ ) -> Ec2AclObjects:
44
+ network_acls = []
45
+ inbound_rules = []
46
+ outbound_rules = []
47
+
48
+ for network_acl in data_list:
49
+ network_acl_id = network_acl['NetworkAclId']
50
+ base_network_acl = {
51
+ 'Id': network_acl_id,
52
+ 'Arn': f'arn:aws:ec2:{region}:{current_aws_account_id}:network-acl/{network_acl_id}',
53
+ 'IsDefault': network_acl['IsDefault'],
54
+ 'VpcId': network_acl['VpcId'],
55
+ 'OwnerId': network_acl['OwnerId'],
56
+ }
57
+ if network_acl.get('Associations') and network_acl['Associations']:
58
+ # Include subnet associations in the data object if they exist
59
+ for association in network_acl['Associations']:
60
+ base_network_acl['NetworkAclAssociationId'] = association['NetworkAclAssociationId']
61
+ base_network_acl['SubnetId'] = association['SubnetId']
62
+ network_acls.append(base_network_acl)
63
+ else:
64
+ # Otherwise if there's no associations then don't include that in the data object
65
+ network_acls.append(base_network_acl)
66
+
67
+ if network_acl.get("Entries"):
68
+ for rule in network_acl["Entries"]:
69
+ direction = 'egress' if rule['Egress'] else 'inbound'
70
+ transformed_rule = {
71
+ 'Id': f"{network_acl['NetworkAclId']}/{direction}/{rule['RuleNumber']}",
72
+ 'CidrBlock': rule['CidrBlock'],
73
+ 'Egress': rule['Egress'],
74
+ 'Protocol': rule['Protocol'],
75
+ 'RuleAction': rule['RuleAction'],
76
+ 'RuleNumber': rule['RuleNumber'],
77
+ # Add pointer back to the nacl to create an edge
78
+ 'NetworkAclId': network_acl_id,
79
+ 'FromPort': rule.get('PortRange', {}).get('FromPort'),
80
+ 'ToPort': rule.get('PortRange', {}).get('ToPort'),
81
+ }
82
+ if transformed_rule['Egress']:
83
+ outbound_rules.append(transformed_rule)
84
+ else:
85
+ inbound_rules.append(transformed_rule)
86
+ return Ec2AclObjects(
87
+ network_acls=network_acls,
88
+ inbound_rules=inbound_rules,
89
+ outbound_rules=outbound_rules,
90
+ )
91
+
92
+
93
+ @timeit
94
+ def load_all_nacl_data(
95
+ neo4j_session: neo4j.Session,
96
+ ec2_acl_objects: Ec2AclObjects,
97
+ region: str,
98
+ aws_account_id: str,
99
+ update_tag: int,
100
+ ) -> None:
101
+ load_network_acls(
102
+ neo4j_session,
103
+ ec2_acl_objects.network_acls,
104
+ region,
105
+ aws_account_id,
106
+ update_tag,
107
+ )
108
+ load_network_acl_inbound_rules(
109
+ neo4j_session,
110
+ ec2_acl_objects.inbound_rules,
111
+ region,
112
+ aws_account_id,
113
+ update_tag,
114
+ )
115
+ load_network_acl_egress_rules(
116
+ neo4j_session,
117
+ ec2_acl_objects.outbound_rules,
118
+ region,
119
+ aws_account_id,
120
+ update_tag,
121
+ )
122
+
123
+
124
+ @timeit
125
+ def load_network_acls(
126
+ neo4j_session: neo4j.Session,
127
+ data: list[dict[str, Any]],
128
+ region: str,
129
+ aws_account_id: str,
130
+ update_tag: int,
131
+ ) -> None:
132
+ logger.info(f"Loading {len(data)} network acls in {region}.")
133
+ load(
134
+ neo4j_session,
135
+ EC2NetworkAclSchema(),
136
+ data,
137
+ Region=region,
138
+ AWS_ID=aws_account_id,
139
+ lastupdated=update_tag,
140
+ )
141
+
142
+
143
+ @timeit
144
+ def load_network_acl_inbound_rules(
145
+ neo4j_session: neo4j.Session,
146
+ data: list[dict[str, Any]],
147
+ region: str,
148
+ aws_account_id: str,
149
+ update_tag: int,
150
+ ) -> None:
151
+ logger.info(f"Loading {len(data)} network acl inbound rules in {region}.")
152
+ load(
153
+ neo4j_session,
154
+ EC2NetworkAclInboundRuleSchema(),
155
+ data,
156
+ Region=region,
157
+ AWS_ID=aws_account_id,
158
+ lastupdated=update_tag,
159
+ )
160
+
161
+
162
+ @timeit
163
+ def load_network_acl_egress_rules(
164
+ neo4j_session: neo4j.Session,
165
+ data: list[dict[str, Any]],
166
+ region: str,
167
+ aws_account_id: str,
168
+ update_tag: int,
169
+ ) -> None:
170
+ logger.info(f"Loading {len(data)} network acl egress rules in {region}.")
171
+ load(
172
+ neo4j_session,
173
+ EC2NetworkAclEgressRuleSchema(),
174
+ data,
175
+ Region=region,
176
+ AWS_ID=aws_account_id,
177
+ lastupdated=update_tag,
178
+ )
179
+
180
+
181
+ @timeit
182
+ def cleanup_network_acls(neo4j_session: neo4j.Session, common_job_parameters: dict[str, Any]) -> None:
183
+ GraphJob.from_node_schema(EC2NetworkAclSchema(), common_job_parameters).run(neo4j_session)
184
+ GraphJob.from_node_schema(EC2NetworkAclInboundRuleSchema(), common_job_parameters).run(neo4j_session)
185
+ GraphJob.from_node_schema(EC2NetworkAclEgressRuleSchema(), common_job_parameters).run(neo4j_session)
186
+
187
+
188
+ @timeit
189
+ def sync_network_acls(
190
+ neo4j_session: neo4j.Session,
191
+ boto3_session: boto3.session.Session,
192
+ regions: list[str],
193
+ current_aws_account_id: str,
194
+ update_tag: int,
195
+ common_job_parameters: dict[str, Any],
196
+ ) -> None:
197
+ for region in regions:
198
+ logger.info(f"Syncing EC2 network ACLs for region '{region}' in account '{current_aws_account_id}'.")
199
+ data = get_network_acl_data(boto3_session, region)
200
+ ec2_acl_data = transform_network_acl_data(data, region, current_aws_account_id)
201
+ load_all_nacl_data(
202
+ neo4j_session,
203
+ ec2_acl_data,
204
+ region,
205
+ current_aws_account_id,
206
+ update_tag,
207
+ )
208
+ cleanup_network_acls(neo4j_session, common_job_parameters)
@@ -32,6 +32,7 @@ from .ec2.key_pairs import sync_ec2_key_pairs
32
32
  from .ec2.launch_templates import sync_ec2_launch_templates
33
33
  from .ec2.load_balancer_v2s import sync_load_balancer_v2s
34
34
  from .ec2.load_balancers import sync_load_balancers
35
+ from .ec2.network_acls import sync_network_acls
35
36
  from .ec2.network_interfaces import sync_network_interfaces
36
37
  from .ec2.reserved_instances import sync_ec2_reserved_instances
37
38
  from .ec2.security_groups import sync_ec2_security_groupinfo
@@ -55,6 +56,7 @@ RESOURCE_FUNCTIONS: Dict = {
55
56
  'ec2:keypair': sync_ec2_key_pairs,
56
57
  'ec2:load_balancer': sync_load_balancers,
57
58
  'ec2:load_balancer_v2': sync_load_balancer_v2s,
59
+ 'ec2:network_acls': sync_network_acls,
58
60
  'ec2:network_interface': sync_network_interfaces,
59
61
  'ec2:security_group': sync_ec2_security_groupinfo,
60
62
  'ec2:subnet': sync_subnets,
@@ -0,0 +1,97 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.nodes import ExtraNodeLabels
7
+ from cartography.models.core.relationships import CartographyRelProperties
8
+ from cartography.models.core.relationships import CartographyRelSchema
9
+ from cartography.models.core.relationships import LinkDirection
10
+ from cartography.models.core.relationships import make_target_node_matcher
11
+ from cartography.models.core.relationships import OtherRelationships
12
+ from cartography.models.core.relationships import TargetNodeMatcher
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class EC2NetworkAclRuleNodeProperties(CartographyNodeProperties):
17
+ id: PropertyRef = PropertyRef('Id')
18
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
19
+ network_acl_id: PropertyRef = PropertyRef('NetworkAclId')
20
+ protocol: PropertyRef = PropertyRef('Protocol')
21
+ fromport: PropertyRef = PropertyRef('FromPort')
22
+ toport: PropertyRef = PropertyRef('ToPort')
23
+ cidrblock: PropertyRef = PropertyRef('CidrBlock')
24
+ egress: PropertyRef = PropertyRef('Egress')
25
+ rulenumber: PropertyRef = PropertyRef('RuleNumber')
26
+ ruleaction: PropertyRef = PropertyRef('RuleAction')
27
+ region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class EC2NetworkAclRuleAclRelProperties(CartographyRelProperties):
32
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
33
+
34
+
35
+ @dataclass(frozen=True)
36
+ class EC2NetworkAclRuleToAcl(CartographyRelSchema):
37
+ target_node_label: str = 'EC2NetworkAcl'
38
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
39
+ {'network_acl_id': PropertyRef('NetworkAclId')},
40
+ )
41
+ direction: LinkDirection = LinkDirection.OUTWARD
42
+ rel_label: str = "MEMBER_OF_NACL"
43
+ properties: EC2NetworkAclRuleAclRelProperties = EC2NetworkAclRuleAclRelProperties()
44
+
45
+
46
+ @dataclass(frozen=True)
47
+ class EC2NetworkAclRuleToAwsAccountRelProperties(CartographyRelProperties):
48
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
49
+
50
+
51
+ @dataclass(frozen=True)
52
+ class EC2NetworkAclRuleToAWSAccount(CartographyRelSchema):
53
+ target_node_label: str = 'AWSAccount'
54
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
55
+ {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
56
+ )
57
+ direction: LinkDirection = LinkDirection.INWARD
58
+ rel_label: str = "RESOURCE"
59
+ properties: EC2NetworkAclRuleToAwsAccountRelProperties = EC2NetworkAclRuleToAwsAccountRelProperties()
60
+
61
+
62
+ @dataclass(frozen=True)
63
+ class EC2NetworkAclInboundRuleSchema(CartographyNodeSchema):
64
+ """
65
+ Network interface as known by describe-network-interfaces.
66
+ """
67
+ label: str = 'EC2NetworkAclRule'
68
+ extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(
69
+ ['IpPermissionInbound'],
70
+ )
71
+ properties: EC2NetworkAclRuleNodeProperties = EC2NetworkAclRuleNodeProperties()
72
+ sub_resource_relationship: EC2NetworkAclRuleToAWSAccount = EC2NetworkAclRuleToAWSAccount()
73
+ other_relationships: OtherRelationships = OtherRelationships(
74
+ [
75
+ EC2NetworkAclRuleToAcl(),
76
+ ],
77
+ )
78
+
79
+
80
+ @dataclass(frozen=True)
81
+ class EC2NetworkAclEgressRuleSchema(CartographyNodeSchema):
82
+ """
83
+ Network interface as known by describe-network-interfaces.
84
+ """
85
+ label: str = 'EC2NetworkAclRule'
86
+ extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(
87
+ [
88
+ 'IpPermissionEgress',
89
+ ],
90
+ )
91
+ properties: EC2NetworkAclRuleNodeProperties = EC2NetworkAclRuleNodeProperties()
92
+ sub_resource_relationship: EC2NetworkAclRuleToAWSAccount = EC2NetworkAclRuleToAWSAccount()
93
+ other_relationships: OtherRelationships = OtherRelationships(
94
+ [
95
+ EC2NetworkAclRuleToAcl(),
96
+ ],
97
+ )
@@ -0,0 +1,86 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.relationships import CartographyRelProperties
7
+ from cartography.models.core.relationships import CartographyRelSchema
8
+ from cartography.models.core.relationships import LinkDirection
9
+ from cartography.models.core.relationships import make_target_node_matcher
10
+ from cartography.models.core.relationships import OtherRelationships
11
+ from cartography.models.core.relationships import TargetNodeMatcher
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class EC2NetworkAclNodeProperties(CartographyNodeProperties):
16
+ id: PropertyRef = PropertyRef('Arn')
17
+ arn: PropertyRef = PropertyRef('Arn')
18
+ network_acl_id: PropertyRef = PropertyRef('Id')
19
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
20
+ is_default: PropertyRef = PropertyRef('IsDefault')
21
+ region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
22
+ vpc_id: PropertyRef = PropertyRef('VpcId')
23
+
24
+
25
+ @dataclass(frozen=True)
26
+ class EC2NetworkAclToVpcRelProperties(CartographyRelProperties):
27
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class EC2NetworkAclToVpc(CartographyRelSchema):
32
+ target_node_label: str = 'AWSVpc'
33
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
34
+ {'vpcid': PropertyRef('VpcId')},
35
+ )
36
+ direction: LinkDirection = LinkDirection.OUTWARD
37
+ rel_label: str = "MEMBER_OF_AWS_VPC"
38
+ properties: EC2NetworkAclToVpcRelProperties = EC2NetworkAclToVpcRelProperties()
39
+
40
+
41
+ @dataclass(frozen=True)
42
+ class EC2NetworkAclToSubnetRelProperties(CartographyRelProperties):
43
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
44
+
45
+
46
+ @dataclass(frozen=True)
47
+ class EC2NetworkAclToSubnet(CartographyRelSchema):
48
+ target_node_label: str = 'EC2Subnet'
49
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
50
+ {'subnetid': PropertyRef('SubnetId')},
51
+ )
52
+ direction: LinkDirection = LinkDirection.OUTWARD
53
+ rel_label: str = "PART_OF_SUBNET"
54
+ properties: EC2NetworkAclToSubnetRelProperties = EC2NetworkAclToSubnetRelProperties()
55
+
56
+
57
+ @dataclass(frozen=True)
58
+ class EC2NetworkAclToAwsAccountRelProperties(CartographyRelProperties):
59
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
60
+
61
+
62
+ @dataclass(frozen=True)
63
+ class EC2NetworkAclToAWSAccount(CartographyRelSchema):
64
+ target_node_label: str = 'AWSAccount'
65
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
66
+ {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
67
+ )
68
+ direction: LinkDirection = LinkDirection.INWARD
69
+ rel_label: str = "RESOURCE"
70
+ properties: EC2NetworkAclToAwsAccountRelProperties = EC2NetworkAclToAwsAccountRelProperties()
71
+
72
+
73
+ @dataclass(frozen=True)
74
+ class EC2NetworkAclSchema(CartographyNodeSchema):
75
+ """
76
+ Network interface as known by describe-network-interfaces.
77
+ """
78
+ label: str = 'EC2NetworkAcl'
79
+ properties: EC2NetworkAclNodeProperties = EC2NetworkAclNodeProperties()
80
+ sub_resource_relationship: EC2NetworkAclToAWSAccount = EC2NetworkAclToAWSAccount()
81
+ other_relationships: OtherRelationships = OtherRelationships(
82
+ [
83
+ EC2NetworkAclToVpc(),
84
+ EC2NetworkAclToSubnet(),
85
+ ],
86
+ )
@@ -8,7 +8,14 @@ class PropertyRef:
8
8
  (PropertyRef.set_in_kwargs=True).
9
9
  """
10
10
 
11
- def __init__(self, name: str, set_in_kwargs=False, extra_index=False, ignore_case=False):
11
+ def __init__(
12
+ self,
13
+ name: str,
14
+ set_in_kwargs=False,
15
+ extra_index=False,
16
+ ignore_case=False,
17
+ fuzzy_and_ignore_case=False,
18
+ ):
12
19
  """
13
20
  :param name: The name of the property
14
21
  :param set_in_kwargs: Optional. If True, the property is not defined on the data dict, and we expect to find the
@@ -33,11 +40,21 @@ class PropertyRef:
33
40
  cartography catalog of GitHubUser nodes. Therefore, you would need `ignore_case=True` in the PropertyRef
34
41
  that points to the GitHubUser node's name field, otherwise if one of your employees' GitHub usernames
35
42
  contains capital letters, you would not be able to map them properly to a GitHubUser node in your graph.
43
+ :param fuzzy_and_ignore_case: If True, performs a fuzzy + case-insensitive match when comparing the value of
44
+ this property using the `CONTAINS` operator.
45
+ query. Defaults to False. This only has effect as part of a TargetNodeMatcher and is not supported for the
46
+ sub resource relationship.
36
47
  """
37
48
  self.name = name
38
49
  self.set_in_kwargs = set_in_kwargs
39
50
  self.extra_index = extra_index
40
51
  self.ignore_case = ignore_case
52
+ self.fuzzy_and_ignore_case = fuzzy_and_ignore_case
53
+ if self.fuzzy_and_ignore_case and self.ignore_case:
54
+ raise ValueError(
55
+ f'Error setting PropertyRef "{self.name}": ignore_case cannot be used together with'
56
+ 'fuzzy_and_ignore_case. Pick one or the other.',
57
+ )
41
58
 
42
59
  def _parameterize_name(self) -> str:
43
60
  return f"${self.name}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.95.0
3
+ Version: 0.96.0rc1
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Home-page: https://www.github.com/cartography-cncf/cartography
6
6
  Maintainer: Cartography Contributors
@@ -187,6 +187,7 @@ cartography/intel/aws/ec2/key_pairs.py
187
187
  cartography/intel/aws/ec2/launch_templates.py
188
188
  cartography/intel/aws/ec2/load_balancer_v2s.py
189
189
  cartography/intel/aws/ec2/load_balancers.py
190
+ cartography/intel/aws/ec2/network_acls.py
190
191
  cartography/intel/aws/ec2/network_interfaces.py
191
192
  cartography/intel/aws/ec2/reserved_instances.py
192
193
  cartography/intel/aws/ec2/security_groups.py
@@ -298,6 +299,8 @@ cartography/models/aws/ec2/keypairs.py
298
299
  cartography/models/aws/ec2/launch_template_versions.py
299
300
  cartography/models/aws/ec2/launch_templates.py
300
301
  cartography/models/aws/ec2/loadbalancerv2.py
302
+ cartography/models/aws/ec2/network_acl_rules.py
303
+ cartography/models/aws/ec2/network_acls.py
301
304
  cartography/models/aws/ec2/networkinterface_instance.py
302
305
  cartography/models/aws/ec2/networkinterfaces.py
303
306
  cartography/models/aws/ec2/privateip_networkinterface.py
@@ -1,7 +1,7 @@
1
1
  from setuptools import find_packages
2
2
  from setuptools import setup
3
3
 
4
- __version__ = '0.95.0'
4
+ __version__ = '0.96.0rc1'
5
5
 
6
6
 
7
7
  setup(
File without changes