cartography 0.91.0__tar.gz → 0.92.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 (346) hide show
  1. {cartography-0.91.0/cartography.egg-info → cartography-0.92.0rc1}/PKG-INFO +1 -1
  2. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/__init__.py +1 -1
  3. cartography-0.92.0rc1/cartography/intel/okta/awssaml.py +237 -0
  4. {cartography-0.91.0 → cartography-0.92.0rc1/cartography.egg-info}/PKG-INFO +1 -1
  5. {cartography-0.91.0 → cartography-0.92.0rc1}/setup.py +1 -1
  6. cartography-0.91.0/cartography/intel/okta/awssaml.py +0 -129
  7. {cartography-0.91.0 → cartography-0.92.0rc1}/LICENSE +0 -0
  8. {cartography-0.91.0 → cartography-0.92.0rc1}/NOTICE +0 -0
  9. {cartography-0.91.0 → cartography-0.92.0rc1}/README.md +0 -0
  10. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/__init__.py +0 -0
  11. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/__main__.py +0 -0
  12. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/cli.py +0 -0
  13. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/client/__init__.py +0 -0
  14. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/client/aws/__init__.py +0 -0
  15. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/client/aws/iam.py +0 -0
  16. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/client/core/__init__.py +0 -0
  17. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/client/core/tx.py +0 -0
  18. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/config.py +0 -0
  19. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/__init__.py +0 -0
  20. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/indexes.cypher +0 -0
  21. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/__init__.py +0 -0
  22. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/__init__.py +0 -0
  23. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +0 -0
  24. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -0
  25. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -0
  26. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +0 -0
  27. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_eks_asset_exposure.json +0 -0
  28. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_foreign_accounts.json +0 -0
  29. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_lambda_ecr.json +0 -0
  30. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/aws_s3acl_analysis.json +0 -0
  31. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +0 -0
  32. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/gcp_gke_asset_exposure.json +0 -0
  33. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/gcp_gke_basic_auth.json +0 -0
  34. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/analysis/gsuite_human_link.json +0 -0
  35. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/__init__.py +0 -0
  36. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_account_cleanup.json +0 -0
  37. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -0
  38. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -0
  39. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -0
  40. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -0
  41. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_config_cleanup.json +0 -0
  42. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json +0 -0
  43. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_launch_templates_cleanup.json +0 -0
  44. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -0
  45. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json +0 -0
  46. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json +0 -0
  47. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_elastic_ip_addresses_cleanup.json +0 -0
  48. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_elasticache_cleanup.json +0 -0
  49. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_es_cleanup.json +0 -0
  50. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -0
  51. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_membership_cleanup.json +0 -0
  52. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_policy_cleanup.json +0 -0
  53. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_internet_gateways_cleanup.json +0 -0
  54. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_kms_cleanup.json +0 -0
  55. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -0
  56. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -0
  57. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -0
  58. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -0
  59. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -0
  60. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_redshift_clusters_cleanup.json +0 -0
  61. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_reserved_instances_cleanup.json +0 -0
  62. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -0
  63. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_policy_cleanup.json +0 -0
  64. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_acl_cleanup.json +0 -0
  65. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_buckets_cleanup.json +0 -0
  66. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -0
  67. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_securityhub_cleanup.json +0 -0
  68. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -0
  69. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_sqs_queues_cleanup.json +0 -0
  70. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_tags_cleanup.json +0 -0
  71. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_tgw_cleanup.json +0 -0
  72. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -0
  73. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -0
  74. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -0
  75. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_ingest_ec2_auto_scaling_groups_cleanup.json +0 -0
  76. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_cleanup.json +0 -0
  77. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_v2_cleanup.json +0 -0
  78. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_ingest_subnets_cleanup.json +0 -0
  79. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_kms_details.json +0 -0
  80. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_post_ingestion_principals_cleanup.json +0 -0
  81. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/aws_s3_details.json +0 -0
  82. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -0
  83. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -0
  84. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -0
  85. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -0
  86. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -0
  87. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -0
  88. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -0
  89. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -0
  90. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -0
  91. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -0
  92. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -0
  93. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -0
  94. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -0
  95. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -0
  96. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/crxcavator_import_cleanup.json +0 -0
  97. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json +0 -0
  98. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/digitalocean_project_cleanup.json +0 -0
  99. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json +0 -0
  100. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_compute_forwarding_rules_cleanup.json +0 -0
  101. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_compute_instance_cleanup.json +0 -0
  102. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -0
  103. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -0
  104. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -0
  105. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -0
  106. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -0
  107. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -0
  108. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -0
  109. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -0
  110. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/github_repos_cleanup.json +0 -0
  111. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/github_users_cleanup.json +0 -0
  112. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -0
  113. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -0
  114. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/jamf_import_computers_cleanup.json +0 -0
  115. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -0
  116. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_import_compartments_cleanup.json +0 -0
  117. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_cleanup.json +0 -0
  118. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_membership_cleanup.json +0 -0
  119. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_import_policies_cleanup.json +0 -0
  120. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_import_users_cleanup.json +0 -0
  121. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/oci_tenancy_cleanup.json +0 -0
  122. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/okta_groups_cleanup.json +0 -0
  123. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/okta_import_cleanup.json +0 -0
  124. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/cleanup/pagerduty_import_cleanup.json +0 -0
  125. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/scoped_analysis/__init__.py +0 -0
  126. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +0 -0
  127. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/data/permission_relationships.yaml +0 -0
  128. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/__init__.py +0 -0
  129. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/__main__.py +0 -0
  130. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/add_shortcut.py +0 -0
  131. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/cli.py +0 -0
  132. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/config.py +0 -0
  133. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/detect_deviations.py +0 -0
  134. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/get_states.py +0 -0
  135. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/model.py +0 -0
  136. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/reporter.py +0 -0
  137. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/serializers.py +0 -0
  138. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/shortcut.py +0 -0
  139. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/storage.py +0 -0
  140. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/driftdetect/util.py +0 -0
  141. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/__init__.py +0 -0
  142. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/cleanupbuilder.py +0 -0
  143. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/context.py +0 -0
  144. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/job.py +0 -0
  145. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/querybuilder.py +0 -0
  146. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/graph/statement.py +0 -0
  147. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/__init__.py +0 -0
  148. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/analysis.py +0 -0
  149. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/__init__.py +0 -0
  150. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/apigateway.py +0 -0
  151. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/config.py +0 -0
  152. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/dynamodb.py +0 -0
  153. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/__init__.py +0 -0
  154. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/auto_scaling_groups.py +0 -0
  155. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/elastic_ip_addresses.py +0 -0
  156. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/images.py +0 -0
  157. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/instances.py +0 -0
  158. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/internet_gateways.py +0 -0
  159. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/key_pairs.py +0 -0
  160. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/launch_templates.py +0 -0
  161. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/load_balancer_v2s.py +0 -0
  162. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/load_balancers.py +0 -0
  163. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/network_interfaces.py +0 -0
  164. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/reserved_instances.py +0 -0
  165. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/security_groups.py +0 -0
  166. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/snapshots.py +0 -0
  167. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/subnets.py +0 -0
  168. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/tgw.py +0 -0
  169. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/util.py +0 -0
  170. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/volumes.py +0 -0
  171. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/vpc.py +0 -0
  172. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ec2/vpc_peerings.py +0 -0
  173. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ecr.py +0 -0
  174. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ecs.py +0 -0
  175. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/eks.py +0 -0
  176. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/elasticache.py +0 -0
  177. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/elasticsearch.py +0 -0
  178. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/emr.py +0 -0
  179. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/iam.py +0 -0
  180. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/inspector.py +0 -0
  181. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/kms.py +0 -0
  182. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/lambda_function.py +0 -0
  183. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/organizations.py +0 -0
  184. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/permission_relationships.py +0 -0
  185. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/rds.py +0 -0
  186. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/redshift.py +0 -0
  187. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/resourcegroupstaggingapi.py +0 -0
  188. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/resources.py +0 -0
  189. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/route53.py +0 -0
  190. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/s3.py +0 -0
  191. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/secretsmanager.py +0 -0
  192. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/securityhub.py +0 -0
  193. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/sqs.py +0 -0
  194. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/ssm.py +0 -0
  195. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/util/__init__.py +0 -0
  196. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/util/arns.py +0 -0
  197. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/aws/util/common.py +0 -0
  198. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/__init__.py +0 -0
  199. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/compute.py +0 -0
  200. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/cosmosdb.py +0 -0
  201. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/sql.py +0 -0
  202. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/storage.py +0 -0
  203. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/subscription.py +0 -0
  204. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/tenant.py +0 -0
  205. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/util/__init__.py +0 -0
  206. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/azure/util/credentials.py +0 -0
  207. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/bigfix/__init__.py +0 -0
  208. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/bigfix/computers.py +0 -0
  209. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/create_indexes.py +0 -0
  210. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crowdstrike/__init__.py +0 -0
  211. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crowdstrike/endpoints.py +0 -0
  212. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crowdstrike/spotlight.py +0 -0
  213. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crowdstrike/util.py +0 -0
  214. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crxcavator/__init__.py +0 -0
  215. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/crxcavator/crxcavator.py +0 -0
  216. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/cve/__init__.py +0 -0
  217. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/cve/feed.py +0 -0
  218. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/digitalocean/__init__.py +0 -0
  219. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/digitalocean/compute.py +0 -0
  220. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/digitalocean/management.py +0 -0
  221. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/digitalocean/platform.py +0 -0
  222. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/dns.py +0 -0
  223. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/__init__.py +0 -0
  224. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/api_host.py +0 -0
  225. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/endpoints.py +0 -0
  226. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/groups.py +0 -0
  227. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/phones.py +0 -0
  228. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/tokens.py +0 -0
  229. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/users.py +0 -0
  230. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/duo/web_authn_credentials.py +0 -0
  231. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/__init__.py +0 -0
  232. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/compute.py +0 -0
  233. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/crm.py +0 -0
  234. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/dns.py +0 -0
  235. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/gke.py +0 -0
  236. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gcp/storage.py +0 -0
  237. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/github/__init__.py +0 -0
  238. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/github/repos.py +0 -0
  239. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/github/teams.py +0 -0
  240. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/github/users.py +0 -0
  241. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/github/util.py +0 -0
  242. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gsuite/__init__.py +0 -0
  243. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/gsuite/api.py +0 -0
  244. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/jamf/__init__.py +0 -0
  245. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/jamf/computers.py +0 -0
  246. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/jamf/util.py +0 -0
  247. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kandji/__init__.py +0 -0
  248. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kandji/devices.py +0 -0
  249. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/__init__.py +0 -0
  250. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/namespaces.py +0 -0
  251. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/pods.py +0 -0
  252. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/secrets.py +0 -0
  253. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/services.py +0 -0
  254. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/kubernetes/util.py +0 -0
  255. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/lastpass/__init__.py +0 -0
  256. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/lastpass/users.py +0 -0
  257. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/oci/__init__.py +0 -0
  258. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/oci/iam.py +0 -0
  259. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/oci/organizations.py +0 -0
  260. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/oci/utils.py +0 -0
  261. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/applications.py +0 -0
  262. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/factors.py +0 -0
  263. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/groups.py +0 -0
  264. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/organization.py +0 -0
  265. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/origins.py +0 -0
  266. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/roles.py +0 -0
  267. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/sync_state.py +0 -0
  268. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/users.py +0 -0
  269. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/okta/utils.py +0 -0
  270. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/__init__.py +0 -0
  271. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/escalation_policies.py +0 -0
  272. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/schedules.py +0 -0
  273. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/services.py +0 -0
  274. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/teams.py +0 -0
  275. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/users.py +0 -0
  276. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/pagerduty/vendors.py +0 -0
  277. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/semgrep/__init__.py +0 -0
  278. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/intel/semgrep/findings.py +0 -0
  279. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/__init__.py +0 -0
  280. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/__init__.py +0 -0
  281. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/dynamodb/__init__.py +0 -0
  282. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/dynamodb/gsi.py +0 -0
  283. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/dynamodb/tables.py +0 -0
  284. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/__init__.py +0 -0
  285. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/images.py +0 -0
  286. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/instances.py +0 -0
  287. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/keypairs.py +0 -0
  288. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/loadbalancerv2.py +0 -0
  289. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/networkinterface_instance.py +0 -0
  290. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/networkinterfaces.py +0 -0
  291. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/privateip_networkinterface.py +0 -0
  292. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/reservations.py +0 -0
  293. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/securitygroup_instance.py +0 -0
  294. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/securitygroup_networkinterface.py +0 -0
  295. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/subnet_instance.py +0 -0
  296. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/subnet_networkinterface.py +0 -0
  297. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ec2/volumes.py +0 -0
  298. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/eks/__init__.py +0 -0
  299. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/eks/clusters.py +0 -0
  300. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/emr.py +0 -0
  301. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/inspector/__init__.py +0 -0
  302. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/inspector/findings.py +0 -0
  303. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/inspector/packages.py +0 -0
  304. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ssm/__init__.py +0 -0
  305. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ssm/instance_information.py +0 -0
  306. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/aws/ssm/instance_patch.py +0 -0
  307. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/bigfix/__init__.py +0 -0
  308. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/bigfix/bigfix_computer.py +0 -0
  309. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/bigfix/bigfix_root.py +0 -0
  310. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/core/__init__.py +0 -0
  311. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/core/common.py +0 -0
  312. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/core/nodes.py +0 -0
  313. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/core/relationships.py +0 -0
  314. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/cve/__init__.py +0 -0
  315. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/cve/cve.py +0 -0
  316. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/cve/cve_feed.py +0 -0
  317. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/__init__.py +0 -0
  318. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/api_host.py +0 -0
  319. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/endpoint.py +0 -0
  320. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/group.py +0 -0
  321. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/phone.py +0 -0
  322. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/token.py +0 -0
  323. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/user.py +0 -0
  324. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/duo/web_authn_credential.py +0 -0
  325. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/github/__init__.py +0 -0
  326. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/github/teams.py +0 -0
  327. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/kandji/__init__.py +0 -0
  328. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/kandji/device.py +0 -0
  329. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/kandji/tenant.py +0 -0
  330. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/lastpass/__init__.py +0 -0
  331. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/lastpass/tenant.py +0 -0
  332. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/lastpass/user.py +0 -0
  333. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/semgrep/__init__.py +0 -0
  334. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/semgrep/deployment.py +0 -0
  335. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/semgrep/findings.py +0 -0
  336. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/models/semgrep/locations.py +0 -0
  337. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/py.typed +0 -0
  338. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/stats.py +0 -0
  339. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/sync.py +0 -0
  340. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography/util.py +0 -0
  341. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography.egg-info/SOURCES.txt +0 -0
  342. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography.egg-info/dependency_links.txt +0 -0
  343. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography.egg-info/entry_points.txt +0 -0
  344. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography.egg-info/requires.txt +0 -0
  345. {cartography-0.91.0 → cartography-0.92.0rc1}/cartography.egg-info/top_level.txt +0 -0
  346. {cartography-0.91.0 → cartography-0.92.0rc1}/setup.cfg +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.0rc1
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
@@ -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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartography
3
- Version: 0.91.0
3
+ Version: 0.92.0rc1
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
@@ -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.0rc1'
5
5
 
