cloudg 0.5.2__tar.gz → 0.5.3__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.
- {cloudg-0.5.2 → cloudg-0.5.3}/PKG-INFO +1 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/README.md +1 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/__init__.py +1 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/context.py +2 -2
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/iam.py +2 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/names.py +20 -3
- {cloudg-0.5.2 → cloudg-0.5.3}/pyproject.toml +1 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_aws_network_ext.py +2 -2
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_inventory_deep.py +1 -1
- {cloudg-0.5.2 → cloudg-0.5.3}/.gitignore +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/LICENSE +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/api.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/cli.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/cli_commands.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/cli_helpers.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/cli_inventory.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/cli_run_helpers.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/aws.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/aws_services.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/aws_services_extended.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/azure.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/base.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/gcp.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/gcp_assets.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/collectors/multi.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/config.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/coverage.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/credentials.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/builder.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/ontology.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/ontology_rules.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/rag_export.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/graph/reachability.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/ingest.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/_util.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_deep.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_deep_tasks.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/_base.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/_policy_grants.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/_common.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/alarms.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/backup.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/batch.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/build_deploy.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/cicd.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/compute.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/containers_ext.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/firehose.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/integration.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/logs.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/operations.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/application/serverless_ext.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/cloudcontrol.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/containers/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/containers/ecr.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/containers/ecs.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/containers/eks.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/_common.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/analytics.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/bedrock.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/databases.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/glue.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/glue_etl.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/lakeformation.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/messaging.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/registry.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/sagemaker.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/serverless_data.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/data_ml/transfer.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/_common.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/cognito.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/data_protection.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/iam_extras.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/identity_center.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/ram.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/s3_access_points.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/service_catalog.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/sharing.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/governance/stack_sets.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/identity.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/_common.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/apigateway.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/cloudfront.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/direct_connect.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/elb_rules.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/global_accelerator.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/lattice.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/network_manager.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/privatelink.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/resolver.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/tgw.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/vpn.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/compute_fabric.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/data.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/dns_iac_ops.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/load_balancing.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/platform/storage.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/security/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/security/_common.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/security/detection.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/security/network_protection.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/security/posture.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/serverless/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/serverless/apigateway.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/serverless/functions.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/serverless/messaging.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_deep.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/arm_types.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/builder.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/compute.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/data_security.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/edge.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/helpers.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/network.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/query.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/registry.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_graph/web_containers.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/azure_hierarchy.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/catalogs/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/catalogs/aws_arn_types.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/catalogs/aws_cloudcontrol.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/catalogs/azure_arm_types.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/catalogs/gcp_asset_types.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/dependencies.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_deep.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_hierarchy.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/compute.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/data_logging.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/gke.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/load_balancing.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/messaging.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/network.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/pipelines.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/resource_manager.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/gcp_relations/serverless.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/kubernetes.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/linker.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/linker_index.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/mapper.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/mapper_result.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/organization.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/organization_assets.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/normaliser.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/policies/custodian-aws-security.yml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/policies/custodian-azure.yml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/policies/custodian-gcp.yml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/policies/custodian.yml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/region_discovery.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/registry.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/html_report.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/json_export.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/svg.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/svg_layout.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/renderers/terraform_export.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/retry.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/check_equivalence.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/cis_aws_v3.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/cis_azure_v2.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/cis_gcp_v3.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/aws_foundational_security_best_practices_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/cis_5.0_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/cis_5.0_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/cis_5.0_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/gdpr_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/hipaa_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/hipaa_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/hipaa_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/iso27001_2022_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/iso27001_2022_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/iso27001_2022_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/mitre_attack_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/mitre_attack_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/mitre_attack_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/nist_800_53_revision_5_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/nist_csf_2.0_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/pci_4.0_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/pci_4.0_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/pci_4.0_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/soc2_aws.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/soc2_azure.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/frameworks/soc2_gcp.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/gdpr.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/hipaa_security_rule.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/iso_27001_2022.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/nist_800_53.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/pci_dss_v4.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/rules/soc2_tsc.yaml +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/checkov.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/iam_linter.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/prowler.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/scoutsuite.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/scanners/trivy.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/schema/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/schema/models.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/templates/report.html.j2 +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/cloudg/ui.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/docs/DOCUMENTATION.md +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/__init__.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/conftest.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_api.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_aws_application.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_aws_data_ml.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_aws_governance.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_azure_inventory.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_catalogs_cloudcontrol.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_collectors.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_gcp_inventory.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_ingest.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_inventory.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_normaliser.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_ontology.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_rag_export.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_region_discovery.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_scanner_orchestration.py +0 -0
- {cloudg-0.5.2 → cloudg-0.5.3}/tests/test_terraform_export.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cloudg
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: cloudg (cloud graphing) - multi-cloud infrastructure mapping, knowledge graphs and security intelligence for AWS, Azure and GCP
|
|
5
5
|
Project-URL: Homepage, https://github.com/morpheuslord/cloudg
|
|
6
6
|
Project-URL: Repository, https://github.com/morpheuslord/cloudg
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License: MIT"></a>
|
|
7
7
|
<img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+">
|
|
8
|
-
<img src="https://img.shields.io/badge/version-0.5.
|
|
8
|
+
<img src="https://img.shields.io/badge/version-0.5.3-4c1.svg" alt="Version 0.5.3">
|
|
9
9
|
<a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv"></a>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
@@ -8,7 +8,7 @@ from dataclasses import dataclass, field
|
|
|
8
8
|
from typing import Any, Callable, Iterable
|
|
9
9
|
|
|
10
10
|
from cloudg.inventory.aws_services._base import rel
|
|
11
|
-
from cloudg.inventory.gcp_relations.names import kms_refs, sa_email, sa_ref
|
|
11
|
+
from cloudg.inventory.gcp_relations.names import asset_type_service, kms_refs, sa_email, sa_ref
|
|
12
12
|
from cloudg.schema.models import CloudAsset, EdgeType
|
|
13
13
|
|
|
14
14
|
logger = logging.getLogger(__package__)
|
|
@@ -124,7 +124,7 @@ def extract(ctx: GCPContext) -> Extracted:
|
|
|
124
124
|
except Exception as exc: # one malformed resource must not stop the sweep
|
|
125
125
|
logger.debug("GCP extractor failed for %s: %s", ctx.name, exc, exc_info=True)
|
|
126
126
|
out.metadata["extraction_error"] = f"{type(exc).__name__}: {exc}"
|
|
127
|
-
if ctx.asset_type
|
|
127
|
+
if asset_type_service(ctx.asset_type) == "cloudkms":
|
|
128
128
|
return out
|
|
129
129
|
keys = kms_refs(ctx.data)
|
|
130
130
|
if keys:
|
|
@@ -16,6 +16,7 @@ from cloudg.inventory.gcp_relations.names import (
|
|
|
16
16
|
PUBLIC_MEMBERS,
|
|
17
17
|
_list,
|
|
18
18
|
_num,
|
|
19
|
+
api_service,
|
|
19
20
|
dig,
|
|
20
21
|
sa_email,
|
|
21
22
|
sa_ref,
|
|
@@ -252,7 +253,7 @@ def _mark_public(target: CloudAsset, member: str, role: str) -> None:
|
|
|
252
253
|
def _is_sa_resource(resource: str) -> bool:
|
|
253
254
|
return (
|
|
254
255
|
"/serviceAccounts/" in resource
|
|
255
|
-
and resource
|
|
256
|
+
and api_service(resource) == "iam"
|
|
256
257
|
and "/keys/" not in resource
|
|
257
258
|
)
|
|
258
259
|
|
|
@@ -38,6 +38,10 @@ _API_URL_RE = re.compile(
|
|
|
38
38
|
)
|
|
39
39
|
_BARE_API_RE = re.compile(r"^([a-z0-9-]+)\.googleapis\.com/(.+)$")
|
|
40
40
|
_KEY_VERSION_RE = re.compile(r"/cryptoKeyVersions/[^/]+$")
|
|
41
|
+
# API service of a full resource name ("//<svc>.googleapis.com/...") or of an
|
|
42
|
+
# asset type ("<svc>.googleapis.com/Type"), anchored at the start
|
|
43
|
+
_FULL_NAME_SERVICE_RE = re.compile(r"^//([a-z0-9-]+)\.googleapis\.com/")
|
|
44
|
+
_ASSET_TYPE_SERVICE_RE = re.compile(r"^([a-z0-9-]+)\.googleapis\.com/")
|
|
41
45
|
_CRYPTO_KEY_RE = re.compile(
|
|
42
46
|
r"(projects/[^/\s\"']+/locations/[^/\s\"']+/keyRings/[^/\s\"']+/cryptoKeys/[^/\s\"']+)"
|
|
43
47
|
)
|
|
@@ -161,13 +165,26 @@ def _bare_api_full_name(service: str, rest: str) -> str:
|
|
|
161
165
|
return f"//{svc}.googleapis.com/{rest}"
|
|
162
166
|
|
|
163
167
|
|
|
168
|
+
def api_service(name: Any) -> str | None:
|
|
169
|
+
"""API service of a full resource name: ``//compute.googleapis.com/...`` -> ``compute``."""
|
|
170
|
+
m = _FULL_NAME_SERVICE_RE.match(name) if isinstance(name, str) else None
|
|
171
|
+
return m.group(1) if m else None
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def asset_type_service(asset_type: Any) -> str | None:
|
|
175
|
+
"""API service of a CAI asset type: ``cloudkms.googleapis.com/CryptoKey`` -> ``cloudkms``."""
|
|
176
|
+
m = _ASSET_TYPE_SERVICE_RE.match(asset_type) if isinstance(asset_type, str) else None
|
|
177
|
+
return m.group(1) if m else None
|
|
178
|
+
|
|
179
|
+
|
|
164
180
|
def _canonical_full_name(out: str) -> str:
|
|
165
181
|
"""Drop query/fragment and key versions; fold service aliases."""
|
|
166
182
|
out = out.split("?", 1)[0].split("#", 1)[0].rstrip("/")
|
|
167
183
|
out = _KEY_VERSION_RE.sub("", out)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
184
|
+
service = api_service(out)
|
|
185
|
+
if service == "sqladmin":
|
|
186
|
+
out = "//cloudsql.googleapis.com/" + relative_name(out)
|
|
187
|
+
elif service == "container":
|
|
171
188
|
out = out.replace("/zones/", "/locations/")
|
|
172
189
|
return out
|
|
173
190
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cloudg"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.3"
|
|
4
4
|
description = "cloudg (cloud graphing) - multi-cloud infrastructure mapping, knowledge graphs and security intelligence for AWS, Azure and GCP"
|
|
5
5
|
# The PyPI project page renders the full documentation, not the repo README
|
|
6
6
|
readme = "docs/DOCUMENTATION.md"
|
|
@@ -660,7 +660,7 @@ class TestEdgeAndResolver:
|
|
|
660
660
|
for key in ("status", "domain_name", "origins", "web_acl_id", "viewer_protocol_policy"):
|
|
661
661
|
assert key in cf_asset.metadata, key
|
|
662
662
|
assert cf_asset.metadata["viewer_protocol_policy"] == "redirect-to-https"
|
|
663
|
-
assert "www.example.com"
|
|
663
|
+
assert {"www.example.com"} <= set(cf_asset.metadata["aliases"])
|
|
664
664
|
assert "s3cr3t" not in json.dumps(cf_asset.model_dump(mode="json"))
|
|
665
665
|
bucket, logs_bucket, alb_asset = (
|
|
666
666
|
by_arn["arn:aws:s3:::site-assets"],
|
|
@@ -986,7 +986,7 @@ class TestFakeClientCollectors:
|
|
|
986
986
|
accel = _one(assets, AssetType.GLOBAL_ACCELERATOR)
|
|
987
987
|
assert accel.is_internet_exposed and accel.region == "global"
|
|
988
988
|
assert accel.metadata["ip_addresses"] == ["75.2.0.1", "99.83.0.1"]
|
|
989
|
-
assert "a1234.awsglobalaccelerator.com"
|
|
989
|
+
assert {"a1234.awsglobalaccelerator.com"} <= set(accel.metadata["aliases"])
|
|
990
990
|
alb_asset = next(a for a in assets if a.arn == alb)
|
|
991
991
|
assert _edge(edges, accel, alb_asset, EdgeType.LOAD_BALANCER_TARGET)
|
|
992
992
|
assert ("list_custom_routing_accelerators", {}) in ga.calls
|
|
@@ -744,7 +744,7 @@ class TestDeepServiceCollectors:
|
|
|
744
744
|
assert _edge(edges, bucket, queue, EdgeType.INVOKES) # S3 notification
|
|
745
745
|
assert _edge(edges, role, queue, EdgeType.GRANTS_ACCESS) # inline policy grant
|
|
746
746
|
assert role.metadata["trusted_external_accounts"] == ["999999999999"]
|
|
747
|
-
assert "lambda.amazonaws.com"
|
|
747
|
+
assert {"lambda.amazonaws.com"} <= set(role.metadata["trusted_services"])
|
|
748
748
|
|
|
749
749
|
def test_disabled_security_services_are_visible(self, aws_credentials):
|
|
750
750
|
session = boto3.Session(region_name="us-east-1")
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudg-0.5.2 → cloudg-0.5.3}/cloudg/inventory/aws_services/network_ext/global_accelerator.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|