cartography 0.91.0__tar.gz → 0.92.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 (349) hide show
  1. {cartography-0.91.0/cartography.egg-info → cartography-0.92.0}/PKG-INFO +1 -1
  2. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/indexes.cypher +0 -6
  3. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/images.py +1 -0
  4. cartography-0.92.0/cartography/intel/aws/ec2/launch_templates.py +147 -0
  5. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/iam.py +1 -0
  6. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/__init__.py +1 -1
  7. cartography-0.92.0/cartography/intel/okta/awssaml.py +237 -0
  8. cartography-0.92.0/cartography/models/aws/ec2/launch_template_versions.py +81 -0
  9. cartography-0.92.0/cartography/models/aws/ec2/launch_templates.py +46 -0
  10. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/subnet_instance.py +1 -1
  11. {cartography-0.91.0 → cartography-0.92.0/cartography.egg-info}/PKG-INFO +1 -1
  12. {cartography-0.91.0 → cartography-0.92.0}/cartography.egg-info/SOURCES.txt +2 -1
  13. {cartography-0.91.0 → cartography-0.92.0}/setup.cfg +5 -0
  14. {cartography-0.91.0 → cartography-0.92.0}/setup.py +1 -1
  15. cartography-0.91.0/cartography/data/jobs/cleanup/aws_import_ec2_launch_templates_cleanup.json +0 -13
  16. cartography-0.91.0/cartography/intel/aws/ec2/launch_templates.py +0 -115
  17. cartography-0.91.0/cartography/intel/okta/awssaml.py +0 -129
  18. {cartography-0.91.0 → cartography-0.92.0}/LICENSE +0 -0
  19. {cartography-0.91.0 → cartography-0.92.0}/NOTICE +0 -0
  20. {cartography-0.91.0 → cartography-0.92.0}/README.md +0 -0
  21. {cartography-0.91.0 → cartography-0.92.0}/cartography/__init__.py +0 -0
  22. {cartography-0.91.0 → cartography-0.92.0}/cartography/__main__.py +0 -0
  23. {cartography-0.91.0 → cartography-0.92.0}/cartography/cli.py +0 -0
  24. {cartography-0.91.0 → cartography-0.92.0}/cartography/client/__init__.py +0 -0
  25. {cartography-0.91.0 → cartography-0.92.0}/cartography/client/aws/__init__.py +0 -0
  26. {cartography-0.91.0 → cartography-0.92.0}/cartography/client/aws/iam.py +0 -0
  27. {cartography-0.91.0 → cartography-0.92.0}/cartography/client/core/__init__.py +0 -0
  28. {cartography-0.91.0 → cartography-0.92.0}/cartography/client/core/tx.py +0 -0
  29. {cartography-0.91.0 → cartography-0.92.0}/cartography/config.py +0 -0
  30. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/__init__.py +0 -0
  31. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/__init__.py +0 -0
  32. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/__init__.py +0 -0
  33. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +0 -0
  34. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -0
  35. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -0
  36. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +0 -0
  37. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_eks_asset_exposure.json +0 -0
  38. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_foreign_accounts.json +0 -0
  39. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_lambda_ecr.json +0 -0
  40. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/aws_s3acl_analysis.json +0 -0
  41. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +0 -0
  42. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/gcp_gke_asset_exposure.json +0 -0
  43. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/gcp_gke_basic_auth.json +0 -0
  44. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/analysis/gsuite_human_link.json +0 -0
  45. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/__init__.py +0 -0
  46. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_account_cleanup.json +0 -0
  47. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -0
  48. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -0
  49. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -0
  50. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -0
  51. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_config_cleanup.json +0 -0
  52. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json +0 -0
  53. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -0
  54. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json +0 -0
  55. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json +0 -0
  56. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_elastic_ip_addresses_cleanup.json +0 -0
  57. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_elasticache_cleanup.json +0 -0
  58. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_es_cleanup.json +0 -0
  59. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -0
  60. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_groups_membership_cleanup.json +0 -0
  61. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_groups_policy_cleanup.json +0 -0
  62. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_internet_gateways_cleanup.json +0 -0
  63. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_kms_cleanup.json +0 -0
  64. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -0
  65. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -0
  66. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -0
  67. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -0
  68. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -0
  69. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_redshift_clusters_cleanup.json +0 -0
  70. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_reserved_instances_cleanup.json +0 -0
  71. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -0
  72. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_roles_policy_cleanup.json +0 -0
  73. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_s3_acl_cleanup.json +0 -0
  74. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_s3_buckets_cleanup.json +0 -0
  75. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -0
  76. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_securityhub_cleanup.json +0 -0
  77. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -0
  78. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_sqs_queues_cleanup.json +0 -0
  79. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_tags_cleanup.json +0 -0
  80. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_tgw_cleanup.json +0 -0
  81. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -0
  82. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -0
  83. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -0
  84. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_ingest_ec2_auto_scaling_groups_cleanup.json +0 -0
  85. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_cleanup.json +0 -0
  86. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_v2_cleanup.json +0 -0
  87. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_ingest_subnets_cleanup.json +0 -0
  88. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_kms_details.json +0 -0
  89. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_post_ingestion_principals_cleanup.json +0 -0
  90. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/aws_s3_details.json +0 -0
  91. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -0
  92. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -0
  93. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -0
  94. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -0
  95. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -0
  96. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -0
  97. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -0
  98. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -0
  99. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -0
  100. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -0
  101. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -0
  102. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -0
  103. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -0
  104. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -0
  105. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/crxcavator_import_cleanup.json +0 -0
  106. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json +0 -0
  107. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/digitalocean_project_cleanup.json +0 -0
  108. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json +0 -0
  109. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_compute_forwarding_rules_cleanup.json +0 -0
  110. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_compute_instance_cleanup.json +0 -0
  111. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -0
  112. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -0
  113. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -0
  114. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -0
  115. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -0
  116. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -0
  117. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -0
  118. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -0
  119. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/github_repos_cleanup.json +0 -0
  120. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/github_users_cleanup.json +0 -0
  121. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -0
  122. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -0
  123. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/jamf_import_computers_cleanup.json +0 -0
  124. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -0
  125. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_import_compartments_cleanup.json +0 -0
  126. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_import_groups_cleanup.json +0 -0
  127. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_import_groups_membership_cleanup.json +0 -0
  128. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_import_policies_cleanup.json +0 -0
  129. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_import_users_cleanup.json +0 -0
  130. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/oci_tenancy_cleanup.json +0 -0
  131. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/okta_groups_cleanup.json +0 -0
  132. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/okta_import_cleanup.json +0 -0
  133. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/cleanup/pagerduty_import_cleanup.json +0 -0
  134. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/scoped_analysis/__init__.py +0 -0
  135. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +0 -0
  136. {cartography-0.91.0 → cartography-0.92.0}/cartography/data/permission_relationships.yaml +0 -0
  137. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/__init__.py +0 -0
  138. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/__main__.py +0 -0
  139. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/add_shortcut.py +0 -0
  140. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/cli.py +0 -0
  141. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/config.py +0 -0
  142. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/detect_deviations.py +0 -0
  143. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/get_states.py +0 -0
  144. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/model.py +0 -0
  145. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/reporter.py +0 -0
  146. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/serializers.py +0 -0
  147. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/shortcut.py +0 -0
  148. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/storage.py +0 -0
  149. {cartography-0.91.0 → cartography-0.92.0}/cartography/driftdetect/util.py +0 -0
  150. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/__init__.py +0 -0
  151. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/cleanupbuilder.py +0 -0
  152. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/context.py +0 -0
  153. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/job.py +0 -0
  154. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/querybuilder.py +0 -0
  155. {cartography-0.91.0 → cartography-0.92.0}/cartography/graph/statement.py +0 -0
  156. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/__init__.py +0 -0
  157. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/analysis.py +0 -0
  158. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/__init__.py +0 -0
  159. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/apigateway.py +0 -0
  160. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/config.py +0 -0
  161. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/dynamodb.py +0 -0
  162. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/__init__.py +0 -0
  163. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/auto_scaling_groups.py +0 -0
  164. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/elastic_ip_addresses.py +0 -0
  165. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/instances.py +0 -0
  166. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/internet_gateways.py +0 -0
  167. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/key_pairs.py +0 -0
  168. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/load_balancer_v2s.py +0 -0
  169. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/load_balancers.py +0 -0
  170. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/network_interfaces.py +0 -0
  171. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/reserved_instances.py +0 -0
  172. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/security_groups.py +0 -0
  173. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/snapshots.py +0 -0
  174. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/subnets.py +0 -0
  175. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/tgw.py +0 -0
  176. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/util.py +0 -0
  177. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/volumes.py +0 -0
  178. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/vpc.py +0 -0
  179. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ec2/vpc_peerings.py +0 -0
  180. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ecr.py +0 -0
  181. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ecs.py +0 -0
  182. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/eks.py +0 -0
  183. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/elasticache.py +0 -0
  184. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/elasticsearch.py +0 -0
  185. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/emr.py +0 -0
  186. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/inspector.py +0 -0
  187. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/kms.py +0 -0
  188. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/lambda_function.py +0 -0
  189. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/organizations.py +0 -0
  190. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/permission_relationships.py +0 -0
  191. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/rds.py +0 -0
  192. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/redshift.py +0 -0
  193. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/resourcegroupstaggingapi.py +0 -0
  194. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/resources.py +0 -0
  195. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/route53.py +0 -0
  196. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/s3.py +0 -0
  197. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/secretsmanager.py +0 -0
  198. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/securityhub.py +0 -0
  199. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/sqs.py +0 -0
  200. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/ssm.py +0 -0
  201. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/util/__init__.py +0 -0
  202. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/util/arns.py +0 -0
  203. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/aws/util/common.py +0 -0
  204. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/__init__.py +0 -0
  205. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/compute.py +0 -0
  206. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/cosmosdb.py +0 -0
  207. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/sql.py +0 -0
  208. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/storage.py +0 -0
  209. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/subscription.py +0 -0
  210. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/tenant.py +0 -0
  211. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/util/__init__.py +0 -0
  212. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/azure/util/credentials.py +0 -0
  213. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/bigfix/__init__.py +0 -0
  214. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/bigfix/computers.py +0 -0
  215. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/create_indexes.py +0 -0
  216. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crowdstrike/__init__.py +0 -0
  217. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crowdstrike/endpoints.py +0 -0
  218. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crowdstrike/spotlight.py +0 -0
  219. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crowdstrike/util.py +0 -0
  220. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crxcavator/__init__.py +0 -0
  221. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/crxcavator/crxcavator.py +0 -0
  222. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/cve/__init__.py +0 -0
  223. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/cve/feed.py +0 -0
  224. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/digitalocean/__init__.py +0 -0
  225. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/digitalocean/compute.py +0 -0
  226. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/digitalocean/management.py +0 -0
  227. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/digitalocean/platform.py +0 -0
  228. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/dns.py +0 -0
  229. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/__init__.py +0 -0
  230. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/api_host.py +0 -0
  231. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/endpoints.py +0 -0
  232. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/groups.py +0 -0
  233. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/phones.py +0 -0
  234. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/tokens.py +0 -0
  235. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/users.py +0 -0
  236. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/duo/web_authn_credentials.py +0 -0
  237. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/__init__.py +0 -0
  238. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/compute.py +0 -0
  239. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/crm.py +0 -0
  240. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/dns.py +0 -0
  241. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/gke.py +0 -0
  242. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gcp/storage.py +0 -0
  243. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/github/__init__.py +0 -0
  244. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/github/repos.py +0 -0
  245. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/github/teams.py +0 -0
  246. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/github/users.py +0 -0
  247. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/github/util.py +0 -0
  248. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gsuite/__init__.py +0 -0
  249. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/gsuite/api.py +0 -0
  250. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/jamf/__init__.py +0 -0
  251. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/jamf/computers.py +0 -0
  252. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/jamf/util.py +0 -0
  253. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kandji/__init__.py +0 -0
  254. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kandji/devices.py +0 -0
  255. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/__init__.py +0 -0
  256. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/namespaces.py +0 -0
  257. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/pods.py +0 -0
  258. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/secrets.py +0 -0
  259. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/services.py +0 -0
  260. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/kubernetes/util.py +0 -0
  261. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/lastpass/__init__.py +0 -0
  262. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/lastpass/users.py +0 -0
  263. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/oci/__init__.py +0 -0
  264. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/oci/iam.py +0 -0
  265. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/oci/organizations.py +0 -0
  266. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/oci/utils.py +0 -0
  267. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/applications.py +0 -0
  268. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/factors.py +0 -0
  269. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/groups.py +0 -0
  270. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/organization.py +0 -0
  271. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/origins.py +0 -0
  272. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/roles.py +0 -0
  273. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/sync_state.py +0 -0
  274. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/users.py +0 -0
  275. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/okta/utils.py +0 -0
  276. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/__init__.py +0 -0
  277. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/escalation_policies.py +0 -0
  278. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/schedules.py +0 -0
  279. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/services.py +0 -0
  280. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/teams.py +0 -0
  281. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/users.py +0 -0
  282. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/pagerduty/vendors.py +0 -0
  283. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/semgrep/__init__.py +0 -0
  284. {cartography-0.91.0 → cartography-0.92.0}/cartography/intel/semgrep/findings.py +0 -0
  285. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/__init__.py +0 -0
  286. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/__init__.py +0 -0
  287. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/dynamodb/__init__.py +0 -0
  288. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/dynamodb/gsi.py +0 -0
  289. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/dynamodb/tables.py +0 -0
  290. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/__init__.py +0 -0
  291. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/images.py +0 -0
  292. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/instances.py +0 -0
  293. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/keypairs.py +0 -0
  294. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/loadbalancerv2.py +0 -0
  295. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/networkinterface_instance.py +0 -0
  296. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/networkinterfaces.py +0 -0
  297. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/privateip_networkinterface.py +0 -0
  298. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/reservations.py +0 -0
  299. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/securitygroup_instance.py +0 -0
  300. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/securitygroup_networkinterface.py +0 -0
  301. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/subnet_networkinterface.py +0 -0
  302. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ec2/volumes.py +0 -0
  303. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/eks/__init__.py +0 -0
  304. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/eks/clusters.py +0 -0
  305. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/emr.py +0 -0
  306. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/inspector/__init__.py +0 -0
  307. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/inspector/findings.py +0 -0
  308. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/inspector/packages.py +0 -0
  309. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ssm/__init__.py +0 -0
  310. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ssm/instance_information.py +0 -0
  311. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/aws/ssm/instance_patch.py +0 -0
  312. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/bigfix/__init__.py +0 -0
  313. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/bigfix/bigfix_computer.py +0 -0
  314. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/bigfix/bigfix_root.py +0 -0
  315. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/core/__init__.py +0 -0
  316. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/core/common.py +0 -0
  317. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/core/nodes.py +0 -0
  318. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/core/relationships.py +0 -0
  319. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/cve/__init__.py +0 -0
  320. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/cve/cve.py +0 -0
  321. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/cve/cve_feed.py +0 -0
  322. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/__init__.py +0 -0
  323. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/api_host.py +0 -0
  324. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/endpoint.py +0 -0
  325. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/group.py +0 -0
  326. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/phone.py +0 -0
  327. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/token.py +0 -0
  328. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/user.py +0 -0
  329. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/duo/web_authn_credential.py +0 -0
  330. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/github/__init__.py +0 -0
  331. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/github/teams.py +0 -0
  332. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/kandji/__init__.py +0 -0
  333. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/kandji/device.py +0 -0
  334. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/kandji/tenant.py +0 -0
  335. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/lastpass/__init__.py +0 -0
  336. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/lastpass/tenant.py +0 -0
  337. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/lastpass/user.py +0 -0
  338. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/semgrep/__init__.py +0 -0
  339. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/semgrep/deployment.py +0 -0
  340. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/semgrep/findings.py +0 -0
  341. {cartography-0.91.0 → cartography-0.92.0}/cartography/models/semgrep/locations.py +0 -0
  342. {cartography-0.91.0 → cartography-0.92.0}/cartography/py.typed +0 -0
  343. {cartography-0.91.0 → cartography-0.92.0}/cartography/stats.py +0 -0
  344. {cartography-0.91.0 → cartography-0.92.0}/cartography/sync.py +0 -0
  345. {cartography-0.91.0 → cartography-0.92.0}/cartography/util.py +0 -0
  346. {cartography-0.91.0 → cartography-0.92.0}/cartography.egg-info/dependency_links.txt +0 -0
  347. {cartography-0.91.0 → cartography-0.92.0}/cartography.egg-info/entry_points.txt +0 -0
  348. {cartography-0.91.0 → cartography-0.92.0}/cartography.egg-info/requires.txt +0 -0
  349. {cartography-0.91.0 → cartography-0.92.0}/cartography.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.91.0