6
6
 
7
7
  setup(
@@ -1,129 +0,0 @@
1
- # Okta intel module - AWS SAML
2
- import logging
3
- import re
4
- from typing import Dict
5
- from typing import List
6
- from typing import Optional
7
-
8
- import neo4j
9
-
10
- from cartography.util import timeit
11
-
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- def _parse_regex(regex_string: str) -> str:
17
- return regex_string.replace("{{accountid}}", "P<accountid>").replace("{{role}}", "P<role>").strip()
18
-
19
-
20
- @timeit
21
- def transform_okta_group_to_aws_role(group_id: str, group_name: str, mapping_regex: str) -> Optional[Dict]:
22
- regex = _parse_regex(mapping_regex)
23
- matches = re.search(regex, group_name)
24
- if matches:
25
- accountid = matches.group("accountid")
26
- role = matches.group("role")
27
- role_arn = f"arn:aws:iam::{accountid}:role/{role}"
28
- return {"groupid": group_id, "role": role_arn}
29
- else:
30
- return None
31
-
32
-
33
- @timeit
34
- def query_for_okta_to_aws_role_mapping(neo4j_session: neo4j.Session, mapping_regex: str) -> List[Dict]:
35
- """
36
- Query the graph for all groups associated with the amazon_aws application and map them to AWSRoles
37
- :param neo4j_session: session from the Neo4j server
38
- :param mapping_regex: the regex used by the organization to map groups to aws roles
39
- """
40
- query = "MATCH (app:OktaApplication{name:'amazon_aws'})--(group:OktaGroup) return group.id, group.name"
41
-
42
- group_to_role_mapping: List[Dict] = []
43
- has_results = False
44
- results = neo4j_session.run(query)
45
-
46
- for res in results:
47
- has_results = True
48
- mapping = transform_okta_group_to_aws_role(res["group.id"], res["group.name"], mapping_regex)
49
- if mapping:
50
- group_to_role_mapping.append(mapping)
51
-
52
- if has_results and not group_to_role_mapping:
53
- logger.warn(
54
- "AWS Okta Application present, but no mappings were found. "
55
- "Please verify the mapping regex is correct",
56
- )
57
-
58
- return group_to_role_mapping
59
-
60
-
61
- @timeit
62
- def _load_okta_group_to_aws_roles(
63
- neo4j_session: neo4j.Session, group_to_role: List[Dict],
64
- okta_update_tag: int,
65
- ) -> None:
66
- """
67
- Add the ALLOWED_BY relationship between OktaGroups and the AWSRoles they enable
68
- :param neo4j_session: session with the Neo4j server
69
- :param group_to_role: the mapping between OktaGroups and the AWSRoles they allow access to
70
- :param okta_update_tag: The timestamp value to set our new Neo4j resources with
71
- :return: Nothing
72
- """
73
- ingest_statement = """
74
-
75
- UNWIND $GROUP_TO_ROLE as app_data
76
- MATCH (role:AWSRole{arn: app_data.role})
77
- MATCH (group:OktaGroup{id: app_data.groupid})
78
- MERGE (role)<-[r:ALLOWED_BY]-(group)
79
- ON CREATE SET r.firstseen = timestamp()
80
- SET r.lastupdated = $okta_update_tag
81
- """
82
-
83
- neo4j_session.run(
84
- ingest_statement,
85
- GROUP_TO_ROLE=group_to_role,
86
- okta_update_tag=okta_update_tag,
87
- )
88
-
89
-
90
- @timeit
91
- def _load_human_can_assume_role(neo4j_session: neo4j.Session, okta_update_tag: int) -> None:
92
- """
93
- Add the CAN_ASSUME_ROLE relationship between Humans and the AWSRoles they can assume
94
- :param neo4j_session: session with the Neo4j server
95
- :param okta_update_tag: The timestamp value to set our new Neo4j resources with
96
- :return: Nothing
97
- """
98
- ingest_statement = """
99
- MATCH (role:AWSRole)<-[:ALLOWED_BY]-(:OktaGroup)<-[:MEMBER_OF_OKTA_GROUP]-(:OktaUser)-[:IDENTITY_OKTA]-(human:Human)
100
- MERGE (human)-[r:CAN_ASSUME_ROLE]->(role)
101
- SET r.lastupdated = $okta_update_tag
102
- """
103
-
104
- neo4j_session.run(
105
- ingest_statement,
106
- okta_update_tag=okta_update_tag,
107
- )
108
-
109
-
110
- @timeit
111
- def sync_okta_aws_saml(neo4j_session: neo4j.Session, mapping_regex: str, okta_update_tag: int) -> None:
112
- """
113
- Sync okta integration with saml. This will link OktaGroups to the AWSRoles they enable.
114
- This is for people who use the okta saml provider for AWS
115
- https://saml-doc.okta.com/SAML_Docs/How-to-Configure-SAML-2.0-for-Amazon-Web-Service#scenarioC
116
- If an organization does not use okta as a SAML provider for AWS the query will not return any results
117
- and nothing will be added to the graph
118
- :param mapping_regex: session from the Neo4j server
119
- :param okta_org_id: okta organization id
120
- :param okta_update_tag: The timestamp value to set our new Neo4j resources with
121
- :param okta_api_key: Okta api key
122
- :return: Nothing
123
- """
124
- logger.info("Syncing Okta SAML Integration")
125
-
126
- # Query for the aws application and its associated groups
127
- group_to_role_mapping = query_for_okta_to_aws_role_mapping(neo4j_session, mapping_regex)
128
- _load_okta_group_to_aws_roles(neo4j_session, group_to_role_mapping, okta_update_tag)
129
- _load_human_can_assume_role(neo4j_session, okta_update_tag)
File without changes
File without changes
File without changes