cartography 0.97.0__tar.gz → 0.98.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.
- {cartography-0.97.0 → cartography-0.98.0rc1}/PKG-INFO +1 -1
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/indexes.cypher +0 -4
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_ec2_asset_exposure.json +17 -2
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/gcp_compute_asset_inet_exposure.json +1 -1
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/cleanupbuilder.py +47 -4
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/instances.py +5 -4
- cartography-0.98.0rc1/cartography/intel/aws/ec2/key_pairs.py +80 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/identitycenter.py +3 -20
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/github/users.py +10 -3
- cartography-0.97.0/cartography/models/aws/ec2/keypairs.py → cartography-0.98.0rc1/cartography/models/aws/ec2/keypair.py +13 -23
- cartography-0.98.0rc1/cartography/models/aws/ec2/keypair_instance.py +69 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/PKG-INFO +1 -1
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/SOURCES.txt +2 -2
- {cartography-0.97.0 → cartography-0.98.0rc1}/setup.py +1 -1
- cartography-0.97.0/cartography/data/jobs/cleanup/github_org_and_users_cleanup.json +0 -28
- cartography-0.97.0/cartography/intel/aws/ec2/key_pairs.py +0 -71
- {cartography-0.97.0 → cartography-0.98.0rc1}/LICENSE +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/README.md +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/__main__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/cli.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/client/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/client/aws/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/client/aws/iam.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/client/core/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/client/core/tx.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/config.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstance.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_ec2_iaminstanceprofile.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_ec2_keypair_analysis.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_eks_asset_exposure.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_foreign_accounts.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_lambda_ecr.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/aws_s3acl_analysis.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/gcp_gke_asset_exposure.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/gcp_gke_basic_auth.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/analysis/gsuite_human_link.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_account_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_apigateway_details.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_dns_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_account_access_key_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_apigateway_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_config_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_launch_configurations_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_ec2_security_groupinfo_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_ecr_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_ecs_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_elastic_ip_addresses_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_elasticache_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_es_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_membership_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_groups_policy_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_identity_center_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_internet_gateways_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_kms_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_lambda_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_principals_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_clusters_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_instances_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_rds_snapshots_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_redshift_clusters_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_reserved_instances_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_roles_policy_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_acl_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_s3_buckets_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_secrets_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_securityhub_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_snapshots_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_sqs_queues_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_tags_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_tgw_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_users_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_import_vpc_peering_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_ingest_ec2_auto_scaling_groups_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_ingest_load_balancers_v2_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_ingest_subnets_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_kms_details.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_post_ingestion_principals_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/aws_s3_details.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cassandra_keyspace_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_cors_details.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_mongodb_database_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_sql_database_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_cosmosdb_table_resources_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_database_account_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_import_disks_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_import_snapshots_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_import_virtual_machines_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_sql_server_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_storage_account_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/azure_tenant_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/digitalocean_project_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_compute_forwarding_rules_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_compute_instance_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_compute_vpc_subnet_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_crm_folder_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_crm_organization_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_dns_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/github_repos_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/jamf_import_computers_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/kubernetes_import_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_import_compartments_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_import_groups_membership_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_import_policies_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_import_users_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/oci_tenancy_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/okta_groups_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/okta_import_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/cleanup/pagerduty_import_cleanup.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/scoped_analysis/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/jobs/scoped_analysis/semgrep_sca_risk_analysis.json +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/data/permission_relationships.yaml +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/__main__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/add_shortcut.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/cli.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/config.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/detect_deviations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/get_states.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/model.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/reporter.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/serializers.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/shortcut.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/storage.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/driftdetect/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/context.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/job.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/querybuilder.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/graph/statement.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/analysis.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/apigateway.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/config.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/dynamodb.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/auto_scaling_groups.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/elastic_ip_addresses.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/images.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/internet_gateways.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/launch_templates.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/load_balancer_v2s.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/load_balancers.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/network_acls.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/network_interfaces.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/reserved_instances.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/security_groups.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/snapshots.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/subnets.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/tgw.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/volumes.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/vpc.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ec2/vpc_peerings.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ecr.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ecs.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/eks.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/elasticache.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/elasticsearch.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/emr.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/iam.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/inspector.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/kms.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/lambda_function.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/organizations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/permission_relationships.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/rds.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/redshift.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/resourcegroupstaggingapi.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/resources.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/route53.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/s3.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/secretsmanager.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/securityhub.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/sqs.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/ssm.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/util/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/util/arns.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/aws/util/common.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/compute.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/cosmosdb.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/sql.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/storage.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/subscription.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/tenant.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/util/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/azure/util/credentials.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/bigfix/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/bigfix/computers.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/create_indexes.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/crowdstrike/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/crowdstrike/endpoints.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/crowdstrike/spotlight.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/crowdstrike/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/cve/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/cve/feed.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/digitalocean/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/digitalocean/compute.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/digitalocean/management.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/digitalocean/platform.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/dns.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/api_host.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/endpoints.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/groups.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/phones.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/tokens.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/users.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/duo/web_authn_credentials.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/compute.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/crm.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/dns.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/gke.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gcp/storage.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/github/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/github/repos.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/github/teams.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/github/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gsuite/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/gsuite/api.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/jamf/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/jamf/computers.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/jamf/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kandji/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kandji/devices.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/namespaces.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/pods.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/secrets.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/services.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/kubernetes/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/lastpass/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/lastpass/users.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/oci/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/oci/iam.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/oci/organizations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/oci/utils.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/applications.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/awssaml.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/factors.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/groups.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/organization.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/origins.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/roles.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/sync_state.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/users.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/okta/utils.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/escalation_policies.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/schedules.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/services.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/teams.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/users.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/pagerduty/vendors.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/semgrep/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/semgrep/dependencies.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/semgrep/deployment.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/semgrep/findings.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/snipeit/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/snipeit/asset.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/snipeit/user.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/intel/snipeit/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/dynamodb/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/dynamodb/gsi.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/dynamodb/tables.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/auto_scaling_groups.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/images.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/instances.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/launch_configurations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/launch_template_versions.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/launch_templates.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/loadbalancerv2.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/network_acl_rules.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/network_acls.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/networkinterface_instance.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/networkinterfaces.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/privateip_networkinterface.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/reservations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/securitygroup_instance.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/securitygroup_networkinterface.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/subnet_instance.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/subnet_networkinterface.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ec2/volumes.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/eks/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/eks/clusters.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/emr.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/identitycenter/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/identitycenter/awsidentitycenter.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/identitycenter/awspermissionset.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/identitycenter/awsssouser.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/inspector/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/inspector/findings.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/inspector/packages.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ssm/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ssm/instance_information.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/aws/ssm/instance_patch.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/bigfix/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/bigfix/bigfix_computer.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/bigfix/bigfix_root.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/core/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/core/common.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/core/nodes.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/core/relationships.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/cve/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/cve/cve.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/cve/cve_feed.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/api_host.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/endpoint.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/group.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/phone.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/token.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/user.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/duo/web_authn_credential.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/github/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/github/orgs.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/github/teams.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/github/users.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/kandji/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/kandji/device.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/kandji/tenant.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/lastpass/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/lastpass/tenant.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/lastpass/user.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/semgrep/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/semgrep/dependencies.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/semgrep/deployment.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/semgrep/findings.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/semgrep/locations.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/snipeit/__init__.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/snipeit/asset.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/snipeit/tenant.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/models/snipeit/user.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/py.typed +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/stats.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/sync.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography/util.py +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/dependency_links.txt +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/entry_points.txt +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/requires.txt +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/cartography.egg-info/top_level.txt +0 -0
- {cartography-0.97.0 → cartography-0.98.0rc1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: cartography
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.98.0rc1
|
|
4
4
|
Summary: Explore assets and their relationships across your technical infrastructure.
|
|
5
5
|
Home-page: https://www.github.com/cartography-cncf/cartography
|
|
6
6
|
Maintainer: Cartography Contributors
|
|
@@ -161,12 +161,8 @@ CREATE INDEX IF NOT EXISTS FOR (n:GCPSubnet) ON (n.id);
|
|
|
161
161
|
CREATE INDEX IF NOT EXISTS FOR (n:GCPSubnet) ON (n.lastupdated);
|
|
162
162
|
CREATE INDEX IF NOT EXISTS FOR (n:GCPVpc) ON (n.id);
|
|
163
163
|
CREATE INDEX IF NOT EXISTS FOR (n:GCPVpc) ON (n.lastupdated);
|
|
164
|
-
CREATE INDEX IF NOT EXISTS FOR (n:GitHubOrganization) ON (n.id);
|
|
165
|
-
CREATE INDEX IF NOT EXISTS FOR (n:GitHubOrganization) ON (n.lastupdated);
|
|
166
164
|
CREATE INDEX IF NOT EXISTS FOR (n:GitHubRepository) ON (n.id);
|
|
167
165
|
CREATE INDEX IF NOT EXISTS FOR (n:GitHubRepository) ON (n.lastupdated);
|
|
168
|
-
CREATE INDEX IF NOT EXISTS FOR (n:GitHubUser) ON (n.id);
|
|
169
|
-
CREATE INDEX IF NOT EXISTS FOR (n:GitHubUser) ON (n.lastupdated);
|
|
170
166
|
CREATE INDEX IF NOT EXISTS FOR (n:GKECluster) ON (n.id);
|
|
171
167
|
CREATE INDEX IF NOT EXISTS FOR (n:GKECluster) ON (n.lastupdated);
|
|
172
168
|
CREATE INDEX IF NOT EXISTS FOR (n:GSuiteGroup) ON (n.email);
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"statements": [
|
|
3
3
|
{
|
|
4
|
-
"query": "MATCH (n) where n.exposed_internet IS NOT NULL
|
|
4
|
+
"query": "MATCH (n:AutoScalingGroup) where n.exposed_internet IS NOT NULL WITH n LIMIT $LIMIT_SIZE REMOVE n.exposed_internet, n.exposed_internet_type",
|
|
5
5
|
"iterative": true,
|
|
6
6
|
"iterationsize": 1000
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
|
-
"query": "MATCH (:
|
|
9
|
+
"query": "MATCH (n:EC2Instance) where n.exposed_internet IS NOT NULL WITH n LIMIT $LIMIT_SIZE REMOVE n.exposed_internet, n.exposed_internet_type",
|
|
10
|
+
"iterative": true,
|
|
11
|
+
"iterationsize": 1000
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"query": "MATCH (n:LoadBalancer) where n.exposed_internet IS NOT NULL WITH n LIMIT $LIMIT_SIZE REMOVE n.exposed_internet, n.exposed_internet_type",
|
|
15
|
+
"iterative": true,
|
|
16
|
+
"iterationsize": 1000
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "MATCH (n:LoadBalancerV2) where n.exposed_internet IS NOT NULL WITH n LIMIT $LIMIT_SIZE REMOVE n.exposed_internet, n.exposed_internet_type",
|
|
20
|
+
"iterative": true,
|
|
21
|
+
"iterationsize": 1000
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"query": "MATCH (:IpRange{id: '0.0.0.0/0'})-[:MEMBER_OF_IP_RULE]->(:IpPermissionInbound)-[:MEMBER_OF_EC2_SECURITY_GROUP]->(group:EC2SecurityGroup)<-[:MEMBER_OF_EC2_SECURITY_GROUP|NETWORK_INTERFACE*..2]-(instance:EC2Instance) WITH instance WHERE (instance.publicipaddress IS NOT NULL) AND (instance.exposed_internet_type IS NULL OR NOT 'direct' IN instance.exposed_internet_type) SET instance.exposed_internet = true, instance.exposed_internet_type = CASE WHEN instance.exposed_internet_type IS NULL THEN ['direct'] WHEN NOT 'direct' IN instance.exposed_internet_type THEN instance.exposed_internet_type + ['direct'] ELSE instance.exposed_internet_type END;",
|
|
10
25
|
"iterative": false
|
|
11
26
|
},
|
|
12
27
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"statements": [
|
|
3
3
|
{
|
|
4
|
-
"query": "MATCH (n) where n.exposed_internet IS NOT NULL
|
|
4
|
+
"query": "MATCH (n:GCPInstance) where n.exposed_internet IS NOT NULL WITH n LIMIT $LIMIT_SIZE REMOVE n.exposed_internet, n.exposed_internet_type",
|
|
5
5
|
"iterative": true,
|
|
6
6
|
"iterationsize": 1000,
|
|
7
7
|
"__comment__": "Delete exposed_internet off nodes so we can start fresh"
|
|
@@ -16,7 +16,17 @@ def build_cleanup_queries(node_schema: CartographyNodeSchema) -> List[str]:
|
|
|
16
16
|
"""
|
|
17
17
|
Generates queries to clean up stale nodes and relationships from the given CartographyNodeSchema.
|
|
18
18
|
Note that auto-cleanups for a node with no relationships is not currently supported.
|
|
19
|
+
|
|
19
20
|
Algorithm:
|
|
21
|
+
1. If node_schema has no relationships at all, return empty.
|
|
22
|
+
|
|
23
|
+
Otherwise,
|
|
24
|
+
|
|
25
|
+
1. If node_schema doesn't have a sub_resource relationship, generate queries only to clean up its other
|
|
26
|
+
relationships. No nodes will be cleaned up.
|
|
27
|
+
|
|
28
|
+
Otherwise,
|
|
29
|
+
|
|
20
30
|
1. First delete all stale nodes attached to the node_schema's sub resource
|
|
21
31
|
2. Delete all stale node to sub resource relationships
|
|
22
32
|
- We don't expect this to be very common (never for AWS resources, at least), but in case it is possible for an
|
|
@@ -25,11 +35,16 @@ def build_cleanup_queries(node_schema: CartographyNodeSchema) -> List[str]:
|
|
|
25
35
|
:param node_schema: The given CartographyNodeSchema
|
|
26
36
|
:return: A list of Neo4j queries to clean up nodes and relationships.
|
|
27
37
|
"""
|
|
38
|
+
if not node_schema.sub_resource_relationship and not node_schema.other_relationships:
|
|
39
|
+
return []
|
|
40
|
+
|
|
28
41
|
if not node_schema.sub_resource_relationship:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
42
|
+
queries = []
|
|
43
|
+
other_rels = node_schema.other_relationships.rels if node_schema.other_relationships else []
|
|
44
|
+
for rel in other_rels:
|
|
45
|
+
query = _build_cleanup_rel_query_no_sub_resource(node_schema, rel)
|
|
46
|
+
queries.append(query)
|
|
47
|
+
return queries
|
|
33
48
|
|
|
34
49
|
result = _build_cleanup_node_and_rel_queries(node_schema, node_schema.sub_resource_relationship)
|
|
35
50
|
if node_schema.other_relationships:
|
|
@@ -41,6 +56,34 @@ def build_cleanup_queries(node_schema: CartographyNodeSchema) -> List[str]:
|
|
|
41
56
|
return result
|
|
42
57
|
|
|
43
58
|
|
|
59
|
+
def _build_cleanup_rel_query_no_sub_resource(
|
|
60
|
+
node_schema: CartographyNodeSchema,
|
|
61
|
+
selected_relationship: CartographyRelSchema,
|
|
62
|
+
) -> str:
|
|
63
|
+
"""
|
|
64
|
+
Helper function to delete stale relationships for node_schemas that have no sub resource relationship defined.
|
|
65
|
+
"""
|
|
66
|
+
if node_schema.sub_resource_relationship:
|
|
67
|
+
raise ValueError(
|
|
68
|
+
f'Expected {node_schema.label} to not exist. '
|
|
69
|
+
'This function is intended for node_schemas without sub_resource_relationships.',
|
|
70
|
+
)
|
|
71
|
+
# Ensure the node is attached to the sub resource and delete the node
|
|
72
|
+
query_template = Template(
|
|
73
|
+
"""
|
|
74
|
+
MATCH (n:$node_label)
|
|
75
|
+
$selected_rel_clause
|
|
76
|
+
WHERE r.lastupdated <> $UPDATE_TAG
|
|
77
|
+
WITH r LIMIT $LIMIT_SIZE
|
|
78
|
+
DELETE r;
|
|
79
|
+
""",
|
|
80
|
+
)
|
|
81
|
+
return query_template.safe_substitute(
|
|
82
|
+
node_label=node_schema.label,
|
|
83
|
+
selected_rel_clause=_build_selected_rel_clause(selected_relationship),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
44
87
|
def _build_cleanup_node_and_rel_queries(
|
|
45
88
|
node_schema: CartographyNodeSchema,
|
|
46
89
|
selected_relationship: CartographyRelSchema,
|
|
@@ -13,7 +13,7 @@ from cartography.graph.job import GraphJob
|
|
|
13
13
|
from cartography.intel.aws.ec2.util import get_botocore_config
|
|
14
14
|
from cartography.models.aws.ec2.auto_scaling_groups import EC2InstanceAutoScalingGroupSchema
|
|
15
15
|
from cartography.models.aws.ec2.instances import EC2InstanceSchema
|
|
16
|
-
from cartography.models.aws.ec2.
|
|
16
|
+
from cartography.models.aws.ec2.keypair_instance import EC2KeyPairInstanceSchema
|
|
17
17
|
from cartography.models.aws.ec2.networkinterface_instance import EC2NetworkInterfaceInstanceSchema
|
|
18
18
|
from cartography.models.aws.ec2.reservations import EC2ReservationSchema
|
|
19
19
|
from cartography.models.aws.ec2.securitygroup_instance import EC2SecurityGroupInstanceSchema
|
|
@@ -193,16 +193,17 @@ def load_ec2_subnets(
|
|
|
193
193
|
|
|
194
194
|
|
|
195
195
|
@timeit
|
|
196
|
-
def
|
|
196
|
+
def load_ec2_keypair_instances(
|
|
197
197
|
neo4j_session: neo4j.Session,
|
|
198
198
|
key_pair_list: List[Dict[str, Any]],
|
|
199
199
|
region: str,
|
|
200
200
|
current_aws_account_id: str,
|
|
201
201
|
update_tag: int,
|
|
202
202
|
) -> None:
|
|
203
|
+
# Load EC2 keypairs as known by describe-instances.
|
|
203
204
|
load(
|
|
204
205
|
neo4j_session,
|
|
205
|
-
|
|
206
|
+
EC2KeyPairInstanceSchema(),
|
|
206
207
|
key_pair_list,
|
|
207
208
|
Region=region,
|
|
208
209
|
AWS_ID=current_aws_account_id,
|
|
@@ -299,7 +300,7 @@ def load_ec2_instance_data(
|
|
|
299
300
|
load_ec2_instance_nodes(neo4j_session, instance_list, region, current_aws_account_id, update_tag)
|
|
300
301
|
load_ec2_subnets(neo4j_session, subnet_list, region, current_aws_account_id, update_tag)
|
|
301
302
|
load_ec2_security_groups(neo4j_session, sg_list, region, current_aws_account_id, update_tag)
|
|
302
|
-
|
|
303
|
+
load_ec2_keypair_instances(neo4j_session, key_pair_list, region, current_aws_account_id, update_tag)
|
|
303
304
|
load_ec2_network_interfaces(neo4j_session, nic_list, region, current_aws_account_id, update_tag)
|
|
304
305
|
load_ec2_instance_ebs_volumes(neo4j_session, ebs_volumes_list, region, current_aws_account_id, update_tag)
|
|
305
306
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any
|
|
3
|
+
from typing import Dict
|
|
4
|
+
|
|
5
|
+
import boto3
|
|
6
|
+
import neo4j
|
|
7
|
+
|
|
8
|
+
from cartography.client.core.tx import load
|
|
9
|
+
from cartography.graph.job import GraphJob
|
|
10
|
+
from cartography.intel.aws.ec2.util import get_botocore_config
|
|
11
|
+
from cartography.models.aws.ec2.keypair import EC2KeyPairSchema
|
|
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_ec2_key_pairs(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
|
+
return client.describe_key_pairs()['KeyPairs']
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def transform_ec2_key_pairs(
|
|
26
|
+
key_pairs: list[dict[str, Any]],
|
|
27
|
+
region: str,
|
|
28
|
+
current_aws_account_id: str,
|
|
29
|
+
) -> list[dict[str, Any]]:
|
|
30
|
+
transformed_key_pairs = []
|
|
31
|
+
for key_pair in key_pairs:
|
|
32
|
+
key_name = key_pair["KeyName"]
|
|
33
|
+
transformed_key_pairs.append({
|
|
34
|
+
'KeyPairArn': f'arn:aws:ec2:{region}:{current_aws_account_id}:key-pair/{key_name}',
|
|
35
|
+
'KeyName': key_name,
|
|
36
|
+
'KeyFingerprint': key_pair.get("KeyFingerprint"),
|
|
37
|
+
})
|
|
38
|
+
return transformed_key_pairs
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@timeit
|
|
42
|
+
def load_ec2_key_pairs(
|
|
43
|
+
neo4j_session: neo4j.Session,
|
|
44
|
+
data: list[dict[str, Any]],
|
|
45
|
+
region: str,
|
|
46
|
+
current_aws_account_id: str,
|
|
47
|
+
update_tag: int,
|
|
48
|
+
) -> None:
|
|
49
|
+
# Load EC2 keypairs as known by describe-key-pairs
|
|
50
|
+
logger.info(f"Loading {len(data)} EC2 keypairs for region '{region}' into graph.")
|
|
51
|
+
load(
|
|
52
|
+
neo4j_session,
|
|
53
|
+
EC2KeyPairSchema(),
|
|
54
|
+
data,
|
|
55
|
+
Region=region,
|
|
56
|
+
AWS_ID=current_aws_account_id,
|
|
57
|
+
lastupdated=update_tag,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@timeit
|
|
62
|
+
def cleanup_ec2_key_pairs(neo4j_session: neo4j.Session, common_job_parameters: Dict) -> None:
|
|
63
|
+
GraphJob.from_node_schema(EC2KeyPairSchema(), common_job_parameters).run(neo4j_session)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@timeit
|
|
67
|
+
def sync_ec2_key_pairs(
|
|
68
|
+
neo4j_session: neo4j.Session,
|
|
69
|
+
boto3_session: boto3.session.Session,
|
|
70
|
+
regions: list[str],
|
|
71
|
+
current_aws_account_id: str,
|
|
72
|
+
update_tag: int,
|
|
73
|
+
common_job_parameters: dict[str, Any],
|
|
74
|
+
) -> None:
|
|
75
|
+
for region in regions:
|
|
76
|
+
logger.info("Syncing EC2 key pairs for region '%s' in account '%s'.", region, current_aws_account_id)
|
|
77
|
+
data = get_ec2_key_pairs(boto3_session, region)
|
|
78
|
+
transformed_data = transform_ec2_key_pairs(data, region, current_aws_account_id)
|
|
79
|
+
load_ec2_key_pairs(neo4j_session, transformed_data, region, current_aws_account_id, update_tag)
|
|
80
|
+
cleanup_ec2_key_pairs(neo4j_session, common_job_parameters)
|
|
@@ -82,26 +82,6 @@ def get_permission_sets(boto3_session: boto3.session.Session, instance_arn: str,
|
|
|
82
82
|
return permission_sets
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
@timeit
|
|
86
|
-
def get_permission_set_roles(
|
|
87
|
-
boto3_session: boto3.session.Session,
|
|
88
|
-
instance_arn: str,
|
|
89
|
-
permission_set_arn: str,
|
|
90
|
-
region: str,
|
|
91
|
-
) -> List[Dict]:
|
|
92
|
-
"""
|
|
93
|
-
Get all accounts associated with a given permission set
|
|
94
|
-
"""
|
|
95
|
-
client = boto3_session.client('sso-admin', region_name=region)
|
|
96
|
-
accounts = []
|
|
97
|
-
|
|
98
|
-
paginator = client.get_paginator('list_accounts_for_provisioned_permission_set')
|
|
99
|
-
for page in paginator.paginate(InstanceArn=instance_arn, PermissionSetArn=permission_set_arn):
|
|
100
|
-
accounts.extend(page.get('AccountIds', []))
|
|
101
|
-
|
|
102
|
-
return accounts
|
|
103
|
-
|
|
104
|
-
|
|
105
85
|
@timeit
|
|
106
86
|
def load_permission_sets(
|
|
107
87
|
neo4j_session: neo4j.Session,
|
|
@@ -128,6 +108,7 @@ def load_permission_sets(
|
|
|
128
108
|
|
|
129
109
|
|
|
130
110
|
@timeit
|
|
111
|
+
@aws_handle_regions
|
|
131
112
|
def get_sso_users(
|
|
132
113
|
boto3_session: boto3.session.Session,
|
|
133
114
|
identity_store_id: str,
|
|
@@ -176,6 +157,7 @@ def load_sso_users(
|
|
|
176
157
|
|
|
177
158
|
|
|
178
159
|
@timeit
|
|
160
|
+
@aws_handle_regions
|
|
179
161
|
def get_role_assignments(
|
|
180
162
|
boto3_session: boto3.session.Session,
|
|
181
163
|
users: List[Dict],
|
|
@@ -231,6 +213,7 @@ def load_role_assignments(
|
|
|
231
213
|
)
|
|
232
214
|
|
|
233
215
|
|
|
216
|
+
@timeit
|
|
234
217
|
def cleanup(neo4j_session: neo4j.Session, common_job_parameters: Dict[str, Any]) -> None:
|
|
235
218
|
GraphJob.from_node_schema(AWSIdentityCenterInstanceSchema(), common_job_parameters).run(neo4j_session)
|
|
236
219
|
GraphJob.from_node_schema(AWSPermissionSetSchema(), common_job_parameters).run(neo4j_session)
|
|
@@ -8,13 +8,13 @@ from typing import Tuple
|
|
|
8
8
|
import neo4j
|
|
9
9
|
|
|
10
10
|
from cartography.client.core.tx import load
|
|
11
|
+
from cartography.graph.job import GraphJob
|
|
11
12
|
from cartography.intel.github.util import fetch_all
|
|
12
13
|
from cartography.models.github.orgs import GitHubOrganizationSchema
|
|
13
14
|
from cartography.models.github.users import GitHubOrganizationUserSchema
|
|
14
15
|
from cartography.models.github.users import GitHubUnaffiliatedUserSchema
|
|
15
16
|
from cartography.stats import get_stats_client
|
|
16
17
|
from cartography.util import merge_module_sync_metadata
|
|
17
|
-
from cartography.util import run_cleanup_job
|
|
18
18
|
from cartography.util import timeit
|
|
19
19
|
|
|
20
20
|
logger = logging.getLogger(__name__)
|
|
@@ -210,6 +210,13 @@ def load_organization(
|
|
|
210
210
|
)
|
|
211
211
|
|
|
212
212
|
|
|
213
|
+
@timeit
|
|
214
|
+
def cleanup(neo4j_session: neo4j.Session, common_job_parameters: dict[str, Any]) -> None:
|
|
215
|
+
logger.info("Cleaning up GitHub users")
|
|
216
|
+
GraphJob.from_node_schema(GitHubOrganizationUserSchema(), common_job_parameters).run(neo4j_session)
|
|
217
|
+
GraphJob.from_node_schema(GitHubUnaffiliatedUserSchema(), common_job_parameters).run(neo4j_session)
|
|
218
|
+
|
|
219
|
+
|
|
213
220
|
@timeit
|
|
214
221
|
def sync(
|
|
215
222
|
neo4j_session: neo4j.Session,
|
|
@@ -236,8 +243,8 @@ def sync(
|
|
|
236
243
|
neo4j_session, GitHubUnaffiliatedUserSchema(), processed_unaffiliated_user_data, org_data,
|
|
237
244
|
common_job_parameters['UPDATE_TAG'],
|
|
238
245
|
)
|
|
239
|
-
|
|
240
|
-
|
|
246
|
+
cleanup(neo4j_session, common_job_parameters)
|
|
247
|
+
|
|
241
248
|
merge_module_sync_metadata(
|
|
242
249
|
neo4j_session,
|
|
243
250
|
group_type='GitHubOrganization',
|
|
@@ -3,19 +3,23 @@ from dataclasses import dataclass
|
|
|
3
3
|
from cartography.models.core.common import PropertyRef
|
|
4
4
|
from cartography.models.core.nodes import CartographyNodeProperties
|
|
5
5
|
from cartography.models.core.nodes import CartographyNodeSchema
|
|
6
|
+
from cartography.models.core.nodes import ExtraNodeLabels
|
|
6
7
|
from cartography.models.core.relationships import CartographyRelProperties
|
|
7
8
|
from cartography.models.core.relationships import CartographyRelSchema
|
|
8
9
|
from cartography.models.core.relationships import LinkDirection
|
|
9
10
|
from cartography.models.core.relationships import make_target_node_matcher
|
|
10
|
-
from cartography.models.core.relationships import OtherRelationships
|
|
11
11
|
from cartography.models.core.relationships import TargetNodeMatcher
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
@dataclass(frozen=True)
|
|
15
15
|
class EC2KeyPairNodeProperties(CartographyNodeProperties):
|
|
16
|
+
"""
|
|
17
|
+
Properties for EC2 keypairs from describe-key-pairs
|
|
18
|
+
"""
|
|
16
19
|
id: PropertyRef = PropertyRef('KeyPairArn')
|
|
17
20
|
arn: PropertyRef = PropertyRef('KeyPairArn', extra_index=True)
|
|
18
21
|
keyname: PropertyRef = PropertyRef('KeyName')
|
|
22
|
+
keyfingerprint: PropertyRef = PropertyRef('KeyFingerprint')
|
|
19
23
|
region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
|
|
20
24
|
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
21
25
|
|
|
@@ -27,38 +31,24 @@ class EC2KeyPairToAwsAccountRelProperties(CartographyRelProperties):
|
|
|
27
31
|
|
|
28
32
|
@dataclass(frozen=True)
|
|
29
33
|
class EC2KeyPairToAWSAccount(CartographyRelSchema):
|
|
34
|
+
"""
|
|
35
|
+
Relationship schema for EC2 keypairs to AWS Accounts
|
|
36
|
+
"""
|
|
30
37
|
target_node_label: str = 'AWSAccount'
|
|
31
38
|
target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
|
|
32
39
|
{'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
|
|
33
40
|
)
|
|
34
41
|
direction: LinkDirection = LinkDirection.INWARD
|
|
35
|
-
rel_label: str =
|
|
42
|
+
rel_label: str = 'RESOURCE'
|
|
36
43
|
properties: EC2KeyPairToAwsAccountRelProperties = EC2KeyPairToAwsAccountRelProperties()
|
|
37
44
|
|
|
38
45
|
|
|
39
|
-
@dataclass(frozen=True)
|
|
40
|
-
class EC2KeyPairToEC2InstanceRelProperties(CartographyRelProperties):
|
|
41
|
-
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@dataclass(frozen=True)
|
|
45
|
-
class EC2KeyPairToEC2Instance(CartographyRelSchema):
|
|
46
|
-
target_node_label: str = 'EC2Instance'
|
|
47
|
-
target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
|
|
48
|
-
{'id': PropertyRef('InstanceId')},
|
|
49
|
-
)
|
|
50
|
-
direction: LinkDirection = LinkDirection.OUTWARD
|
|
51
|
-
rel_label: str = "SSH_LOGIN_TO"
|
|
52
|
-
properties: EC2KeyPairToEC2InstanceRelProperties = EC2KeyPairToEC2InstanceRelProperties()
|
|
53
|
-
|
|
54
|
-
|
|
55
46
|
@dataclass(frozen=True)
|
|
56
47
|
class EC2KeyPairSchema(CartographyNodeSchema):
|
|
48
|
+
"""
|
|
49
|
+
Schema for EC2 keypairs from describe-key-pairs
|
|
50
|
+
"""
|
|
57
51
|
label: str = 'EC2KeyPair'
|
|
52
|
+
extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(['KeyPair'])
|
|
58
53
|
properties: EC2KeyPairNodeProperties = EC2KeyPairNodeProperties()
|
|
59
54
|
sub_resource_relationship: EC2KeyPairToAWSAccount = EC2KeyPairToAWSAccount()
|
|
60
|
-
other_relationships: OtherRelationships = OtherRelationships(
|
|
61
|
-
[
|
|
62
|
-
EC2KeyPairToEC2Instance(),
|
|
63
|
-
],
|
|
64
|
-
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from cartography.models.core.common import PropertyRef
|
|
4
|
+
from cartography.models.core.nodes import CartographyNodeProperties
|
|
5
|
+
from cartography.models.core.nodes import CartographyNodeSchema
|
|
6
|
+
from cartography.models.core.nodes import ExtraNodeLabels
|
|
7
|
+
from cartography.models.core.relationships import CartographyRelProperties
|
|
8
|
+
from cartography.models.core.relationships import CartographyRelSchema
|
|
9
|
+
from cartography.models.core.relationships import LinkDirection
|
|
10
|
+
from cartography.models.core.relationships import make_target_node_matcher
|
|
11
|
+
from cartography.models.core.relationships import OtherRelationships
|
|
12
|
+
from cartography.models.core.relationships import TargetNodeMatcher
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass(frozen=True)
|
|
16
|
+
class EC2KeyPairInstanceNodeProperties(CartographyNodeProperties):
|
|
17
|
+
id: PropertyRef = PropertyRef('KeyPairArn')
|
|
18
|
+
arn: PropertyRef = PropertyRef('KeyPairArn', extra_index=True)
|
|
19
|
+
keyname: PropertyRef = PropertyRef('KeyName')
|
|
20
|
+
region: PropertyRef = PropertyRef('Region', set_in_kwargs=True)
|
|
21
|
+
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass(frozen=True)
|
|
25
|
+
class EC2KeyPairInstanceToAwsAccountRelProperties(CartographyRelProperties):
|
|
26
|
+
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass(frozen=True)
|
|
30
|
+
class EC2KeyPairInstanceToAWSAccount(CartographyRelSchema):
|
|
31
|
+
target_node_label: str = 'AWSAccount'
|
|
32
|
+
target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
|
|
33
|
+
{'id': PropertyRef('AWS_ID', set_in_kwargs=True)},
|
|
34
|
+
)
|
|
35
|
+
direction: LinkDirection = LinkDirection.INWARD
|
|
36
|
+
rel_label: str = "RESOURCE"
|
|
37
|
+
properties: EC2KeyPairInstanceToAwsAccountRelProperties = EC2KeyPairInstanceToAwsAccountRelProperties()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass(frozen=True)
|
|
41
|
+
class EC2KeyPairInstanceToEC2InstanceRelProperties(CartographyRelProperties):
|
|
42
|
+
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@dataclass(frozen=True)
|
|
46
|
+
class EC2KeyPairInstanceToEC2Instance(CartographyRelSchema):
|
|
47
|
+
target_node_label: str = 'EC2Instance'
|
|
48
|
+
target_node_matcher: TargetNodeMatcher = make_target_node_matcher(
|
|
49
|
+
{'id': PropertyRef('InstanceId')},
|
|
50
|
+
)
|
|
51
|
+
direction: LinkDirection = LinkDirection.OUTWARD
|
|
52
|
+
rel_label: str = "SSH_LOGIN_TO"
|
|
53
|
+
properties: EC2KeyPairInstanceToEC2InstanceRelProperties = EC2KeyPairInstanceToEC2InstanceRelProperties()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass(frozen=True)
|
|
57
|
+
class EC2KeyPairInstanceSchema(CartographyNodeSchema):
|
|
58
|
+
"""
|
|
59
|
+
EC2 keypairs as known by describe-instances.
|
|
60
|
+
"""
|
|
61
|
+
label: str = 'EC2KeyPair'
|
|
62
|
+
extra_node_labels: ExtraNodeLabels = ExtraNodeLabels(['KeyPair'])
|
|
63
|
+
properties: EC2KeyPairInstanceNodeProperties = EC2KeyPairInstanceNodeProperties()
|
|
64
|
+
sub_resource_relationship: EC2KeyPairInstanceToAWSAccount = EC2KeyPairInstanceToAWSAccount()
|
|
65
|
+
other_relationships: OtherRelationships = OtherRelationships(
|
|
66
|
+
[
|
|
67
|
+
EC2KeyPairInstanceToEC2Instance(),
|
|
68
|
+
],
|
|
69
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: cartography
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.98.0rc1
|
|
4
4
|
Summary: Explore assets and their relationships across your technical infrastructure.
|
|
5
5
|
Home-page: https://www.github.com/cartography-cncf/cartography
|
|
6
6
|
Maintainer: Cartography Contributors
|
|
@@ -112,7 +112,6 @@ cartography/data/jobs/cleanup/gcp_crm_project_cleanup.json
|
|
|
112
112
|
cartography/data/jobs/cleanup/gcp_dns_cleanup.json
|
|
113
113
|
cartography/data/jobs/cleanup/gcp_gke_cluster_cleanup.json
|
|
114
114
|
cartography/data/jobs/cleanup/gcp_storage_bucket_cleanup.json
|
|
115
|
-
cartography/data/jobs/cleanup/github_org_and_users_cleanup.json
|
|
116
115
|
cartography/data/jobs/cleanup/github_repos_cleanup.json
|
|
117
116
|
cartography/data/jobs/cleanup/gsuite_ingest_groups_cleanup.json
|
|
118
117
|
cartography/data/jobs/cleanup/gsuite_ingest_users_cleanup.json
|
|
@@ -298,7 +297,8 @@ cartography/models/aws/ec2/__init__.py
|
|
|
298
297
|
cartography/models/aws/ec2/auto_scaling_groups.py
|
|
299
298
|
cartography/models/aws/ec2/images.py
|
|
300
299
|
cartography/models/aws/ec2/instances.py
|
|
301
|
-
cartography/models/aws/ec2/
|
|
300
|
+
cartography/models/aws/ec2/keypair.py
|
|
301
|
+
cartography/models/aws/ec2/keypair_instance.py
|
|
302
302
|
cartography/models/aws/ec2/launch_configurations.py
|
|
303
303
|
cartography/models/aws/ec2/launch_template_versions.py
|
|
304
304
|
cartography/models/aws/ec2/launch_templates.py
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"statements": [{
|
|
3
|
-
"query": "MATCH (n:GitHubUser) 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:GitHubOrganization) WHERE n.lastupdated <> $UPDATE_TAG WITH n LIMIT $LIMIT_SIZE DETACH DELETE (n)",
|
|
9
|
-
"iterative": true,
|
|
10
|
-
"iterationsize": 100
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"query": "MATCH (:GitHubUser)-[r:OWNER]->(:GitHubRepository) WHERE r.lastupdated <> $UPDATE_TAG WITH r LIMIT $LIMIT_SIZE DELETE (r)",
|
|
14
|
-
"iterative": true,
|
|
15
|
-
"iterationsize": 100
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"query": "MATCH (:GitHubUser)-[r:MEMBER_OF]->(:GitHubOrganization) WHERE r.lastupdated <> $UPDATE_TAG WITH r LIMIT $LIMIT_SIZE DELETE (r)",
|
|
19
|
-
"iterative": true,
|
|
20
|
-
"iterationsize": 100
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"query": "MATCH (:GitHubUser)-[r:UNAFFILIATED]->(:GitHubOrganization) WHERE r.lastupdated <> $UPDATE_TAG WITH r LIMIT $LIMIT_SIZE DELETE (r)",
|
|
24
|
-
"iterative": true,
|
|
25
|
-
"iterationsize": 100
|
|
26
|
-
}],
|
|
27
|
-
"name": "cleanup GitHub users data"
|
|
28
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import Dict
|
|
3
|
-
from typing import List
|
|
4
|
-
|
|
5
|
-
import boto3
|
|
6
|
-
import neo4j
|
|
7
|
-
|
|
8
|
-
from .util import get_botocore_config
|
|
9
|
-
from cartography.graph.job import GraphJob
|
|
10
|
-
from cartography.models.aws.ec2.keypairs import EC2KeyPairSchema
|
|
11
|
-
from cartography.util import aws_handle_regions
|
|
12
|
-
from cartography.util import timeit
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
@timeit
|
|
18
|
-
@aws_handle_regions
|
|
19
|
-
def get_ec2_key_pairs(boto3_session: boto3.session.Session, region: str) -> List[Dict]:
|
|
20
|
-
client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
|
|
21
|
-
return client.describe_key_pairs()['KeyPairs']
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
@timeit
|
|
25
|
-
def load_ec2_key_pairs(
|
|
26
|
-
neo4j_session: neo4j.Session, data: List[Dict], region: str, current_aws_account_id: str,
|
|
27
|
-
update_tag: int,
|
|
28
|
-
) -> None:
|
|
29
|
-
ingest_key_pair = """
|
|
30
|
-
MERGE (keypair:KeyPair:EC2KeyPair{arn: $ARN, id: $ARN})
|
|
31
|
-
ON CREATE SET keypair.firstseen = timestamp()
|
|
32
|
-
SET keypair.keyname = $KeyName, keypair.keyfingerprint = $KeyFingerprint, keypair.region = $Region,
|
|
33
|
-
keypair.lastupdated = $update_tag
|
|
34
|
-
WITH keypair
|
|
35
|
-
MATCH (aa:AWSAccount{id: $AWS_ACCOUNT_ID})
|
|
36
|
-
MERGE (aa)-[r:RESOURCE]->(keypair)
|
|
37
|
-
ON CREATE SET r.firstseen = timestamp()
|
|
38
|
-
SET r.lastupdated = $update_tag
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
for key_pair in data:
|
|
42
|
-
key_name = key_pair["KeyName"]
|
|
43
|
-
key_fingerprint = key_pair.get("KeyFingerprint")
|
|
44
|
-
key_pair_arn = f'arn:aws:ec2:{region}:{current_aws_account_id}:key-pair/{key_name}'
|
|
45
|
-
|
|
46
|
-
neo4j_session.run(
|
|
47
|
-
ingest_key_pair,
|
|
48
|
-
ARN=key_pair_arn,
|
|
49
|
-
KeyName=key_name,
|
|
50
|
-
KeyFingerprint=key_fingerprint,
|
|
51
|
-
AWS_ACCOUNT_ID=current_aws_account_id,
|
|
52
|
-
Region=region,
|
|
53
|
-
update_tag=update_tag,
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@timeit
|
|
58
|
-
def cleanup_ec2_key_pairs(neo4j_session: neo4j.Session, common_job_parameters: Dict) -> None:
|
|
59
|
-
GraphJob.from_node_schema(EC2KeyPairSchema(), common_job_parameters).run(neo4j_session)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
@timeit
|
|
63
|
-
def sync_ec2_key_pairs(
|
|
64
|
-
neo4j_session: neo4j.Session, boto3_session: boto3.session.Session, regions: List[str], current_aws_account_id: str,
|
|
65
|
-
update_tag: int, common_job_parameters: Dict,
|
|
66
|
-
) -> None:
|
|
67
|
-
for region in regions:
|
|
68
|
-
logger.info("Syncing EC2 key pairs for region '%s' in account '%s'.", region, current_aws_account_id)
|
|
69
|
-
data = get_ec2_key_pairs(boto3_session, region)
|
|
70
|
-
load_ec2_key_pairs(neo4j_session, data, region, current_aws_account_id, update_tag)
|
|
71
|
-
cleanup_ec2_key_pairs(neo4j_session, common_job_parameters)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|