3
+ Version: 0.92.0
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Home-page: https://www.github.com/lyft/cartography
6
6
  Maintainer: Lyft
@@ -200,12 +200,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:KMSGrant) ON (n.lastupdated);
200
200
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.id);
201
201
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.name);
202
202
  CREATE INDEX IF NOT EXISTS FOR (n:LaunchConfiguration) ON (n.lastupdated);
203
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplate) ON (n.id);
204
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplate) ON (n.name);
205
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplate) ON (n.lastupdated);
206
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplateVersion) ON (n.id);
207
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplateVersion) ON (n.name);
208
- CREATE INDEX IF NOT EXISTS FOR (n:LaunchTemplateVersion) ON (n.lastupdated);
209
203
  CREATE INDEX IF NOT EXISTS FOR (n:LoadBalancer) ON (n.dnsname);
210
204
  CREATE INDEX IF NOT EXISTS FOR (n:LoadBalancer) ON (n.id);
211
205
  CREATE INDEX IF NOT EXISTS FOR (n:LoadBalancer) ON (n.lastupdated);
@@ -51,6 +51,7 @@ def get_images(boto3_session: boto3.session.Session, region: str, image_ids: Lis
51
51
  logger.warning(f"Failed retrieve images for region - {region}. Error - {e}")
52
52
  try:
53
53
  if image_ids:
54
+ image_ids = [image_id for image_id in image_ids if image_id is not None]
54
55
  images_in_use = client.describe_images(ImageIds=image_ids)['Images']
55
56
  # Ensure we're not adding duplicates
56
57
  _ids = [image["ImageId"] for image in images]
@@ -0,0 +1,147 @@
1
+ import logging
2
+ from typing import Any
3
+
4
+ import boto3
5
+ import neo4j
6
+
7
+ from .util import get_botocore_config
8
+ from cartography.client.core.tx import load
9
+ from cartography.graph.job import GraphJob
10
+ from cartography.models.aws.ec2.launch_template_versions import LaunchTemplateVersionSchema
11
+ from cartography.models.aws.ec2.launch_templates import LaunchTemplateSchema
12
+ from cartography.util import aws_handle_regions
13
+ from cartography.util import timeit
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ @timeit
19
+ @aws_handle_regions
20
+ def get_launch_templates(boto3_session: boto3.session.Session, region: str) -> list[dict[str, Any]]:
21
+ client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
22
+ paginator = client.get_paginator('describe_launch_templates')
23
+ templates: list[dict[str, Any]] = []
24
+ for page in paginator.paginate():
25
+ templates.extend(page['LaunchTemplates'])
26
+ return templates
27
+
28
+
29
+ def transform_launch_templates(templates: list[dict[str, Any]]) -> list[dict[str, Any]]:
30
+ result: list[dict[str, Any]] = []
31
+ for template in templates:
32
+ current = template.copy()
33
+ current['CreateTime'] = str(int(current['CreateTime'].timestamp()))
34
+ result.append(current)
35
+ return result
36
+
37
+
38
+ @timeit
39
+ def load_launch_templates(
40
+ neo4j_session: neo4j.Session,
41
+ data: list[dict[str, Any]],
42
+ region: str,
43
+ current_aws_account_id: str,
44
+ update_tag: int,
45
+ ) -> None:
46
+ load(
47
+ neo4j_session,
48
+ LaunchTemplateSchema(),
49
+ data,
50
+ Region=region,
51
+ AWS_ID=current_aws_account_id,
52
+ lastupdated=update_tag,
53
+ )
54
+
55
+
56
+ @timeit
57
+ @aws_handle_regions
58
+ def get_launch_template_versions(
59
+ boto3_session: boto3.session.Session,
60
+ templates: list[dict[str, Any]],
61
+ region: str,
62
+ ) -> list[dict[str, Any]]:
63
+ client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
64
+ v_paginator = client.get_paginator('describe_launch_template_versions')
65
+ template_versions = []
66
+ for template in templates:
67
+ for versions in v_paginator.paginate(LaunchTemplateId=template['LaunchTemplateId']):
68
+ template_versions.extend(versions['LaunchTemplateVersions'])
69
+ return template_versions
70
+
71
+
72
+ def transform_launch_template_versions(versions: list[dict[str, Any]]) -> list[dict[str, Any]]:
73
+ result: list[dict[str, Any]] = []
74
+ for version in versions:
75
+ current = version.copy()
76
+
77
+ # Reformat some fields
78
+ current['Id'] = f"{version['LaunchTemplateId']}-{version['VersionNumber']}"
79
+ current['CreateTime'] = str(int(version['CreateTime'].timestamp()))
80
+
81
+ # Handle the nested object returned from boto
82
+ ltd = version['LaunchTemplateData']
83
+ current['KernelId'] = ltd.get('KernelId')
84
+ current['EbsOptimized'] = ltd.get('EbsOptimized')
85
+ current['IamInstanceProfileArn'] = ltd.get('IamInstanceProfileArn')
86
+ current['IamInstanceProfileName'] = ltd.get('IamInstanceProfileName')
87
+ current['ImageId'] = ltd.get('ImageId')
88
+ current['InstanceType'] = ltd.get('InstanceType')
89
+ current['KeyName'] = ltd.get('KeyName')
90
+ current['MonitoringEnabled'] = ltd.get('MonitoringEnabled')
91
+ current['RamdiskId'] = ltd.get('RamdiskId')
92
+ current['DisableApiTermination'] = ltd.get('DisableApiTermination')
93
+ current['InstanceInitiatedShutDownBehavior'] = ltd.get('InstanceInitiatedShutDownBehavior')
94
+ current['SecurityGroupIds'] = ltd.get('SecurityGroupIds')
95
+ current['SecurityGroups'] = ltd.get('SecurityGroups')
96
+ result.append(current)
97
+ return result
98
+
99
+
100
+ @timeit
101
+ def load_launch_template_versions(
102
+ neo4j_session: neo4j.Session,
103
+ data: list[dict[str, Any]],
104
+ region: str,
105
+ current_aws_account_id: str,
106
+ update_tag: int,
107
+ ) -> None:
108
+ load(
109
+ neo4j_session,
110
+ LaunchTemplateVersionSchema(),
111
+ data,
112
+ Region=region,
113
+ AWS_ID=current_aws_account_id,
114
+ lastupdated=update_tag,
115
+ )
116
+
117
+
118
+ @timeit
119
+ def cleanup(neo4j_session: neo4j.Session, common_job_parameters: dict[str, Any]) -> None:
120
+ logger.info("Running launch template cleanup job.")
121
+ cleanup_job = GraphJob.from_node_schema(LaunchTemplateSchema(), common_job_parameters)
122
+ cleanup_job.run(neo4j_session)
123
+
124
+ cleanup_job = GraphJob.from_node_schema(LaunchTemplateVersionSchema(), common_job_parameters)
125
+ cleanup_job.run(neo4j_session)
126
+
127
+
128
+ @timeit
129
+ def sync_ec2_launch_templates(
130
+ neo4j_session: neo4j.Session,
131
+ boto3_session: boto3.session.Session,
132
+ regions: list[str],
133
+ current_aws_account_id: str,
134
+ update_tag: int,
135
+ common_job_parameters: dict[str, Any],
136
+ ) -> None:
137
+ for region in regions:
138
+ logger.info(f"Syncing launch templates for region '{region}' in account '{current_aws_account_id}'.")
139
+ templates = get_launch_templates(boto3_session, region)
140
+ templates = transform_launch_templates(templates)
141
+ load_launch_templates(neo4j_session, templates, region, current_aws_account_id, update_tag)
142
+
143
+ versions = get_launch_template_versions(boto3_session, templates, region)
144
+ versions = transform_launch_template_versions(versions)
145
+ load_launch_template_versions(neo4j_session, versions, region, current_aws_account_id, update_tag)
146
+
147
+ cleanup(neo4j_session, common_job_parameters)
@@ -227,6 +227,7 @@ def get_account_access_key_data(boto3_session: boto3.session.Session, username:
227
227
  logger.warning(
228
228
  f"Could not get access key for user {username} due to NoSuchEntityException; skipping.",
229
229
  )
230
+ return access_keys
230
231
  for access_key in access_keys['AccessKeyMetadata']:
231
232
  access_key_id = access_key['AccessKeyId']
232
233
  last_used_info = client.get_access_key_last_used(
@@ -68,7 +68,7 @@ def start_okta_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
68
68
  applications.sync_okta_applications(neo4j_session, config.okta_org_id, config.update_tag, config.okta_api_key)
69
69
  factors.sync_users_factors(neo4j_session, config.okta_org_id, config.update_tag, config.okta_api_key, state)
70
70
  origins.sync_trusted_origins(neo4j_session, config.okta_org_id, config.update_tag, config.okta_api_key)
71
- awssaml.sync_okta_aws_saml(neo4j_session, config.okta_saml_role_regex, config.update_tag)
71
+ awssaml.sync_okta_aws_saml(neo4j_session, config.okta_saml_role_regex, config.update_tag, config.okta_org_id)
72
72
 
73
73
  # need creds with permission
74
74
  # soft fail as some won't be able to get such high priv token
@@ -0,0 +1,237 @@
1
+ # Okta intel module - AWS SAML
2
+ import logging
3
+ import re
4
+ from collections import namedtuple
5
+ from typing import Dict
6
+ from typing import List
7
+ from typing import Optional
8
+
9
+ import neo4j
10
+
11
+ from cartography.client.core.tx import read_list_of_dicts_tx
12
+ from cartography.client.core.tx import read_single_value_tx
13
+ from cartography.util import timeit
14
+
15
+
16
+ AccountRole = namedtuple('AccountRole', ['account_id', 'role_name'])
17
+ OktaGroup = namedtuple('OktaGroup', ['group_id', 'group_name'])
18
+ GroupRole = namedtuple('GroupRole', ['okta_group_id', 'aws_role_arn'])
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+
23
+ def _parse_regex(regex_string: str) -> str:
24
+ return regex_string.replace("{{accountid}}", "P<accountid>").replace("{{role}}", "P<role>").strip()
25
+
26
+
27
+ def _parse_okta_group_name(okta_group_name: str, mapping_regex: str) -> AccountRole | None:
28
+ """
29
+ Extract AWS account id and AWS role name from the given Okta group name using the given mapping regex.
30
+ """
31
+ regex = _parse_regex(mapping_regex)
32
+ matches = re.search(regex, okta_group_name)
33
+ if matches:
34
+ account_id = matches.group("accountid")
35
+ role_name = matches.group("role")
36
+ return AccountRole(account_id, role_name)
37
+ return None
38
+
39
+
40
+ def transform_okta_group_to_aws_role(group_id: str, group_name: str, mapping_regex: str) -> Optional[Dict]:
41
+ account_role = _parse_okta_group_name(group_name, mapping_regex)
42
+ if account_role:
43
+ role_arn = f"arn:aws:iam::{account_role.account_id}:role/{account_role.role_name}"
44
+ return {"groupid": group_id, "role": role_arn}
45
+ return None
46
+
47
+
48
+ @timeit
49
+ def query_for_okta_to_aws_role_mapping(neo4j_session: neo4j.Session, mapping_regex: str) -> List[Dict]:
50
+ """
51
+ Query the graph for all groups associated with the amazon_aws application and map them to AWSRoles
52
+ :param neo4j_session: session from the Neo4j server
53
+ :param mapping_regex: the regex used by the organization to map groups to aws roles
54
+ """
55
+ query = "MATCH (app:OktaApplication{name:'amazon_aws'})--(group:OktaGroup) return group.id, group.name"
56
+
57
+ group_to_role_mapping: List[Dict] = []
58
+ has_results = False
59
+ results = neo4j_session.run(query)
60
+
61
+ for res in results:
62
+ has_results = True
63
+ # input: okta group id, okta group name. output: aws role arn.
64
+ mapping = transform_okta_group_to_aws_role(res["group.id"], res["group.name"], mapping_regex)
65
+ if mapping:
66
+ group_to_role_mapping.append(mapping)
67
+
68
+ if has_results and not group_to_role_mapping:
69
+ logger.warn(
70
+ "AWS Okta Application present, but no mappings were found. "
71
+ "Please verify the mapping regex is correct",
72
+ )
73
+
74
+ return group_to_role_mapping
75
+
76
+
77
+ @timeit
78
+ def _load_okta_group_to_aws_roles(
79
+ neo4j_session: neo4j.Session, group_to_role: List[Dict],
80
+ okta_update_tag: int,
81
+ ) -> None:
82
+ """
83
+ Add the ALLOWED_BY relationship between OktaGroups and the AWSRoles they enable
84
+ :param neo4j_session: session with the Neo4j server
85
+ :param group_to_role: the mapping between OktaGroups and the AWSRoles they allow access to
86
+ :param okta_update_tag: The timestamp value to set our new Neo4j resources with
87
+ :return: Nothing
88
+ """
89
+ ingest_statement = """
90
+
91
+ UNWIND $GROUP_TO_ROLE as app_data
92
+ MATCH (role:AWSRole{arn: app_data.role})
93
+ MATCH (group:OktaGroup{id: app_data.groupid})
94
+ MERGE (role)<-[r:ALLOWED_BY]-(group)
95
+ ON CREATE SET r.firstseen = timestamp()
96
+ SET r.lastupdated = $okta_update_tag
97
+ """
98
+
99
+ neo4j_session.run(
100
+ ingest_statement,
101
+ GROUP_TO_ROLE=group_to_role,
102
+ okta_update_tag=okta_update_tag,
103
+ )
104
+
105
+
106
+ @timeit
107
+ def _load_human_can_assume_role(neo4j_session: neo4j.Session, okta_update_tag: int) -> None:
108
+ """
109
+ Add the CAN_ASSUME_ROLE relationship between Humans and the AWSRoles they can assume
110
+ :param neo4j_session: session with the Neo4j server
111
+ :param okta_update_tag: The timestamp value to set our new Neo4j resources with
112
+ :return: Nothing
113
+ """
114
+ ingest_statement = """
115
+ MATCH (role:AWSRole)<-[:ALLOWED_BY]-(:OktaGroup)<-[:MEMBER_OF_OKTA_GROUP]-(:OktaUser)-[:IDENTITY_OKTA]-(human:Human)
116
+ MERGE (human)-[r:CAN_ASSUME_ROLE]->(role)
117
+ SET r.lastupdated = $okta_update_tag
118
+ """
119
+
120
+ neo4j_session.run(
121
+ ingest_statement,
122
+ okta_update_tag=okta_update_tag,
123
+ )
124
+
125
+
126
+ def get_awssso_okta_groups(neo4j_session: neo4j.Session, okta_org_id: str) -> list[OktaGroup]:
127
+ """
128
+ Return list of all Okta group ids in the current Okta organization tied to Okta Applications with name
129
+ "amazon_aws_sso".
130
+ """
131
+ query = """
132
+ MATCH (g:OktaGroup)-[:APPLICATION]->(a:OktaApplication{name:"amazon_aws_sso"})
133
+ <-[:RESOURCE]-(:OktaOrganization{id: $okta_org_id})
134
+ RETURN g.id as group_id, g.name as group_name
135
+ """
136
+ result = neo4j_session.read_transaction(read_list_of_dicts_tx, query, okta_org_id=okta_org_id)
137
+ return [OktaGroup(group_name=og['group_name'], group_id=og['group_id']) for og in result]
138
+
139
+
140
+ def get_awssso_role_arn(account_id: str, role_hint: str, neo4j_session: neo4j.Session) -> str | None:
141
+ """
142
+ Attempt to return the AWS role ARN for the given AWS account ID and role hint string.
143
+ This function exists to handle that AWS SSO roles have a 'AWSReservedSSO' prefix and a hashed suffix
144
+ Input:
145
+ - account_id: AWS account ID
146
+ - role_hint (str): The `AccountRole.role_name` returned by _parse_okta_group_name(). This is the part of the Okta
147
+ group name that refers to the AWS role name.
148
+ Output:
149
+ - If we are able to find it, returns the matching AWS role ARN.
150
+ """
151
+ query = """
152
+ MATCH (:AWSAccount{id:$account_id})-[:RESOURCE]->(role:AWSRole{path:"/aws-reserved/sso.amazonaws.com/"})
153
+ WHERE SPLIT(role.name, '_')[1..-1][0] = $role_hint
154
+ RETURN role.arn AS role_arn
155
+ """
156
+ return neo4j_session.read_transaction(read_single_value_tx, query, account_id=account_id, role_hint=role_hint)
157
+
158
+
159
+ def query_for_okta_to_awssso_role_mapping(
160
+ neo4j_session: neo4j.Session,
161
+ awssso_okta_groups: list[OktaGroup],
162
+ mapping_regex: str,
163
+ ) -> list[GroupRole]:
164
+ """
165
+ Input:
166
+ - neo4j session
167
+ - str list of Okta group names
168
+ - str regex that tells us how to find the AWS role name and account when given an Okta group name
169
+ Output:
170
+ - list of OktaGroup id to AWSRole arn pairs.
171
+ """
172
+ result = []
173
+ for group in awssso_okta_groups:
174
+ account_role = _parse_okta_group_name(group.group_name, mapping_regex)
175
+ if not account_role:
176
+ logger.info(f"Okta group {group.group_name} has no associated AWS SSO role")
177
+ continue
178
+
179
+ role_arn = get_awssso_role_arn(account_role.account_id, account_role.role_name, neo4j_session)
180
+ if role_arn:
181
+ result.append(GroupRole(group.group_id, role_arn))
182
+ return result
183
+
184
+
185
+ def _load_awssso_tx(tx: neo4j.Transaction, group_to_role: list[GroupRole], okta_update_tag: int) -> None:
186
+ ingest_statement = """
187
+ UNWIND $GROUP_TO_ROLE as app_data
188
+ MATCH (role:AWSRole{arn: app_data.aws_role_arn})
189
+ MATCH (group:OktaGroup{id: app_data.okta_group_id})
190
+ MERGE (role)<-[r:ALLOWED_BY]-(group)
191
+ ON CREATE SET r.firstseen = timestamp()
192
+ SET r.lastupdated = $okta_update_tag
193
+ """
194
+ tx.run(
195
+ ingest_statement,
196
+ GROUP_TO_ROLE=[g._asdict() for g in group_to_role],
197
+ okta_update_tag=okta_update_tag,
198
+ )
199
+
200
+
201
+ def _load_okta_group_to_awssso_roles(
202
+ neo4j_session: neo4j.Session,
203
+ group_to_role: list[GroupRole],
204
+ okta_update_tag: int,
205
+ ) -> None:
206
+ neo4j_session.write_transaction(_load_awssso_tx, group_to_role, okta_update_tag)
207
+
208
+
209
+ @timeit
210
+ def sync_okta_aws_saml(
211
+ neo4j_session: neo4j.Session,
212
+ mapping_regex: str,
213
+ okta_update_tag: int,
214
+ okta_org_id: str,
215
+ ) -> None:
216
+ """
217
+ Sync okta integration with saml. This will link OktaGroups to the AWSRoles they enable.
218
+ This is for people who use the okta saml provider for AWS
219
+ https://saml-doc.okta.com/SAML_Docs/How-to-Configure-SAML-2.0-for-Amazon-Web-Service#scenarioC
220
+ If an organization does not use okta as a SAML provider for AWS the query will not return any results
221
+ and nothing will be added to the graph
222
+ :param mapping_regex: session from the Neo4j server
223
+ :param okta_org_id: okta organization id
224
+ :param okta_update_tag: The timestamp value to set our new Neo4j resources with
225
+ :param okta_api_key: Okta api key
226
+ :return: Nothing
227
+ """
228
+ logger.info("Syncing Okta SAML Integration")
229
+
230
+ # Query for the aws application and its associated groups
231
+ group_to_role_mapping = query_for_okta_to_aws_role_mapping(neo4j_session, mapping_regex)
232
+ _load_okta_group_to_aws_roles(neo4j_session, group_to_role_mapping, okta_update_tag)
233
+ _load_human_can_assume_role(neo4j_session, okta_update_tag)
234
+
235
+ sso_okta_groups = get_awssso_okta_groups(neo4j_session, okta_org_id)
236
+ group_to_ssorole_mapping = query_for_okta_to_awssso_role_mapping(neo4j_session, sso_okta_groups, mapping_regex)
237
+ _load_okta_group_to_awssso_roles(neo4j_session, group_to_ssorole_mapping, okta_update_tag)
@@ -0,0 +1,81 @@
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 LaunchTemplateVersionNodeProperties(CartographyNodeProperties):
16
+ id: PropertyRef = PropertyRef('Id')
17
+ name: PropertyRef = PropertyRef('LaunchTemplateName')
18
+ create_time: PropertyRef = PropertyRef('CreateTime')
19
+ created_by: PropertyRef = PropertyRef('CreatedBy')
20
+ default_version: PropertyRef = PropertyRef('DefaultVersion')
21
+ version_number: PropertyRef = PropertyRef('VersionNumber')
22
+ version_description: PropertyRef = PropertyRef('VersionDescription')
23
+ kernel_id: PropertyRef = PropertyRef('KernelId')
24
+ ebs_optimized: PropertyRef = PropertyRef('EbsOptimized')
25
+ iam_instance_profile_arn: PropertyRef = PropertyRef('IamInstanceProfileArn')
26
+ iam_instance_profile_name: PropertyRef = PropertyRef('IamInstanceProfileName')
27
+ image_id: PropertyRef = PropertyRef('ImageId')
28
+ instance_type: PropertyRef = PropertyRef('InstanceType')
29
+ key_name: PropertyRef = PropertyRef('KeyName')
30
+ monitoring_enabled: PropertyRef = PropertyRef('MonitoringEnabled')
31
+ ramdisk_id: PropertyRef = PropertyRef('RamdiskId')
32
+ disable_api_termination: PropertyRef = PropertyRef('DisableApiTermination')
33
+ instance_initiated_shutdown_behavior: PropertyRef = PropertyRef('InstanceInitiatedShutdownBehavior')
34
+ security_group_ids: PropertyRef = PropertyRef('SecurityGroupIds')
35
+ security_groups: PropertyRef = PropertyRef('SecurityGroups')
36
+ region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
37
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
38
+
39
+
40
+ @dataclass(frozen=True)
41
+ class LaunchTemplateVersionToAwsAccountRelProperties(CartographyRelProperties):
42
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
43
+
44
+
45
+ @dataclass(frozen=True)
46
+ class LaunchTemplateVersionToAWSAccount(CartographyRelSchema):
47
+ target_node_label: str = 'AWSAccount'
48
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
49
+ {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
50
+ )
51
+ direction: LinkDirection = LinkDirection.INWARD
52
+ rel_label: str = "RESOURCE"
53
+ properties: LaunchTemplateVersionToAwsAccountRelProperties = LaunchTemplateVersionToAwsAccountRelProperties()
54
+
55
+
56
+ @dataclass(frozen=True)
57
+ class LaunchTemplateVersionToLTRelProperties(CartographyRelProperties):
58
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
59
+
60
+
61
+ @dataclass(frozen=True)
62
+ class LaunchTemplateVersionToLT(CartographyRelSchema):
63
+ target_node_label: str = 'LaunchTemplate'
64
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
65
+ {'id': PropertyRef('LaunchTemplateId')},
66
+ )
67
+ direction: LinkDirection = LinkDirection.INWARD
68
+ rel_label: str = "VERSION"
69
+ properties: LaunchTemplateVersionToLTRelProperties = LaunchTemplateVersionToLTRelProperties()
70
+
71
+
72
+ @dataclass(frozen=True)
73
+ class LaunchTemplateVersionSchema(CartographyNodeSchema):
74
+ label: str = 'LaunchTemplateVersion'
75
+ properties: LaunchTemplateVersionNodeProperties = LaunchTemplateVersionNodeProperties()
76
+ sub_resource_relationship: LaunchTemplateVersionToAWSAccount = LaunchTemplateVersionToAWSAccount()
77
+ other_relationships: OtherRelationships = OtherRelationships(
78
+ [
79
+ LaunchTemplateVersionToLT(),
80
+ ],
81
+ )
@@ -0,0 +1,46 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+ from cartography.models.core.relationships import CartographyRelProperties
7
+ from cartography.models.core.relationships import CartographyRelSchema
8
+ from cartography.models.core.relationships import LinkDirection
9
+ from cartography.models.core.relationships import make_target_node_matcher
10
+ from cartography.models.core.relationships import TargetNodeMatcher
11
+
12
+
13
+ @dataclass(frozen=True)
14
+ class LaunchTemplateNodeProperties(CartographyNodeProperties):
15
+ id: PropertyRef = PropertyRef('LaunchTemplateId')
16
+ launch_template_id: PropertyRef = PropertyRef('LaunchTemplateId')
17
+ name: PropertyRef = PropertyRef('LaunchTemplateName')
18
+ create_time: PropertyRef = PropertyRef('CreateTime')
19
+ created_by: PropertyRef = PropertyRef('CreatedBy')
20
+ default_version_number: PropertyRef = PropertyRef('DefaultVersionNumber')
21
+ latest_version_number: PropertyRef = PropertyRef('LatestVersionNumber')
22
+ region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
23
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
24
+
25
+
26
+ @dataclass(frozen=True)
27
+ class LaunchTemplateToAwsAccountRelProperties(CartographyRelProperties):
28
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
29
+
30
+
31
+ @dataclass(frozen=True)
32
+ class LaunchTemplateToAWSAccount(CartographyRelSchema):
33
+ target_node_label: str = 'AWSAccount'
34
+ target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
35
+ {'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
36
+ )
37
+ direction: LinkDirection = LinkDirection.INWARD
38
+ rel_label: str = "RESOURCE"
39
+ properties: LaunchTemplateToAwsAccountRelProperties = LaunchTemplateToAwsAccountRelProperties()
40
+
41
+
42
+ @dataclass(frozen=True)
43
+ class LaunchTemplateSchema(CartographyNodeSchema):
44
+ label: str = 'LaunchTemplate'
45
+ properties: LaunchTemplateNodeProperties = LaunchTemplateNodeProperties()
46
+ sub_resource_relationship: LaunchTemplateToAWSAccount = LaunchTemplateToAWSAccount()
@@ -15,7 +15,7 @@ from cartography.models.core.relationships import TargetNodeMatcher
15
15
  class EC2SubnetInstanceNodeProperties(CartographyNodeProperties):
16
16
  # arn: PropertyRef = PropertyRef('Arn', extra_index=True) TODO use arn; issue #1024
17
17
  id: PropertyRef = PropertyRef('SubnetId')
18
- subnet_id: PropertyRef = PropertyRef('SubnetId', extra_index=True)
18
+ subnetid: PropertyRef = PropertyRef('SubnetId', extra_index=True)
19
19
  region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
20
20
  lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
21
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.91.0
3
+ Version: 0.92.0
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Home-page: https://www.github.com/lyft/cartography
6
6
  Maintainer: Lyft
@@ -47,7 +47,6 @@ cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json
47
47
  cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json
48
48
  cartography/data/jobs/cleanup/aws_import_config_cleanup.json
49
49
  cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json
50
- cartography/data/jobs/cleanup/aws_import_ec2_launch_templates_cleanup.json
51
50
  cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json
52
51
  cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json
53
52
  cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json
@@ -294,6 +293,8 @@ cartography/models/aws/ec2/__init__.py
294
293
  cartography/models/aws/ec2/images.py
295
294
  cartography/models/aws/ec2/instances.py
296
295
  cartography/models/aws/ec2/keypairs.py
296
+ cartography/models/aws/ec2/launch_template_versions.py
297
+ cartography/models/aws/ec2/launch_templates.py
297
298
  cartography/models/aws/ec2/loadbalancerv2.py
298
299
  cartography/models/aws/ec2/networkinterface_instance.py
299
300
  cartography/models/aws/ec2/networkinterfaces.py
@@ -68,6 +68,11 @@ ignore_errors = true
68
68
  [coverage:report]
69
69
  fail_under = 30
70
70
 
71
+ [tool:pytest]
72
+ addopts = --cov-config=setup.cfg --no-cov-on-fail --cov-report=term-missing:skip-covered --strict-markers
73
+ markers =
74
+ flaky: mark test as flaky
75
+
71
76
  [egg_info]
72
77
  tag_build =
73
78
  tag_date = 0
@@ -1,7 +1,7 @@
1
1
  from setuptools import find_packages
2
2
  from setuptools import setup
3
3
 
4
- __version__ = '0.91.0'
4
+ __version__ = '0.92.0'
5
5
 
6
6
 
7
7
  setup(
@@ -1,13 +0,0 @@
1
- {
2
- "statements": [{
3
- "query": "MATCH (n:LaunchTemplateVersion)<-[:VERSION]-(:LaunchTemplate)<-[:RESOURCE]-(:AWSAccount{id: $AWS_ID}) WHERE n.lastupdated <> $UPDATE_TAG WITH n LIMIT $LIMIT_SIZE DETACH DELETE (n)",
4
- "iterative": true,
5
- "iterationsize": 100
6
- },
7
- {
8
- "query": "MATCH (n:LaunchTemplate)<-[:RESOURCE]-(:AWSAccount{id: $AWS_ID}) WHERE n.lastupdated <> $UPDATE_TAG WITH n LIMIT $LIMIT_SIZE DETACH DELETE (n)",
9
- "iterative": true,
10
- "iterationsize": 100
11
- }],
12
- "name": "cleanup LaunchTemplate"
13
- }