s1-shift-left-cli 0.4.0__py3-none-any.whl
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.
- s1_cns_cli/__init__.py +0 -0
- s1_cns_cli/cli/__init__.py +0 -0
- s1_cns_cli/cli/command_line_arguments.py +683 -0
- s1_cns_cli/cli/config/__init__.py +1 -0
- s1_cns_cli/cli/config/config.py +64 -0
- s1_cns_cli/cli/config/config_manager.py +30 -0
- s1_cns_cli/cli/main.py +167 -0
- s1_cns_cli/cli/registry.py +361 -0
- s1_cns_cli/cli/scan/__init__.py +0 -0
- s1_cns_cli/cli/scan/code_scanner.py +62 -0
- s1_cns_cli/cli/scan/iac.py +798 -0
- s1_cns_cli/cli/scan/secret.py +423 -0
- s1_cns_cli/cli/scan/vulnerability.py +396 -0
- s1_cns_cli/cli/utils.py +545 -0
- s1_cns_cli/s1graph/__init__.py +0 -0
- s1_cns_cli/s1graph/ansible/__init__.py +1 -0
- s1_cns_cli/s1graph/ansible/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/ansible/checks/base_ansible_task_check.py +76 -0
- s1_cns_cli/s1graph/ansible/checks/base_ansible_task_value_check.py +79 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/BlockErrorHandling.yaml +10 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/DnfDisableGpgCheck.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/DnfSslVerify.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/DnfValidateCerts.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/GetUrlHttpsOnly.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosInterfaceMgmtProfileNoHTTP.yaml +17 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosInterfaceMgmtProfileNoTelnet.yaml +17 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyDescription.yaml +16 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyLogForwarding.yaml +16 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyLoggingEnabled.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyNoApplicationAny.yaml +22 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyNoDSRI.yaml +17 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyNoServiceAny.yaml +22 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosPolicyNoSrcAnyDstAny.yaml +40 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosZoneProtectionProfile.yaml +16 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/PanosZoneUserIDIncludeACL.yaml +31 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/UriHttpsOnly.yaml +12 -0
- s1_cns_cli/s1graph/ansible/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/ansible/checks/registry.py +4 -0
- s1_cns_cli/s1graph/ansible/checks/task/__init__.py +2 -0
- s1_cns_cli/s1graph/ansible/checks/task/aws/EC2EBSOptimized.py +31 -0
- s1_cns_cli/s1graph/ansible/checks/task/aws/EC2PublicIP.py +34 -0
- s1_cns_cli/s1graph/ansible/checks/task/aws/__init__.py +4 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/AptAllowUnauthenticated.py +28 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/AptForce.py +28 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/GetUrlValidateCerts.py +23 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/UriValidateCerts.py +23 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/YumSslVerify.py +23 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/YumValidateCerts.py +23 -0
- s1_cns_cli/s1graph/ansible/checks/task/builtin/__init__.py +4 -0
- s1_cns_cli/s1graph/ansible/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/ansible/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/ansible/graph_builder/graph_components/resource_types.py +10 -0
- s1_cns_cli/s1graph/ansible/graph_builder/local_graph.py +145 -0
- s1_cns_cli/s1graph/ansible/runner.py +132 -0
- s1_cns_cli/s1graph/ansible/utils.py +91 -0
- s1_cns_cli/s1graph/argo_workflows/__init__.py +1 -0
- s1_cns_cli/s1graph/argo_workflows/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/argo_workflows/checks/base_argo_workflows_check.py +41 -0
- s1_cns_cli/s1graph/argo_workflows/checks/registry.py +4 -0
- s1_cns_cli/s1graph/argo_workflows/checks/template/DefaultServiceAccount.py +29 -0
- s1_cns_cli/s1graph/argo_workflows/checks/template/RunAsNonRoot.py +31 -0
- s1_cns_cli/s1graph/argo_workflows/checks/template/__init__.py +4 -0
- s1_cns_cli/s1graph/argo_workflows/common/__init__.py +0 -0
- s1_cns_cli/s1graph/argo_workflows/runner.py +142 -0
- s1_cns_cli/s1graph/arm/__init__.py +1 -0
- s1_cns_cli/s1graph/arm/base_parameter_check.py +44 -0
- s1_cns_cli/s1graph/arm/base_registry.py +16 -0
- s1_cns_cli/s1graph/arm/base_resource_check.py +66 -0
- s1_cns_cli/s1graph/arm/base_resource_negative_value_check.py +70 -0
- s1_cns_cli/s1graph/arm/base_resource_value_check.py +72 -0
- s1_cns_cli/s1graph/arm/checks/__init__.py +2 -0
- s1_cns_cli/s1graph/arm/checks/graph_checks/AzureSpringCloudConfigWithVnet.yaml +15 -0
- s1_cns_cli/s1graph/arm/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/arm/checks/parameter/SecureStringParameterNoHardcodedValue.py +23 -0
- s1_cns_cli/s1graph/arm/checks/parameter/__init__.py +5 -0
- s1_cns_cli/s1graph/arm/checks/resource/AKSApiServerAuthorizedIpRanges.py +45 -0
- s1_cns_cli/s1graph/arm/checks/resource/AKSDashboardDisabled.py +39 -0
- s1_cns_cli/s1graph/arm/checks/resource/AKSLoggingEnabled.py +39 -0
- s1_cns_cli/s1graph/arm/checks/resource/AKSNetworkPolicy.py +36 -0
- s1_cns_cli/s1graph/arm/checks/resource/AKSRbacEnabled.py +33 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceAuthentication.py +39 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceClientCertificate.py +27 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceHTTPSOnly.py +26 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceHttps20Enabled.py +24 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceIdentity.py +32 -0
- s1_cns_cli/s1graph/arm/checks/resource/AppServiceMinTLSVersion.py +24 -0
- s1_cns_cli/s1graph/arm/checks/resource/AzureInstancePassword.py +37 -0
- s1_cns_cli/s1graph/arm/checks/resource/AzureManagedDiscEncryption.py +30 -0
- s1_cns_cli/s1graph/arm/checks/resource/AzureScaleSetPassword.py +38 -0
- s1_cns_cli/s1graph/arm/checks/resource/CosmosDBDisableAccessKeyWrite.py +24 -0
- s1_cns_cli/s1graph/arm/checks/resource/CustomRoleDefinitionSubscriptionOwner.py +39 -0
- s1_cns_cli/s1graph/arm/checks/resource/KeyvaultRecoveryEnabled.py +28 -0
- s1_cns_cli/s1graph/arm/checks/resource/MariaDBSSLEnforcementEnabled.py +22 -0
- s1_cns_cli/s1graph/arm/checks/resource/MonitorLogProfileCategories.py +27 -0
- s1_cns_cli/s1graph/arm/checks/resource/MonitorLogProfileRetentionDays.py +31 -0
- s1_cns_cli/s1graph/arm/checks/resource/MySQLServerSSLEnforcementEnabled.py +22 -0
- s1_cns_cli/s1graph/arm/checks/resource/NSGRulePortAccessRestricted.py +65 -0
- s1_cns_cli/s1graph/arm/checks/resource/NSGRuleRDPAccessRestricted.py +11 -0
- s1_cns_cli/s1graph/arm/checks/resource/NSGRuleSSHAccessRestricted.py +9 -0
- s1_cns_cli/s1graph/arm/checks/resource/NetworkWatcherFlowLogPeriod.py +38 -0
- s1_cns_cli/s1graph/arm/checks/resource/PostgreSQLServerConnectionThrottlingEnabled.py +43 -0
- s1_cns_cli/s1graph/arm/checks/resource/PostgreSQLServerLogCheckpointsEnabled.py +44 -0
- s1_cns_cli/s1graph/arm/checks/resource/PostgreSQLServerLogConnectionsEnabled.py +44 -0
- s1_cns_cli/s1graph/arm/checks/resource/PostgreSQLServerSSLEnforcementEnabled.py +22 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerAuditingEnabled.py +42 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerAuditingRetention90Days.py +43 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerEmailAlertsEnabled.py +42 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerEmailAlertsToAdminsEnabled.py +43 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerNoPublicAccess.py +38 -0
- s1_cns_cli/s1graph/arm/checks/resource/SQLServerThreatDetectionTypes.py +37 -0
- s1_cns_cli/s1graph/arm/checks/resource/SecretExpirationDate.py +27 -0
- s1_cns_cli/s1graph/arm/checks/resource/SecurityCenterContactEmailAlert.py +26 -0
- s1_cns_cli/s1graph/arm/checks/resource/SecurityCenterContactEmailAlertAdmins.py +26 -0
- s1_cns_cli/s1graph/arm/checks/resource/SecurityCenterContactPhone.py +26 -0
- s1_cns_cli/s1graph/arm/checks/resource/SecurityCenterStandardPricing.py +26 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageAccountAzureServicesAccessEnabled.py +40 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageAccountDefaultNetworkAccessDeny.py +38 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageAccountDisablePublicAccess.py +24 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageAccountLoggingQueueServiceEnabled.py +41 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageAccountsTransportEncryption.py +40 -0
- s1_cns_cli/s1graph/arm/checks/resource/StorageBlobServiceContainerPrivateAccess.py +32 -0
- s1_cns_cli/s1graph/arm/checks/resource/__init__.py +5 -0
- s1_cns_cli/s1graph/arm/context_parser.py +229 -0
- s1_cns_cli/s1graph/arm/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/arm/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/arm/graph_builder/graph_components/block_types.py +12 -0
- s1_cns_cli/s1graph/arm/graph_builder/graph_components/blocks.py +19 -0
- s1_cns_cli/s1graph/arm/graph_builder/local_graph.py +109 -0
- s1_cns_cli/s1graph/arm/graph_manager.py +42 -0
- s1_cns_cli/s1graph/arm/parser/__init__.py +0 -0
- s1_cns_cli/s1graph/arm/parser/parser.py +79 -0
- s1_cns_cli/s1graph/arm/registry.py +4 -0
- s1_cns_cli/s1graph/arm/runner.py +291 -0
- s1_cns_cli/s1graph/arm/utils.py +59 -0
- s1_cns_cli/s1graph/azure_pipelines/__init__.py +1 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/base_azure_pipelines_check.py +41 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/job/ContainerDigest.py +33 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/job/ContainerLatestTag.py +42 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/job/DetectImagesUsage.py +26 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/job/SetSecretVariable.py +41 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/job/__init__.py +4 -0
- s1_cns_cli/s1graph/azure_pipelines/checks/registry.py +4 -0
- s1_cns_cli/s1graph/azure_pipelines/common/__init__.py +0 -0
- s1_cns_cli/s1graph/azure_pipelines/common/resource_id_utils.py +41 -0
- s1_cns_cli/s1graph/azure_pipelines/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/azure_pipelines/image_referencer/manager.py +13 -0
- s1_cns_cli/s1graph/azure_pipelines/image_referencer/provider.py +71 -0
- s1_cns_cli/s1graph/azure_pipelines/runner.py +97 -0
- s1_cns_cli/s1graph/bicep/__init__.py +1 -0
- s1_cns_cli/s1graph/bicep/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/checks/graph_checks/SQLServerAuditingEnabled.yaml +39 -0
- s1_cns_cli/s1graph/bicep/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/checks/param/__init__.py +1 -0
- s1_cns_cli/s1graph/bicep/checks/param/azure/SecureStringParameterNoHardcodedValue.py +27 -0
- s1_cns_cli/s1graph/bicep/checks/param/azure/__init__.py +4 -0
- s1_cns_cli/s1graph/bicep/checks/param/base_param_check.py +48 -0
- s1_cns_cli/s1graph/bicep/checks/param/base_registry.py +36 -0
- s1_cns_cli/s1graph/bicep/checks/param/registry.py +3 -0
- s1_cns_cli/s1graph/bicep/checks/resource/__init__.py +1 -0
- s1_cns_cli/s1graph/bicep/checks/resource/azure/StorageAccountAzureServicesAccessEnabled.py +36 -0
- s1_cns_cli/s1graph/bicep/checks/resource/azure/StorageAccountDefaultNetworkAccessDeny.py +24 -0
- s1_cns_cli/s1graph/bicep/checks/resource/azure/StorageAccountsTransportEncryption.py +40 -0
- s1_cns_cli/s1graph/bicep/checks/resource/azure/__init__.py +4 -0
- s1_cns_cli/s1graph/bicep/checks/resource/base_registry.py +58 -0
- s1_cns_cli/s1graph/bicep/checks/resource/base_resource_check.py +47 -0
- s1_cns_cli/s1graph/bicep/checks/resource/base_resource_value_check.py +68 -0
- s1_cns_cli/s1graph/bicep/checks/resource/registry.py +3 -0
- s1_cns_cli/s1graph/bicep/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/graph_builder/context_definitions.py +57 -0
- s1_cns_cli/s1graph/bicep/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/graph_builder/graph_components/block_types.py +16 -0
- s1_cns_cli/s1graph/bicep/graph_builder/graph_components/blocks.py +19 -0
- s1_cns_cli/s1graph/bicep/graph_builder/graph_to_tf_definitions.py +48 -0
- s1_cns_cli/s1graph/bicep/graph_builder/local_graph.py +337 -0
- s1_cns_cli/s1graph/bicep/graph_builder/variable_rendering/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/graph_builder/variable_rendering/renderer.py +57 -0
- s1_cns_cli/s1graph/bicep/graph_manager.py +41 -0
- s1_cns_cli/s1graph/bicep/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/image_referencer/base_provider.py +38 -0
- s1_cns_cli/s1graph/bicep/image_referencer/manager.py +19 -0
- s1_cns_cli/s1graph/bicep/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/bicep/image_referencer/provider/azure.py +74 -0
- s1_cns_cli/s1graph/bicep/parser.py +50 -0
- s1_cns_cli/s1graph/bicep/runner.py +281 -0
- s1_cns_cli/s1graph/bicep/utils.py +113 -0
- s1_cns_cli/s1graph/bitbucket/__init__.py +1 -0
- s1_cns_cli/s1graph/bitbucket/base_bitbucket_configuration_check.py +43 -0
- s1_cns_cli/s1graph/bitbucket/checks/__init__.py +4 -0
- s1_cns_cli/s1graph/bitbucket/checks/merge_requests_approvals.py +35 -0
- s1_cns_cli/s1graph/bitbucket/dal.py +78 -0
- s1_cns_cli/s1graph/bitbucket/registry.py +4 -0
- s1_cns_cli/s1graph/bitbucket/runner.py +55 -0
- s1_cns_cli/s1graph/bitbucket/schemas/__init__.py +0 -0
- s1_cns_cli/s1graph/bitbucket/schemas/branch_restrictions.py +210 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/__init__.py +1 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/base_bitbucket_pipelines_check.py +39 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/checks/__init__.py +4 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/checks/latest_image.py +38 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/registry.py +4 -0
- s1_cns_cli/s1graph/bitbucket_pipelines/runner.py +141 -0
- s1_cns_cli/s1graph/circleci_pipelines/__init__.py +1 -0
- s1_cns_cli/s1graph/circleci_pipelines/base_circleci_pipelines_check.py +42 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/DetectImagesUsage.py +27 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/ReverseShellNetcat.py +38 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/ShellInjection.py +42 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/SuspectCurlInScript.py +37 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/__init__.py +4 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/image_version_not_hash.py +37 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/latest_image.py +33 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/prevent_development_orbs.py +32 -0
- s1_cns_cli/s1graph/circleci_pipelines/checks/prevent_volatile_orbs.py +32 -0
- s1_cns_cli/s1graph/circleci_pipelines/common/__init__.py +0 -0
- s1_cns_cli/s1graph/circleci_pipelines/common/shell_injection_list.py +8 -0
- s1_cns_cli/s1graph/circleci_pipelines/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/circleci_pipelines/image_referencer/manager.py +12 -0
- s1_cns_cli/s1graph/circleci_pipelines/image_referencer/provider.py +50 -0
- s1_cns_cli/s1graph/circleci_pipelines/registry.py +4 -0
- s1_cns_cli/s1graph/circleci_pipelines/runner.py +123 -0
- s1_cns_cli/s1graph/cloudformation/__init__.py +1 -0
- s1_cns_cli/s1graph/cloudformation/cfn_utils.py +238 -0
- s1_cns_cli/s1graph/cloudformation/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/checks/graph_checks/AppSyncProtectedByWAF.yaml +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/BaseCloudsplainingIAMCheck.py +82 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ALBDropHttpHeaders.py +41 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ALBListenerHTTPS.py +49 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ALBListenerTLS12.py +57 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/APIGatewayAccessLogging.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/APIGatewayAuthorization.py +26 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/APIGatewayCacheEnable.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/APIGatewayV2AccessLogging.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/APIGatewayXray.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AbsSecurityGroupUnrestrictedIngress.py +50 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AmazonMQBrokerPublicAccess.py +33 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AppSyncFieldLevelLogs.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AppSyncLogging.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AthenaWorkgroupConfiguration.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/AuroraEncryption.py +33 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/BackupVaultEncrypted.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudFrontTLS12.py +25 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudWatchLogGroupKMSKey.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudWatchLogGroupRetention.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudfrontDistributionEncryption.py +38 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudfrontDistributionLogging.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudtrailEncryption.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudtrailLogValidation.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CloudtrailMultiRegion.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/CodeBuildProjectEncryption.py +34 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DAXEncryption.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DMSReplicationInstancePubliclyAccessible.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DocDBAuditLogs.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DocDBEncryption.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DocDBLogging.py +27 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DocDBTLS.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DynamoDBTablesEncrypted.py +30 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DynamodbGlobalTableRecovery.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/DynamodbRecovery.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EBSDefaultEncryption.py +8 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EBSEncryption.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EC2Credentials.py +42 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EC2PublicIP.py +47 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECRImageScanning.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECRImmutableTags.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECRPolicy.py +81 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECRRepositoryEncrypted.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECSClusterContainerInsights.py +34 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ECSTaskDefinitionEFSVolumeEncryption.py +33 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EFSEncryptionEnabled.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EKSControlPlaneLogging.py +7 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EKSNodeGroupRemoteAccess.py +31 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EKSPublicAccess.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EKSPublicAccessCIDR.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/EKSSecretsEncryption.py +32 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ELBAccessLogs.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ELBv2AccessLogs.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtRest.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtTransit.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtTransitAuthToken.py +32 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticsearchDomainAuditLogging.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticsearchDomainEnforceHTTPS.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticsearchDomainLogging.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticsearchEncryption.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/ElasticsearchNodeToNodeEncryption.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/GlobalAcceleratorAcceleratorFlowLogs.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/GlueDataCatalogEncryption.py +37 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/GlueSecurityConfiguration.py +49 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/GlueSecurityConfigurationEnabled.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMAdminPolicyDocument.py +53 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMCredentialsExposure.py +29 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMDataExfiltration.py +15 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMPermissionsManagement.py +15 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMPolicyAttachedToGroupOrRoles.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMPrivilegeEscalation.py +16 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMRoleAllowAssumeFromAccount.py +53 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMRoleAllowsPublicAssume.py +52 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMStarActionPolicyDocument.py +56 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IAMWriteAccess.py +15 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/IMDSv1Disabled.py +30 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/KMSKeyWildCardPrincipal.py +61 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/KMSRotation.py +27 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/KinesisStreamEncryptionType.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaDLQConfigured.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaEnvironmentCredentials.py +37 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaEnvironmentEncryptionSettings.py +30 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaFunctionLevelConcurrentExecutionLimit.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaFunctionURLAuth.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LambdaInVPC.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/LaunchConfigurationEBSEncryption.py +38 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/MQBrokerAuditLogging.py +29 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/NeptuneClusterInstancePublic.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/NeptuneClusterLogging.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/NeptuneClusterStorageEncrypted.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyExpiration.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyLength.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyLowercaseLetter.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyNumber.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyReuse.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicySymbol.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/PasswordPolicyUppercaseLetter.py +6 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/QLDBLedgerDeletionProtection.py +26 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/QLDBLedgerPermissionsMode.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSClusterIAMAuthentication.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSEncryption.py +27 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSEnhancedMonitorEnabled.py +25 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSIAMAuthentication.py +26 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSMultiAZEnabled.py +27 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RDSPubliclyAccessible.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RedShiftSSL.py +28 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RedshiftClusterEncryption.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RedshiftClusterLogging.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RedshiftClusterPubliclyAccessible.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/RedshiftInEc2ClassicMode.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3AccessLogs.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3BlockPublicACLs.py +18 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3BlockPublicPolicy.py +18 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3Encryption.py +25 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3IgnorePublicACLs.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3PublicACLRead.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3PublicACLWrite.py +22 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3RestrictPublicBuckets.py +18 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/S3Versioning.py +25 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SNSTopicEncryption.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SQSQueueEncryption.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SecretManagerSecretEncrypted.py +29 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SecurityGroupRuleDescription.py +46 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SecurityGroupUnrestrictedIngress22.py +10 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SecurityGroupUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/SecurityGroupUnrestrictedIngress80.py +10 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/TimestreamDatabaseKMSKey.py +23 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/TransferServerIsPublic.py +20 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/VPCEndpointAcceptanceConfigured.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/WAFACLCVE202144228.py +55 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/WAFEnabled.py +21 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/WorkspaceRootVolumeEncrypted.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/WorkspaceUserVolumeEncrypted.py +17 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/aws/__init__.py +5 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/base_registry.py +16 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/base_resource_check.py +48 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/base_resource_negative_value_check.py +76 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/base_resource_value_check.py +113 -0
- s1_cns_cli/s1graph/cloudformation/checks/resource/registry.py +3 -0
- s1_cns_cli/s1graph/cloudformation/checks/utils/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/checks/utils/iam_cloudformation_document_to_policy_converter.py +35 -0
- s1_cns_cli/s1graph/cloudformation/context_parser.py +193 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/graph_components/block_types.py +15 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/graph_components/blocks.py +94 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/graph_components/generic_resource_encryption.py +100 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/graph_to_definitions.py +42 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/local_graph.py +402 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/utils.py +67 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/variable_rendering/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/variable_rendering/renderer.py +516 -0
- s1_cns_cli/s1graph/cloudformation/graph_builder/variable_rendering/vertex_reference.py +13 -0
- s1_cns_cli/s1graph/cloudformation/graph_manager.py +55 -0
- s1_cns_cli/s1graph/cloudformation/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/image_referencer/base_provider.py +38 -0
- s1_cns_cli/s1graph/cloudformation/image_referencer/manager.py +19 -0
- s1_cns_cli/s1graph/cloudformation/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/cloudformation/image_referencer/provider/aws.py +98 -0
- s1_cns_cli/s1graph/cloudformation/parser/__init__.py +89 -0
- s1_cns_cli/s1graph/cloudformation/parser/cfn_keywords.py +50 -0
- s1_cns_cli/s1graph/cloudformation/parser/cfn_yaml.py +286 -0
- s1_cns_cli/s1graph/cloudformation/runner.py +283 -0
- s1_cns_cli/s1graph/common/__init__.py +1 -0
- s1_cns_cli/s1graph/common/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/common/checks/base_check.py +121 -0
- s1_cns_cli/s1graph/common/checks/base_check_registry.py +213 -0
- s1_cns_cli/s1graph/common/checks/enums.py +8 -0
- s1_cns_cli/s1graph/common/checks/object_registry.py +222 -0
- s1_cns_cli/s1graph/common/checks_infra/__init__.py +0 -0
- s1_cns_cli/s1graph/common/checks_infra/checks_parser.py +319 -0
- s1_cns_cli/s1graph/common/checks_infra/registry.py +92 -0
- s1_cns_cli/s1graph/common/checks_infra/resources_types.py +1291 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/__init__.py +4 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/__init__.py +43 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/any_attribute_solver.py +12 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/base_attribute_solver.py +217 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/base_number_of_words_attribute_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/contains_attribute_solver.py +24 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/ending_with_attribute_solver.py +12 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/equals_attribute_solver.py +19 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/equals_ignore_case_attribute_solver.py +17 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/exists_attribute_solver.py +12 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/greater_than_attribute_solver.py +21 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/greater_than_or_equal_attribute_solver.py +22 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/intersects_attribute_solver.py +19 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/is_empty_attribute_solver.py +16 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/is_false_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/is_not_empty_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/is_true_attribute_solver.py +15 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_equals_attribute_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_greater_than_attribute_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_greater_than_or_equal_attribute_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_less_than_attribute_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_less_than_or_equal_attribute_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/length_not_equals_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/less_than_attribute_solver.py +14 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/less_than_or_equal_attribute_solver.py +14 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_contains_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_ending_with_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_equals_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_equals_ignore_case_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_exists_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_intersects_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_regex_match_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_starting_with_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_subset_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/not_within_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_equals_attribute_solver.py +20 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_greater_than_attribute_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_greater_than_or_equal_attribute_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_less_than_attribute_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_less_than_or_equal_attribute_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/number_of_words_not_equals_attribute_solver.py +11 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/range_includes_attribute_solver.py +38 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/range_not_includes_attribute_solver.py +10 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/regex_match_attribute_solver.py +18 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/starting_with_attribute_solver.py +12 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/subset_attribute_solver.py +21 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/attribute_solvers/within_attribute_solver.py +12 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/complex_solvers/__init__.py +3 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/complex_solvers/and_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/complex_solvers/base_complex_solver.py +48 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/complex_solvers/not_solver.py +23 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/complex_solvers/or_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/__init__.py +5 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/and_connection_solver.py +44 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/base_connection_solver.py +105 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/complex_connection_solver.py +94 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/connection_exists_solver.py +81 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/connection_not_exists_solver.py +32 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/connection_one_exists_solver.py +33 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/connections_solvers/or_connection_solver.py +36 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/filter_solvers/__init__.py +1 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/filter_solvers/base_filter_solver.py +27 -0
- s1_cns_cli/s1graph/common/checks_infra/solvers/filter_solvers/within_filter_solver.py +23 -0
- s1_cns_cli/s1graph/common/comment/__init__.py +0 -0
- s1_cns_cli/s1graph/common/comment/enum.py +3 -0
- s1_cns_cli/s1graph/common/goget/__init__.py +0 -0
- s1_cns_cli/s1graph/common/goget/base_getter.py +23 -0
- s1_cns_cli/s1graph/common/goget/github/__init__.py +0 -0
- s1_cns_cli/s1graph/common/goget/github/get_git.py +82 -0
- s1_cns_cli/s1graph/common/goget/registry/__init__.py +0 -0
- s1_cns_cli/s1graph/common/goget/registry/get_registry.py +31 -0
- s1_cns_cli/s1graph/common/graph/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/base_check.py +52 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/base_parser.py +14 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/enums.py +75 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/registry.py +56 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/solvers/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/checks_infra/solvers/base_solver.py +32 -0
- s1_cns_cli/s1graph/common/graph/db_connectors/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/db_connectors/db_connector.py +29 -0
- s1_cns_cli/s1graph/common/graph/db_connectors/networkx/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/db_connectors/networkx/networkx_db_connector.py +50 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/__init__.py +2 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/consts.py +19 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/attribute_names.py +48 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/block_types.py +16 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/blocks.py +291 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/edge.py +29 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_components/generic_resource_encryption_base.py +51 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/graph_resources_encription_manager.py +29 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/local_graph.py +107 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/utils.py +46 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/variable_rendering/__init__.py +0 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/variable_rendering/breadcrumb_metadata.py +9 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/variable_rendering/renderer.py +134 -0
- s1_cns_cli/s1graph/common/graph/graph_builder/variable_rendering/vertex_reference.py +30 -0
- s1_cns_cli/s1graph/common/graph/graph_manager.py +49 -0
- s1_cns_cli/s1graph/common/images/__init__.py +0 -0
- s1_cns_cli/s1graph/common/images/graph/__init__.py +0 -0
- s1_cns_cli/s1graph/common/images/graph/image_referencer_manager.py +20 -0
- s1_cns_cli/s1graph/common/images/graph/image_referencer_provider.py +58 -0
- s1_cns_cli/s1graph/common/images/image_referencer.py +330 -0
- s1_cns_cli/s1graph/common/images/workflow/__init__.py +0 -0
- s1_cns_cli/s1graph/common/images/workflow/image_referencer_manager.py +21 -0
- s1_cns_cli/s1graph/common/images/workflow/image_referencer_provider.py +21 -0
- s1_cns_cli/s1graph/common/models/__init__.py +0 -0
- s1_cns_cli/s1graph/common/models/consts.py +35 -0
- s1_cns_cli/s1graph/common/models/enums.py +61 -0
- s1_cns_cli/s1graph/common/multi_signature.py +129 -0
- s1_cns_cli/s1graph/common/output/__init__.py +0 -0
- s1_cns_cli/s1graph/common/output/ai.py +152 -0
- s1_cns_cli/s1graph/common/output/baseline.py +98 -0
- s1_cns_cli/s1graph/common/output/common.py +54 -0
- s1_cns_cli/s1graph/common/output/csv.py +232 -0
- s1_cns_cli/s1graph/common/output/cyclonedx.py +470 -0
- s1_cns_cli/s1graph/common/output/cyclonedx_consts.py +181 -0
- s1_cns_cli/s1graph/common/output/extra_resource.py +18 -0
- s1_cns_cli/s1graph/common/output/github_actions_record.py +45 -0
- s1_cns_cli/s1graph/common/output/gitlab_sast.py +173 -0
- s1_cns_cli/s1graph/common/output/graph_record.py +17 -0
- s1_cns_cli/s1graph/common/output/record.py +246 -0
- s1_cns_cli/s1graph/common/output/report.py +607 -0
- s1_cns_cli/s1graph/common/output/sarif.py +243 -0
- s1_cns_cli/s1graph/common/output/secrets_record.py +144 -0
- s1_cns_cli/s1graph/common/packaging/__init__.py +0 -0
- s1_cns_cli/s1graph/common/packaging/version.py +141 -0
- s1_cns_cli/s1graph/common/parallelizer/__init__.py +0 -0
- s1_cns_cli/s1graph/common/parallelizer/parallel_runner.py +72 -0
- s1_cns_cli/s1graph/common/parsers/__init__.py +0 -0
- s1_cns_cli/s1graph/common/parsers/json/__init__.py +68 -0
- s1_cns_cli/s1graph/common/parsers/json/decoder.py +404 -0
- s1_cns_cli/s1graph/common/parsers/json/errors.py +41 -0
- s1_cns_cli/s1graph/common/parsers/node.py +189 -0
- s1_cns_cli/s1graph/common/parsers/yaml/__init__.py +0 -0
- s1_cns_cli/s1graph/common/parsers/yaml/loader.py +76 -0
- s1_cns_cli/s1graph/common/parsers/yaml/parser.py +49 -0
- s1_cns_cli/s1graph/common/runners/__init__.py +0 -0
- s1_cns_cli/s1graph/common/runners/base_post_runner.py +30 -0
- s1_cns_cli/s1graph/common/runners/base_runner.py +216 -0
- s1_cns_cli/s1graph/common/runners/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/common/runners/graph_builder/local_graph.py +57 -0
- s1_cns_cli/s1graph/common/runners/graph_manager.py +40 -0
- s1_cns_cli/s1graph/common/runners/object_runner.py +354 -0
- s1_cns_cli/s1graph/common/runners/runner_registry.py +680 -0
- s1_cns_cli/s1graph/common/s1cns/__init__.py +0 -0
- s1_cns_cli/s1graph/common/s1cns/bc_source.py +50 -0
- s1_cns_cli/s1graph/common/s1cns/check_type.py +37 -0
- s1_cns_cli/s1graph/common/s1cns/code_categories.py +55 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/__init__.py +1 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/base_integration_feature.py +45 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/__init__.py +4 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/custom_policies_integration.py +136 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/fixes_integration.py +142 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/licensing_integration.py +87 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/policies_3d_integration.py +82 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/policy_metadata_integration.py +174 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/repo_config_integration.py +142 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/features/suppressions_integration.py +233 -0
- s1_cns_cli/s1graph/common/s1cns/integration_features/integration_feature_registry.py +52 -0
- s1_cns_cli/s1graph/common/s1cns/licensing.py +29 -0
- s1_cns_cli/s1graph/common/s1cns/platform_errors.py +14 -0
- s1_cns_cli/s1graph/common/s1cns/platform_integration.py +1023 -0
- s1_cns_cli/s1graph/common/s1cns/platform_key.py +24 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/__init__.py +1 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/abstract_run_metadata_extractor.py +73 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/ci_variables.py +15 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/__init__.py +5 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/bitbucket.py +38 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/default_extractor.py +34 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/github_actions.py +40 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/gitlab_ci.py +40 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/extractors/jenkins.py +39 -0
- s1_cns_cli/s1graph/common/s1cns/run_metadata/registry.py +29 -0
- s1_cns_cli/s1graph/common/s1cns/severities.py +45 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/__init__.py +0 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/image_scanner.py +203 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/integrations/__init__.py +0 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/integrations/docker_image_scanning.py +80 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/integrations/package_scanning.py +40 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/integrations/twistcli.py +123 -0
- s1_cns_cli/s1graph/common/s1cns/vulnerability_scanning/report.py +45 -0
- s1_cns_cli/s1graph/common/s1cns/wrapper.py +136 -0
- s1_cns_cli/s1graph/common/sca/__init__.py +0 -0
- s1_cns_cli/s1graph/common/sca/commons.py +60 -0
- s1_cns_cli/s1graph/common/sca/output.py +637 -0
- s1_cns_cli/s1graph/common/typing.py +104 -0
- s1_cns_cli/s1graph/common/util/__init__.py +0 -0
- s1_cns_cli/s1graph/common/util/banner.py +29 -0
- s1_cns_cli/s1graph/common/util/config_utils.py +26 -0
- s1_cns_cli/s1graph/common/util/consts.py +35 -0
- s1_cns_cli/s1graph/common/util/contextmanagers.py +21 -0
- s1_cns_cli/s1graph/common/util/data_structures_utils.py +101 -0
- s1_cns_cli/s1graph/common/util/decorators.py +28 -0
- s1_cns_cli/s1graph/common/util/dockerfile.py +7 -0
- s1_cns_cli/s1graph/common/util/docs_generator.py +196 -0
- s1_cns_cli/s1graph/common/util/ext_argument_parser.py +543 -0
- s1_cns_cli/s1graph/common/util/file_utils.py +84 -0
- s1_cns_cli/s1graph/common/util/http_utils.py +247 -0
- s1_cns_cli/s1graph/common/util/json_utils.py +101 -0
- s1_cns_cli/s1graph/common/util/parser_utils.py +398 -0
- s1_cns_cli/s1graph/common/util/prompt.py +277 -0
- s1_cns_cli/s1graph/common/util/runner_dependency_handler.py +50 -0
- s1_cns_cli/s1graph/common/util/secrets.py +240 -0
- s1_cns_cli/s1graph/common/util/secrets_omitter.py +111 -0
- s1_cns_cli/s1graph/common/util/stopit/__init__.py +23 -0
- s1_cns_cli/s1graph/common/util/stopit/signalstop.py +56 -0
- s1_cns_cli/s1graph/common/util/stopit/threadstop.py +81 -0
- s1_cns_cli/s1graph/common/util/stopit/utils.py +148 -0
- s1_cns_cli/s1graph/common/util/str_utils.py +17 -0
- s1_cns_cli/s1graph/common/util/suppression.py +53 -0
- s1_cns_cli/s1graph/common/util/templates/__init__.py +0 -0
- s1_cns_cli/s1graph/common/util/templates/data.jinja2 +29 -0
- s1_cns_cli/s1graph/common/util/templates/init.jinja2 +4 -0
- s1_cns_cli/s1graph/common/util/templates/provider.jinja2 +28 -0
- s1_cns_cli/s1graph/common/util/templates/resource.jinja2 +28 -0
- s1_cns_cli/s1graph/common/util/templates/unittest-python.jinja2 +41 -0
- s1_cns_cli/s1graph/common/util/templates/unittest-terraform.jinja2 +9 -0
- s1_cns_cli/s1graph/common/util/tqdm_utils.py +76 -0
- s1_cns_cli/s1graph/common/util/type_forcers.py +146 -0
- s1_cns_cli/s1graph/common/util/var_utils.py +44 -0
- s1_cns_cli/s1graph/common/variables/__init__.py +0 -0
- s1_cns_cli/s1graph/common/variables/context.py +49 -0
- s1_cns_cli/s1graph/common/vcs/__init__.py +0 -0
- s1_cns_cli/s1graph/common/vcs/base_vcs_dal.py +130 -0
- s1_cns_cli/s1graph/common/vcs/vcs_schema.py +20 -0
- s1_cns_cli/s1graph/common/version_manager.py +12 -0
- s1_cns_cli/s1graph/contributor_metrics.py +65 -0
- s1_cns_cli/s1graph/dockerfile/__init__.py +1 -0
- s1_cns_cli/s1graph/dockerfile/base_dockerfile_check.py +44 -0
- s1_cns_cli/s1graph/dockerfile/base_registry.py +101 -0
- s1_cns_cli/s1graph/dockerfile/checks/AddExists.py +27 -0
- s1_cns_cli/s1graph/dockerfile/checks/AliasIsUnique.py +36 -0
- s1_cns_cli/s1graph/dockerfile/checks/ExposePort22.py +28 -0
- s1_cns_cli/s1graph/dockerfile/checks/HealthcheckExists.py +27 -0
- s1_cns_cli/s1graph/dockerfile/checks/MaintainerExists.py +24 -0
- s1_cns_cli/s1graph/dockerfile/checks/ReferenceLatestTag.py +40 -0
- s1_cns_cli/s1graph/dockerfile/checks/RootUser.py +28 -0
- s1_cns_cli/s1graph/dockerfile/checks/RunUsingAPT.py +31 -0
- s1_cns_cli/s1graph/dockerfile/checks/UpdateNotAlone.py +57 -0
- s1_cns_cli/s1graph/dockerfile/checks/UserExists.py +27 -0
- s1_cns_cli/s1graph/dockerfile/checks/WorkdirIsAbsolute.py +39 -0
- s1_cns_cli/s1graph/dockerfile/checks/__init__.py +5 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/EnvGitSslNoVerify.yaml +19 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/EnvNodeTlsRejectUnauthorized.yaml +19 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/EnvNpmConfigStrictSsl.yaml +19 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/EnvPipTrustedHost.yaml +19 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/EnvPythonHttpsVerify.yaml +19 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunApkAllowUntrusted.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunAptGetAllowUnauthenticated.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunAptGetForceYes.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunNpmConfigSetStrictSsl.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunPipTrustedHost.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunRpmNoSignature.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunUnsafeCurl.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunUnsafeWget.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunUsingSudo.yaml +18 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunYumConfigManagerSslVerify.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/RunYumNoGpgCheck.yaml +11 -0
- s1_cns_cli/s1graph/dockerfile/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/dockerfile/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/dockerfile/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/dockerfile/graph_builder/graph_components/resource_types.py +26 -0
- s1_cns_cli/s1graph/dockerfile/graph_builder/local_graph.py +115 -0
- s1_cns_cli/s1graph/dockerfile/graph_manager.py +45 -0
- s1_cns_cli/s1graph/dockerfile/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/dockerfile/image_referencer/manager.py +23 -0
- s1_cns_cli/s1graph/dockerfile/image_referencer/provider.py +56 -0
- s1_cns_cli/s1graph/dockerfile/parser.py +41 -0
- s1_cns_cli/s1graph/dockerfile/registry.py +3 -0
- s1_cns_cli/s1graph/dockerfile/runner.py +291 -0
- s1_cns_cli/s1graph/dockerfile/utils.py +78 -0
- s1_cns_cli/s1graph/example_runner/__init__.py +2 -0
- s1_cns_cli/s1graph/example_runner/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/example_runner/checks/base_example_runner_check.py +29 -0
- s1_cns_cli/s1graph/example_runner/checks/base_example_runner_job_check.py +24 -0
- s1_cns_cli/s1graph/example_runner/checks/job/ExampleCheckTrueFalse.py +68 -0
- s1_cns_cli/s1graph/example_runner/checks/job/__init__.py +4 -0
- s1_cns_cli/s1graph/example_runner/checks/job_registry.py +8 -0
- s1_cns_cli/s1graph/example_runner/common/__init__.py +0 -0
- s1_cns_cli/s1graph/example_runner/runner.py +61 -0
- s1_cns_cli/s1graph/github/__init__.py +1 -0
- s1_cns_cli/s1graph/github/base_github_branch_security.py +48 -0
- s1_cns_cli/s1graph/github/base_github_configuration_check.py +42 -0
- s1_cns_cli/s1graph/github/base_github_negative_branch_security.py +62 -0
- s1_cns_cli/s1graph/github/base_github_org_check.py +45 -0
- s1_cns_cli/s1graph/github/base_github_org_security.py +40 -0
- s1_cns_cli/s1graph/github/checks/2fa.py +19 -0
- s1_cns_cli/s1graph/github/checks/__init__.py +4 -0
- s1_cns_cli/s1graph/github/checks/disallow_branch_deletions.py +22 -0
- s1_cns_cli/s1graph/github/checks/disallow_force_pushes.py +22 -0
- s1_cns_cli/s1graph/github/checks/disallow_inactive_branch_60days.py +46 -0
- s1_cns_cli/s1graph/github/checks/dismiss_stale_reviews.py +16 -0
- s1_cns_cli/s1graph/github/checks/enforce_branch_protection_admins.py +19 -0
- s1_cns_cli/s1graph/github/checks/internal_repository_creation_is_limited.py +22 -0
- s1_cns_cli/s1graph/github/checks/ipallowlist.py +22 -0
- s1_cns_cli/s1graph/github/checks/minimum_admins_in_org.py +38 -0
- s1_cns_cli/s1graph/github/checks/private_repository_creation_is_limited.py +22 -0
- s1_cns_cli/s1graph/github/checks/public_repository_creation_is_limited.py +22 -0
- s1_cns_cli/s1graph/github/checks/repository_collaborators.py +42 -0
- s1_cns_cli/s1graph/github/checks/require_2approvals.py +20 -0
- s1_cns_cli/s1graph/github/checks/require_code_owner_reviews.py +16 -0
- s1_cns_cli/s1graph/github/checks/require_conversation_resolution.py +16 -0
- s1_cns_cli/s1graph/github/checks/require_linear_history.py +19 -0
- s1_cns_cli/s1graph/github/checks/require_push_restrictions.py +16 -0
- s1_cns_cli/s1graph/github/checks/require_signatures.py +19 -0
- s1_cns_cli/s1graph/github/checks/require_status_checks_pr.py +16 -0
- s1_cns_cli/s1graph/github/checks/require_strict_base_permissions_repository.py +23 -0
- s1_cns_cli/s1graph/github/checks/require_updated_branch_pr.py +22 -0
- s1_cns_cli/s1graph/github/checks/require_verified_organization.py +22 -0
- s1_cns_cli/s1graph/github/checks/restrict_pr_review_dismissal.py +22 -0
- s1_cns_cli/s1graph/github/checks/sso.py +39 -0
- s1_cns_cli/s1graph/github/checks/webhooks_https_orgs.py +45 -0
- s1_cns_cli/s1graph/github/checks/webhooks_https_repos.py +44 -0
- s1_cns_cli/s1graph/github/dal.py +233 -0
- s1_cns_cli/s1graph/github/registry.py +4 -0
- s1_cns_cli/s1graph/github/runner.py +75 -0
- s1_cns_cli/s1graph/github/schemas/__init__.py +0 -0
- s1_cns_cli/s1graph/github/schemas/branch.py +2685 -0
- s1_cns_cli/s1graph/github/schemas/branch_protection.py +99 -0
- s1_cns_cli/s1graph/github/schemas/no_branch_protection.py +25 -0
- s1_cns_cli/s1graph/github/schemas/org_members.py +173 -0
- s1_cns_cli/s1graph/github/schemas/org_security.py +73 -0
- s1_cns_cli/s1graph/github/schemas/org_webhooks.py +127 -0
- s1_cns_cli/s1graph/github/schemas/organization.py +439 -0
- s1_cns_cli/s1graph/github/schemas/repository_collaborators.py +199 -0
- s1_cns_cli/s1graph/github/schemas/repository_webhooks.py +217 -0
- s1_cns_cli/s1graph/github_actions/__init__.py +1 -0
- s1_cns_cli/s1graph/github_actions/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/github_actions/checks/base_github_action_check.py +38 -0
- s1_cns_cli/s1graph/github_actions/checks/graph_checks/ReadOnlyTopLevelPermissions.yaml +11 -0
- s1_cns_cli/s1graph/github_actions/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/github_actions/checks/job/AllowUnsecureCommandsOnJob.py +36 -0
- s1_cns_cli/s1graph/github_actions/checks/job/CosignArtifacts.py +55 -0
- s1_cns_cli/s1graph/github_actions/checks/job/CosignSBOM.py +55 -0
- s1_cns_cli/s1graph/github_actions/checks/job/EmptyWorkflowDispatch.py +43 -0
- s1_cns_cli/s1graph/github_actions/checks/job/ReverseShellNetcat.py +33 -0
- s1_cns_cli/s1graph/github_actions/checks/job/ShellInjection.py +37 -0
- s1_cns_cli/s1graph/github_actions/checks/job/SuspectCurlInScript.py +34 -0
- s1_cns_cli/s1graph/github_actions/checks/job/__init__.py +4 -0
- s1_cns_cli/s1graph/github_actions/checks/registry.py +4 -0
- s1_cns_cli/s1graph/github_actions/common/__init__.py +0 -0
- s1_cns_cli/s1graph/github_actions/common/artifact_build.py +10 -0
- s1_cns_cli/s1graph/github_actions/common/build_actions.py +5 -0
- s1_cns_cli/s1graph/github_actions/common/shell_injection_list.py +20 -0
- s1_cns_cli/s1graph/github_actions/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/github_actions/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/github_actions/graph_builder/graph_components/resource_types.py +12 -0
- s1_cns_cli/s1graph/github_actions/graph_builder/local_graph.py +209 -0
- s1_cns_cli/s1graph/github_actions/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/github_actions/image_referencer/manager.py +15 -0
- s1_cns_cli/s1graph/github_actions/image_referencer/provider.py +66 -0
- s1_cns_cli/s1graph/github_actions/runner.py +165 -0
- s1_cns_cli/s1graph/github_actions/schemas.py +3139 -0
- s1_cns_cli/s1graph/github_actions/utils.py +154 -0
- s1_cns_cli/s1graph/gitlab/__init__.py +1 -0
- s1_cns_cli/s1graph/gitlab/base_gitlab_configuration_check.py +23 -0
- s1_cns_cli/s1graph/gitlab/checks/__init__.py +4 -0
- s1_cns_cli/s1graph/gitlab/checks/merge_requests_approvals.py +32 -0
- s1_cns_cli/s1graph/gitlab/checks/two_factor_authentication.py +33 -0
- s1_cns_cli/s1graph/gitlab/dal.py +69 -0
- s1_cns_cli/s1graph/gitlab/registry.py +4 -0
- s1_cns_cli/s1graph/gitlab/runner.py +54 -0
- s1_cns_cli/s1graph/gitlab/schemas/__init__.py +0 -0
- s1_cns_cli/s1graph/gitlab/schemas/groups.py +130 -0
- s1_cns_cli/s1graph/gitlab/schemas/project_approvals.py +41 -0
- s1_cns_cli/s1graph/gitlab_ci/__init__.py +1 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/__init__.py +1 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/base_gitlab_ci_check.py +35 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/job/AvoidDoublePipelines.py +36 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/job/DetectImagesUsage.py +25 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/job/SuspectCurlInScript.py +29 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/job/__init__.py +4 -0
- s1_cns_cli/s1graph/gitlab_ci/checks/registry.py +4 -0
- s1_cns_cli/s1graph/gitlab_ci/common/__init__.py +0 -0
- s1_cns_cli/s1graph/gitlab_ci/common/reserved.py +8 -0
- s1_cns_cli/s1graph/gitlab_ci/common/resource_id_utils.py +67 -0
- s1_cns_cli/s1graph/gitlab_ci/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/gitlab_ci/image_referencer/manager.py +13 -0
- s1_cns_cli/s1graph/gitlab_ci/image_referencer/provider.py +60 -0
- s1_cns_cli/s1graph/gitlab_ci/runner.py +104 -0
- s1_cns_cli/s1graph/helm/__init__.py +0 -0
- s1_cns_cli/s1graph/helm/base_registry.py +101 -0
- s1_cns_cli/s1graph/helm/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/helm/image_referencer/base_provider.py +25 -0
- s1_cns_cli/s1graph/helm/image_referencer/manager.py +25 -0
- s1_cns_cli/s1graph/helm/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/helm/image_referencer/provider/helm.py +19 -0
- s1_cns_cli/s1graph/helm/registry.py +3 -0
- s1_cns_cli/s1graph/helm/runner.py +459 -0
- s1_cns_cli/s1graph/json_doc/__init__.py +0 -0
- s1_cns_cli/s1graph/json_doc/base_json_check.py +19 -0
- s1_cns_cli/s1graph/json_doc/base_registry.py +201 -0
- s1_cns_cli/s1graph/json_doc/enums.py +8 -0
- s1_cns_cli/s1graph/json_doc/registry.py +4 -0
- s1_cns_cli/s1graph/json_doc/runner.py +54 -0
- s1_cns_cli/s1graph/kubernetes/__init__.py +1 -0
- s1_cns_cli/s1graph/kubernetes/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/ImpersonatePermissions.yaml +60 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/ModifyServicesStatus.yaml +60 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/NoCreateNodesProxyOrPodsExec.yaml +59 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/ReadAllSecrets.yaml +60 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/RequireAllPodsToHaveNetworkPolicy.yaml +18 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/RoleBindingPE.yaml +59 -0
- s1_cns_cli/s1graph/kubernetes/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/__init__.py +1 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_container_check.py +146 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_rbac_check.py +89 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_registry.py +94 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_root_container_check.py +70 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_spec_check.py +55 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/base_spec_omitted_or_value_check.py +34 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/AllowPrivilegeEscalation.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/AllowPrivilegeEscalationPSP.py +37 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/AllowedCapabilities.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/AllowedCapabilitiesPSP.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/AllowedCapabilitiesSysAdmin.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAdmissionControlAlwaysAdmit.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAdmissionControlEventRateLimit.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAlwaysPullImagesPlugin.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAnonymousAuth.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuditLog.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuditLogMaxAge.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuditLogMaxBackup.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuditLogMaxSize.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuthorizationModeNode.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuthorizationModeNotAlwaysAllow.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerAuthorizationModeRBAC.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerBasicAuthFile.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerEncryptionProviders.py +25 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerEtcdCaFile.py +25 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerEtcdCertAndKey.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerInsecureBindAddress.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerInsecurePort.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerKubeletClientCertAndKey.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerKubeletHttps.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerNamespaceLifecyclePlugin.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerNodeRestrictionPlugin.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerPodSecurityPolicyPlugin.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerProfiling.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerRequestTimeout.py +34 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerSecurePort.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerSecurityContextDenyPlugin.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerServiceAccountKeyFile.py +32 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerServiceAccountLookup.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerServiceAccountPlugin.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerStrongCryptographicCiphers.py +39 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerTlsCertAndKey.py +31 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerTokenAuthFile.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ApiServerkubeletCertificateAuthority.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/CPULimits.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/CPURequests.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ContainerSecurityContext.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ControllerManagerBindAddress.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DefaultNamespace.py +50 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DefaultServiceAccount.py +32 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DefaultServiceAccountBinding.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DockerSocketVolume.py +65 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DropCapabilities.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/DropCapabilitiesPSP.py +32 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/EtcdAutoTls.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/EtcdCertAndKey.py +32 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/EtcdClientCertAuth.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/EtcdPeerFiles.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/HostPort.py +31 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ImageDigest.py +34 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ImagePullPolicyAlways.py +58 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ImageTagFixed.py +44 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeControllerManagerBlockProfiles.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeControllerManagerRootCAFile.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeControllerManagerServiceAccountCredentials.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeControllerManagerServiceAccountPrivateKeyFile.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeControllerManagerTerminatedPods.py +30 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletAnonymousAuth.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletAuthorizationModeNotAlwaysAllow.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletClientCa.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletCryptographicCiphers.py +40 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletHostnameOverride.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletKeyFilesSetAppropriate.py +30 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletMakeIptablesUtilChains.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletProtectKernelDefaults.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletReadOnlyPort.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubeletStreamingConnectionIdleTimeout.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubernetesDashboard.py +34 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubletEventCapture.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/KubletRotateCertificates.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/LivenessProbe.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/MemoryLimits.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/MemoryRequests.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/MinimizeCapabilities.py +28 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/MinimizeCapabilitiesPSP.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/NginxIngressCVE202125742Alias.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/NginxIngressCVE202125742AllSnippets.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/NginxIngressCVE202125742Lua.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/PeerClientCertAuthTrue.py +25 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/PodSecurityContext.py +58 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/PrivilegedContainers.py +24 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/PrivilegedContainersPSP.py +21 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RbacApproveCertificateSigningRequests.py +26 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RbacBindRoleBindings.py +19 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RbacControlWebhooks.py +20 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RbacEscalateRoles.py +19 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ReadOnlyFilesystem.py +22 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ReadinessProbe.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RootContainers.py +71 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RootContainersHighUID.py +71 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RootContainersPSP.py +33 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/RotateKubeletServerCertificate.py +29 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/SchedulerBindAddress.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/SchedulerProfiling.py +23 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/Seccomp.py +65 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/SeccompPSP.py +27 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/Secrets.py +33 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ServiceAccountTokens.py +61 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ShareHostIPC.py +61 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ShareHostIPCPSP.py +21 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ShareHostPID.py +61 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/ShareHostPIDPSP.py +21 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/SharedHostNetworkNamespace.py +61 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/SharedHostNetworkNamespacePSP.py +21 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/Tiller.py +35 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/TillerDeploymentListener.py +30 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/TillerService.py +40 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/WildcardRoles.py +33 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/__init__.py +5 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/k8s/k8s_check_utils.py +22 -0
- s1_cns_cli/s1graph/kubernetes/checks/resource/registry.py +4 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/ResourceKeywordIdentifier.py +31 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/blocks.py +34 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/edge_builders/K8SEdgeBuilder.py +28 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/edge_builders/KeywordEdgeBuilder.py +74 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/edge_builders/LabelSelectorEdgeBuilder.py +53 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/edge_builders/NetworkPolicyEdgeBuilder.py +61 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/graph_components/edge_builders/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/graph_builder/local_graph.py +176 -0
- s1_cns_cli/s1graph/kubernetes/graph_manager.py +39 -0
- s1_cns_cli/s1graph/kubernetes/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/image_referencer/base_provider.py +40 -0
- s1_cns_cli/s1graph/kubernetes/image_referencer/manager.py +19 -0
- s1_cns_cli/s1graph/kubernetes/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/image_referencer/provider/k8s.py +105 -0
- s1_cns_cli/s1graph/kubernetes/kubernetes_graph_flags.py +19 -0
- s1_cns_cli/s1graph/kubernetes/kubernetes_utils.py +257 -0
- s1_cns_cli/s1graph/kubernetes/parser/__init__.py +0 -0
- s1_cns_cli/s1graph/kubernetes/parser/k8_json.py +66 -0
- s1_cns_cli/s1graph/kubernetes/parser/k8_yaml.py +65 -0
- s1_cns_cli/s1graph/kubernetes/parser/parser.py +52 -0
- s1_cns_cli/s1graph/kubernetes/runner.py +351 -0
- s1_cns_cli/s1graph/kubernetes/test/share-process-namespace.yaml +27 -0
- s1_cns_cli/s1graph/kustomize/__init__.py +0 -0
- s1_cns_cli/s1graph/kustomize/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/kustomize/image_referencer/base_provider.py +26 -0
- s1_cns_cli/s1graph/kustomize/image_referencer/manager.py +23 -0
- s1_cns_cli/s1graph/kustomize/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/kustomize/image_referencer/provider/kustomize.py +18 -0
- s1_cns_cli/s1graph/kustomize/runner.py +642 -0
- s1_cns_cli/s1graph/kustomize/utils.py +25 -0
- s1_cns_cli/s1graph/logging_init.py +22 -0
- s1_cns_cli/s1graph/main.py +653 -0
- s1_cns_cli/s1graph/openapi/__init__.py +1 -0
- s1_cns_cli/s1graph/openapi/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/openapi/checks/base_openapi_check.py +27 -0
- s1_cns_cli/s1graph/openapi/checks/base_registry.py +10 -0
- s1_cns_cli/s1graph/openapi/checks/registry.py +3 -0
- s1_cns_cli/s1graph/openapi/checks/resource/__init__.py +3 -0
- s1_cns_cli/s1graph/openapi/checks/resource/generic/GlobalSecurityFieldIsEmpty.py +26 -0
- s1_cns_cli/s1graph/openapi/checks/resource/generic/SecurityOperations.py +43 -0
- s1_cns_cli/s1graph/openapi/checks/resource/generic/__init__.py +5 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/BaseOpenapiCheckV2.py +29 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/GlobalSchemeDefineHTTP.py +29 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/GlobalSecurityScopeUndefined.py +45 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/Oauth2OperationObjectPasswordFlow.py +55 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/Oauth2SecurityDefinitionImplicitFlow.py +40 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/Oauth2SecurityDefinitionPasswordFlow.py +40 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/Oauth2SecurityPasswordFlow.py +45 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/Oauth2SecurityRequirement.py +47 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/OperationObjectBasicAuth.py +52 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/OperationObjectConsumesUndefined.py +43 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/OperationObjectImplicitFlow.py +54 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/OperationObjectProducesUndefined.py +45 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/OperationObjectSecurityScopeUndefined.py +65 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/PathSchemeDefineHTTP.py +42 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/SecurityDefinitionBasicAuth.py +40 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/SecurityDefinitions.py +30 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/SecurityRequirement.py +69 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v2/__init__.py +5 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v3/BaseOpenapiCheckV3.py +29 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v3/CleartextOverUnencryptedChannel.py +48 -0
- s1_cns_cli/s1graph/openapi/checks/resource/v3/__init__.py +5 -0
- s1_cns_cli/s1graph/openapi/runner.py +108 -0
- s1_cns_cli/s1graph/policies_3d/__init__.py +0 -0
- s1_cns_cli/s1graph/policies_3d/checks_infra/__init__.py +0 -0
- s1_cns_cli/s1graph/policies_3d/checks_infra/base_check.py +26 -0
- s1_cns_cli/s1graph/policies_3d/checks_infra/base_parser.py +41 -0
- s1_cns_cli/s1graph/policies_3d/checks_parser.py +145 -0
- s1_cns_cli/s1graph/policies_3d/output.py +291 -0
- s1_cns_cli/s1graph/policies_3d/record.py +47 -0
- s1_cns_cli/s1graph/policies_3d/runner.py +318 -0
- s1_cns_cli/s1graph/policies_3d/syntax/__init__.py +0 -0
- s1_cns_cli/s1graph/policies_3d/syntax/cves_syntax.py +46 -0
- s1_cns_cli/s1graph/policies_3d/syntax/iac_syntax.py +35 -0
- s1_cns_cli/s1graph/policies_3d/syntax/secrets_syntax.py +14 -0
- s1_cns_cli/s1graph/policies_3d/syntax/syntax.py +56 -0
- s1_cns_cli/s1graph/py.typed +0 -0
- s1_cns_cli/s1graph/runner_filter.py +365 -0
- s1_cns_cli/s1graph/sca_image/__init__.py +0 -0
- s1_cns_cli/s1graph/sca_image/models.py +18 -0
- s1_cns_cli/s1graph/sca_image/runner.py +345 -0
- s1_cns_cli/s1graph/sca_package/__init__.py +0 -0
- s1_cns_cli/s1graph/sca_package/output.py +360 -0
- s1_cns_cli/s1graph/sca_package/runner.py +172 -0
- s1_cns_cli/s1graph/sca_package/scanner.py +193 -0
- s1_cns_cli/s1graph/sca_package_2/__init__.py +0 -0
- s1_cns_cli/s1graph/sca_package_2/output.py +428 -0
- s1_cns_cli/s1graph/sca_package_2/runner.py +183 -0
- s1_cns_cli/s1graph/sca_package_2/scanner.py +104 -0
- s1_cns_cli/s1graph/sca_package_2/suppression.py +124 -0
- s1_cns_cli/s1graph/secrets/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/consts.py +31 -0
- s1_cns_cli/s1graph/secrets/coordinator.py +28 -0
- s1_cns_cli/s1graph/secrets/git_history_store.py +177 -0
- s1_cns_cli/s1graph/secrets/git_types.py +82 -0
- s1_cns_cli/s1graph/secrets/parsers/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/parsers/json/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/parsers/json/multiline_parser.py +60 -0
- s1_cns_cli/s1graph/secrets/parsers/multiline_parser.py +62 -0
- s1_cns_cli/s1graph/secrets/parsers/single_line_parser.py +36 -0
- s1_cns_cli/s1graph/secrets/parsers/terraform/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/parsers/terraform/multiline_parser.py +37 -0
- s1_cns_cli/s1graph/secrets/parsers/terraform/single_line_parser.py +28 -0
- s1_cns_cli/s1graph/secrets/parsers/yaml/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/parsers/yaml/multiline_parser.py +64 -0
- s1_cns_cli/s1graph/secrets/plugins/__init__.py +0 -0
- s1_cns_cli/s1graph/secrets/plugins/custom_regex_detector.py +160 -0
- s1_cns_cli/s1graph/secrets/plugins/detector_utils.py +279 -0
- s1_cns_cli/s1graph/secrets/plugins/entropy_keyword_combinator.py +234 -0
- s1_cns_cli/s1graph/secrets/plugins/load_detectors.py +120 -0
- s1_cns_cli/s1graph/secrets/runner.py +518 -0
- s1_cns_cli/s1graph/secrets/scan_git_history.py +247 -0
- s1_cns_cli/s1graph/secrets/utils.py +39 -0
- s1_cns_cli/s1graph/serverless/__init__.py +1 -0
- s1_cns_cli/s1graph/serverless/base_registry.py +36 -0
- s1_cns_cli/s1graph/serverless/checks/__init__.py +7 -0
- s1_cns_cli/s1graph/serverless/checks/base_function_check.py +4 -0
- s1_cns_cli/s1graph/serverless/checks/complete/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/complete/base_complete_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/complete/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/custom/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/custom/base_custom_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/custom/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/function/__init__.py +1 -0
- s1_cns_cli/s1graph/serverless/checks/function/aws/AWSCredentials.py +32 -0
- s1_cns_cli/s1graph/serverless/checks/function/aws/AdminPolicyDocument.py +30 -0
- s1_cns_cli/s1graph/serverless/checks/function/aws/StarActionPolicyDocument.py +33 -0
- s1_cns_cli/s1graph/serverless/checks/function/aws/__init__.py +5 -0
- s1_cns_cli/s1graph/serverless/checks/function/base_function_check.py +29 -0
- s1_cns_cli/s1graph/serverless/checks/function/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/layer/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/layer/base_layer_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/layer/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/package/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/package/base_package_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/package/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/plugin/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/plugin/base_plugin_check.py +19 -0
- s1_cns_cli/s1graph/serverless/checks/plugin/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/provider/base_provider_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/provider/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/checks/service/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/checks/service/base_service_check.py +18 -0
- s1_cns_cli/s1graph/serverless/checks/service/registry.py +3 -0
- s1_cns_cli/s1graph/serverless/parsers/__init__.py +0 -0
- s1_cns_cli/s1graph/serverless/parsers/context_parser.py +75 -0
- s1_cns_cli/s1graph/serverless/parsers/parser.py +343 -0
- s1_cns_cli/s1graph/serverless/registry.py +4 -0
- s1_cns_cli/s1graph/serverless/runner.py +299 -0
- s1_cns_cli/s1graph/terraform/__init__.py +3 -0
- s1_cns_cli/s1graph/terraform/checks/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/checks/data/__init__.py +3 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/AdminPolicyDocument.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMCredentialsExposure.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMDataExfiltration.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMManagedAdminPolicy.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMPermissionsManagement.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMPrivilegeEscalation.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMPublicActionsPolicy.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/IAMWriteAccess.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/StarActionPolicyDocument.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/data/aws/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/data/base_check.py +47 -0
- s1_cns_cli/s1graph/terraform/checks/data/base_cloudsplaining_data_iam_check.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/data/base_registry.py +12 -0
- s1_cns_cli/s1graph/terraform/checks/data/external/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/data/gcp/GooglePolicyIsPrivate.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/data/gcp/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/data/registry.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/ALBProtectedByWAF.yaml +43 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/ALBRedirectsHTTPToHTTPS.yaml +82 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AMRClustersNotOpenToInternet.yaml +23 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/APIGWLoggingLevelsDefinedProperly.yaml +37 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/APIGatewayEndpointsUsesCertificateForAuthentication.yaml +47 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/APIGatewayRequestParameterValidationEnabled.yaml +10 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/APIProtectedByWAF.yaml +76 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AWSConfigRecorderEnabled.yaml +29 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AWSNATGatewaysshouldbeutilized.yaml +43 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AWSSSMParameterShouldBeEncrypted.yaml +16 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AppLoadBalancerTLS12.yaml +81 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AppSyncProtectedByWAF.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AutoScalingEnableOnDynamoDBTables.yaml +48 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/AutoScallingEnabledELB.yaml +48 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CLoudFrontS3OriginConfigWithOAI.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CloudFrontHasCustomSSLCertificate.yaml +16 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CloudFrontHasResponseHeadersPolicy.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CloudFrontUsesSecureProtocolsForHTTPS.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CloudFrontWebACLConfiguredWIthLog4jVulnerability.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CloudtrailHasCloudwatch.yaml +22 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/CodecommitApprovalRulesAttached.yaml +20 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/ConfigRecorderRecordsAllGlobalResources.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/DMSEndpointHaveSSLConfigured.yaml +55 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EBSAddedBackup.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EC2InstanceHasIAMRoleAttached.yaml +10 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EFSAddedBackup.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EIPAllocatedToVPCAttachedEC2.yaml +104 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EMRClusterHasSecurityConfiguration.yaml +10 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/ElastiCacheRedisConfiguredAutomaticFailOver.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/ElasticSearchDedicatedMasterEnabled.yaml +13 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/EncryptedEBSVolumeOnlyConnectedToEC2s.yaml +31 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/GuardDutyIsEnabled.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/HTTPNotSendingPasswords.yaml +38 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/IAMGroupHasAtLeastOneUser.yaml +29 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/IAMManagedIAMFullAccessPolicy.yaml +41 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/IAMPolicyNotAllowFullIAMAccess.yaml +51 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/IAMUserHasNoConsoleAccess.yaml +20 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/IAMUsersAreMembersAtLeastOneGroup.yaml +25 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/NeptuneDeletionProtectionEnabled.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/NetworkFirewallHasLogging.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/OpenSearchDomainHasFineGrainedControl.yaml +20 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/PostgresDBHasQueryLoggingEnabled.yaml +37 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/PostgresRDSHasQueryLoggingEnabled.yaml +35 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/RDSClusterHasBackupPlan.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/RDSEnableCopyTagsToSnapshot.yaml +26 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/Route53ARecordAttachedResource.yaml +57 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/Route53ZoneEnableDNSSECSigning.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/Route53ZoneHasMatchingQueryLog.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketEncryption.yaml +51 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketEventNotifications.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketHasPublicAccessBlock.yaml +29 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketLifecycle.yaml +23 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketLogging.yaml +23 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketReplicationConfiguration.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3BucketVersioning.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3KMSEncryptedByDefault.yaml +30 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3NotAllowAccessToAllAuthenticatedUsers.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3PublicACLRead.yaml +114 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/S3PublicACLWrite.yaml +99 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/SGAttachedToResource.yaml +55 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/SecretsAreRotated.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/SubnetHasACL.yaml +45 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/VPCHasFlowLog.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/VPCHasRestrictedSG.yaml +63 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/VPCPeeringRouteTableOverlyPermissive.yaml +66 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/aws/WAF2HasLogs.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AccessToPostgreSQLFromAzureServicesIsDisabled.yaml +37 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/ApplicationGatewayEnablesWAF.yaml +32 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureACR_HTTPSwebhook.yaml +12 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureAKSclusterAzureCNIEnabled.yaml +13 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureActiveDirectoryAdminIsConfigured.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureAntimalwareIsConfiguredWithAutoUpdatesForVMs.yaml +35 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureAutomationAccNotOverlyPermissiveNetAccess.yaml +12 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureConfigMSSQLwithAD.yaml +21 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureContainerInstanceconfigManagedIdentity.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureDataFactoriesEncryptedWithCustomerManagedKey.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureKeyVaultConfigPrivateEndpoint.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureMSSQLServerHasSecurityAlertPolicy.yaml +31 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureNetworkInterfacePublicIPAddressId.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzurePostgreSQLFlexServerNotOverlyPermissive.yaml +20 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureSpringCloudConfigWithVnet.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureSqlDbEnableTransparentDataEncryption.yaml +13 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureStorageAccConfigWithPrivateEndpoint.yaml +31 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureStorageAccountsUseCustomerManagedKeyForEncryption.yaml +23 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureSubnetConfigWithNSG.yaml +45 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureSynapseWorkspacesHaveNoIPFirewallRulesAttached.yaml +18 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/AzureUnattachedDisksAreEncrypted.yaml +43 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/CognitiveServicesCustomerManagedKey.yaml +23 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/DataExplorerEncryptionUsesCustomKey.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/MSQLenablesCustomerManagedKey.yaml +24 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/PGSQLenablesCustomerManagedKey.yaml +24 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/SQLServerAuditingEnabled.yaml +36 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/SQLServerAuditingRetention90Days.yaml +38 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/StorageContainerActivityLogsNotPublic.yaml +56 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/StorageCriticalDataEncryptedCMK.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/StorageLoggingIsEnabledForBlobService.yaml +37 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/StorageLoggingIsEnabledForTableService.yaml +28 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VAconfiguredToSendReports.yaml +52 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VAconfiguredToSendReportsToAdmins.yaml +51 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VAisEnabledInStorageAccount.yaml +25 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VAsetPeriodicScansOnSQL.yaml +43 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VMHasBackUpMachine.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azure/VirtualMachinesUtilizingManagedDisks.yaml +21 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/azuredevops/ADORepositoryHasMinTwoReviewers.yaml +26 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/CloudFunctionSecureHTTPTrigger.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/DisableAccessToSqlDBInstanceForRootUsersWithoutPassword.yaml +50 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPAuditLogsConfiguredForAllServicesAndUsers.yaml +34 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPComputeFirewallOverlyPermissiveToAllTraffic.yaml +34 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPContainerRegistryReposAreNotPubliclyAccessible.yaml +63 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPKMSCryptoKeysAreNotPubliclyAccessible.yaml +64 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPKMSKeyRingsAreNotPubliclyAccessible.yaml +63 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPLogBucketsConfiguredUsingLock.yaml +38 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPMySQLdbInstancePoint_In_TimeRecoveryBackupIsEnabled.yaml +19 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPNetworkDoesNotUseDefaultFirewall.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPPostgreSQLDatabaseFlaglog_durationIsSetToON.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPPostgreSQLDatabaseFlaglog_executor_statsIsSetToOFF.yaml +22 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPPostgreSQLDatabaseFlaglog_parser_statsIsSetToOFF.yaml +22 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPPostgreSQLDatabaseFlaglog_planner_statsIsSetToOFF.yaml +22 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPPostgreSQLDatabaseFlaglog_statement_statsIsSetToOFF.yaml +22 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPProjectHasNoLegacyNetworks.yaml +39 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCPdisableAlphaClusterFeatureInKubernetesEngineClusters.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GCRContainerVulnerabilityScanningEnabled.yaml +11 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/GKEClustersAreNotUsingDefaultServiceAccount.yaml +24 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/gcp/ServiceAccountHasGCPmanagedKey.yaml +13 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/github/RepositoryHasBranchProtection.yaml +21 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/ncp/AccessControlGroupRuleDefine.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/ncp/AutoScalingEnabledLB.yaml +36 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/ncp/RouteTablePublicSubnetConnection.yaml +35 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/AdministratorUserNotAssociatedWithAPIKey.yaml +62 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/OCI_K8EngineClusterBootVolConfigInTransitEncryption.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/OCI_K8EngineClusterPodSecPolicyEnforced.yaml +17 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/OCI_KubernetesEngineClusterEndpointConfigWithNSG.yaml +28 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/OCI_NFSaccessRestrictedToRootUsers.yaml +27 -0
- s1_cns_cli/s1graph/terraform/checks/graph_checks/oci/OCI_NSGNotAllowRDP.yaml +68 -0
- s1_cns_cli/s1graph/terraform/checks/module/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/checks/module/base_module_check.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/module/base_registry.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/module/registry.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/provider/__init__.py +6 -0
- s1_cns_cli/s1graph/terraform/checks/provider/aws/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/provider/aws/credentials.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/provider/base_check.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/provider/base_registry.py +11 -0
- s1_cns_cli/s1graph/terraform/checks/provider/linode/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/provider/linode/credentials.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/provider/ncp/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/provider/ncp/credentials.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/provider/oci/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/provider/oci/credentials.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/provider/openstack/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/provider/openstack/credentials.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/provider/panos/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/provider/panos/credentials.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/provider/registry.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/provider/s1cns/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/provider/s1cns/credentials.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/__init__.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/ALBACLIsUnrestricted.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/APIGatewayProtocolHTTPS.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/AbsRDSParameter.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/AbsSecurityGroupUnrestrictedIngress.py +58 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/ActionTrailLogAllEvents.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/ActionTrailLogAllRegions.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/DiskEncryptedWithCMK.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/DiskIsEncrypted.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/K8sEnableNetworkPolicies.py +60 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/K8sNodePoolAutoRepair.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/KMSKeyIsEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/KMSKeyRotationIsEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/LaunchTemplateDisksAreEncrypted.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/LogAuditRDSEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/MongoDBInsideVPC.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/MongoDBInstanceSSL.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/MongoDBIsPublic.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/MongoDBTransparentDataEncryptionEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/OSSBucketAccessLogs.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/OSSBucketEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/OSSBucketPublic.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/OSSBucketTransferAcceleration.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/OSSBucketVersioning.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyExpiration.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyLength.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyLowercaseLetter.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyMaxLogin.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyNumber.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyReuse.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicySymbol.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMPasswordPolicyUppcaseLetter.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RAMSecurityEnforceMFA.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSInstanceAutoUpgrade.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSInstanceLogConnections.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSInstanceLogDisconnections.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSInstanceLogsEnabled.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSInstanceSSL.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSIsPublic.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSRetention.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/RDSTransparentDataEncryptionEnabled.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/SecurityGroupUnrestrictedIngress22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/SecurityGroupUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/TLSPoliciesAreSecure.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/alicloud/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ACMCertCreateBeforeDestroy.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ACMCertSetLoggingPreference.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ALBDesyncMode.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ALBDropHttpHeaders.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ALBListenerHTTPS.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AMICopyIsEncrypted.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AMICopyUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AMIEncryption.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AMILaunchIsShared.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayAccessLogging.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayAuthorization.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayCacheEnable.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayCreateBeforeDestroy.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayDeploymentCreateBeforeDestroy.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayDomainNameTLS.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayMethodSettingsCacheEnabled.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayMethodSettingsCacheEncrypted.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayMethodSettingsDataTrace.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayV2RouteDefinesAuthorizationType.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/APIGatewayXray.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AbsNACLUnrestrictedIngress.py +111 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AbsSecurityGroupUnrestrictedIngress.py +114 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppFlowConnectorProfileUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppFlowUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppSyncFieldLevelLogs.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppSyncLogging.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppsyncAPICacheEncryptionAtRest.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AppsyncAPICacheEncryptionInTransit.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AthenaDatabaseEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AthenaWorkgroupConfiguration.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AthenaWorkgroupEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AuroraEncryption.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AutoScalingLaunchTemplate.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/AutoScalingTagging.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/BackupVaultEncrypted.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/BatchJobIsNotPrivileged.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudFrontResponseHeaderStrictTransportSecurity.py +61 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudWatchAlarmsEnabled.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudWatchLogGroupKMSKey.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudWatchLogGroupRetention.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudWatchLogGroupRetentionYear.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudformationStackNotificationArns.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontDistributionDefaultRoot.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontDistributionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontDistributionEncryption.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontDistributionLogging.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontDistributionOriginFailover.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudfrontTLS12.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudsearchDomainEnforceHttps.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudsearchDomainTLS.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailDefinesSNSTopic.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailEnableLogging.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailEncryptionWithCMK.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailEventDataStoreUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailLogValidation.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CloudtrailMultiRegion.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodeArtifactDomainEncryptedWithCMK.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodeBuildPrivilegedMode.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodeBuildProjectEncryption.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodePipelineArtifactsEncrypted.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodebuildHasLogs.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodebuildS3LogsEncrypted.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodebuildUsesCMK.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/CodecommitApprovalsRulesRequireMin2.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ComprehendEntityRecognizerModelUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ComprehendEntityRecognizerVolumeUsesCMK.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ConfigConfgurationAggregatorAllRegions.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ConnectInstanceKinesisVideoStreamStorageConfigUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ConnectInstanceS3StorageConfigUsesCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DAXEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DAXEndpointTLS.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DBInstanceBackupRetentionPeriod.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DBInstanceLogging.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DBInstanceMinorUpgrade.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DBSnapshotCopyUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DBSnapshotsArePrivate.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DLMEventsCrossRegionEncryption.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DLMEventsCrossRegionEncryptionWithCMK.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DLMScheduleCrossRegionEncryption.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DLMScheduleCrossRegionEncryptionWithCMK.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSEndpointUsesCMK.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSReplicationInstanceEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSReplicationInstanceMinorUpgrade.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSReplicationInstancePubliclyAccessible.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSS3DefinesIntransitEncryption.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DMSS3UsesCMK.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DatasyncLocationExposesSecrets.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBAuditLogs.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBGlobalClusterEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBLogging.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DocDBTLS.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DynamoDBGlobalTableRecovery.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DynamoDBTableReplicaKMSUsesCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DynamoDBTablesEncrypted.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/DynamodbRecovery.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EBSDefaultEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EBSEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EBSSnapshotCopyEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EBSVolumeEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EC2Credentials.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EC2DetailedMonitoringEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EC2EBSOptimized.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EC2PublicIP.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECRImageScanning.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECRImmutableTags.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECRPolicy.py +62 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECRRepositoryEncrypted.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSClusterContainerInsights.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSClusterLoggingEnabled.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSClusterLoggingEncryptedWithCMK.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSContainerHostProcess.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSContainerPrivilege.py +42 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSContainerReadOnlyRoot.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSServiceFargateLatest.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSServicePublicIP.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSTaskDefinitionEFSVolumeEncryption.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ECSTaskDefinitionRoleCheck.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EFSAccessPointRoot.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EFSAccessUserIdentity.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EFSEncryptionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EFSFileSystemEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSControlPlaneLogging.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSNodeGroupRemoteAccess.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSPlatformVersion.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSPublicAccess.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSPublicAccessCIDR.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EKSSecretsEncryption.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ELBAccessLogs.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ELBCrossZoneEnable.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ELBPolicyUsesSecureProtocols.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ELBUsesSSL.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ELBv2AccessLogs.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EMRClusterIsEncryptedKMS.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/EMRClusterKerberosAttributes.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/Ec2TransitGatewayAutoAccept.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElastiCacheHasCustomSubnet.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticBeanstalkUseEnhancedHealthChecks.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticCacheAutomaticBackup.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticCacheAutomaticMinorUpgrades.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticacheHasSecurityGroup.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticacheReplicationGroupEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtRest.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtTransit.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticacheReplicationGroupEncryptionAtTransitAuthToken.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchDefaultSG.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchDomainAuditLogging.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchDomainEnforceHTTPS.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchDomainHA.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchDomainLogging.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchEncryptionWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchInVPC.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchNodeToNodeEncryption.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ElasticsearchTLSPolicy.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/FSXOntapFSEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/FSXOpenZFSFileSystemEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/FSXWindowsFSEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GlacierVaultAnyPrincipal.py +44 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GlobalAcceleratorAcceleratorFlowLogs.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GlueDataCatalogEncryption.py +53 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GlueSecurityConfiguration.py +55 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GlueSecurityConfigurationEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/GuarddutyDetectorEnabled.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMAdminPolicyDocument.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMCredentialsExposure.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMDataExfiltration.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMManagedAdminPolicy.py +61 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMPermissionsManagement.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMPolicyAttachedToGroupOrRoles.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMPrivilegeEscalation.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMRoleAllowAssumeFromAccount.py +46 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMRoleAllowsPublicAssume.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMStarActionPolicyDocument.py +56 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMUserNotUsedForAccess.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IAMWriteAccess.py +15 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/IMDSv1Disabled.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ImagebuilderComponentEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ImagebuilderDistributionConfigurationEncryptedWithCMK.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/ImagebuilderImageRecipeEBSEncrypted.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KMSKeyIsEnabled.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KMSKeyWildcardPrincipal.py +42 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KMSRotation.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KendraIndexSSEUsesCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KeyspacesTableUsesCMK.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KinesisFirehoseDeliveryStreamSSE.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KinesisFirehoseDeliveryStreamUsesCMK.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KinesisStreamEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KinesisStreamEncryptionType.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/KinesisVideoEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LBCrossZone.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LBDeletionProtection.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LBTargetGroupsDefinesHealthcheck.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaCodeSigningConfigured.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaDLQConfigured.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaEnvironmentCredentials.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaEnvironmentEncryptionSettings.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaFunctionIsNotPublic.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaFunctionLevelConcurrentExecutionLimit.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaFunctionURLAuth.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaInVPC.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LambdaXrayEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LaunchConfigurationEBSEncryption.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/LustreFSEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerAuditLogging.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerLogging.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerMinorAutoUpgrade.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerNotPubliclyExposed.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MQBrokerVersion.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MSKClusterEncryption.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MSKClusterLogging.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MSKClusterNodesArePrivate.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MWAASchedulerLogsEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MWAAWebserverLogsEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MWAAWorkerLogsEnabled.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MemoryDBClusterIntransitEncryption.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MemoryDBEncryptionWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/MemoryDBSnapshotEncryptionWithCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NeptuneClusterInstancePublic.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NeptuneClusterLogging.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NeptuneClusterSnapshotEncrypted.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NeptuneClusterSnapshotEncryptedWithCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NeptuneClusterStorageEncrypted.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NetworkACLUnrestrictedIngress20.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NetworkACLUnrestrictedIngress21.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NetworkACLUnrestrictedIngress22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/NetworkACLUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyExpiration.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyLength.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyLowercaseLetter.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyNumber.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyReuse.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicySymbol.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/PasswordPolicyUppercaseLetter.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/QLDBLedgerDeletionProtection.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/QLDBLedgerPermissionsMode.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSCACertIsRecent.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterActivityStreamEncryptedWithCMK.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterAuditLogging.py +48 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterAuroraBacktrack.py +43 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterCopyTags.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterEncrypted.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterIAMAuthentication.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterLogging.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSClusterSnapshotEncrypted.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSDeletionProtection.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSEnhancedMonitorEnabled.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSHasSecurityGroup.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSIAMAuthentication.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSInstanceAutoBackupEncryptionWithCMK.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSInstanceDeletionProtection.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSMultiAZEnabled.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSPostgreSQLLogFDWExtension.py +87 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RDSPubliclyAccessible.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedShiftSSL.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterAllowVersionUpgrade.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterDatabaseName.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterKMSKey.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterLogging.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterSnapshotCopyGrantEncryptedWithCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftClusterUseEnhancedVPCRouting.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftInEc2ClassicMode.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshiftServerlessNamespaceKMSKey.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/RedshitClusterPubliclyAvailable.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3AbortIncompleteUploads.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3AllowsAnyPrincipal.py +52 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3BlockPublicACLs.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3BlockPublicPolicy.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3BucketObjectEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3BucketObjectLock.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3IgnorePublicACLs.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3ObjectCopyEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3ProtectAgainstPolicyLockout.py +53 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/S3RestrictPublicBuckets.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SNSTopicEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SNSTopicPolicyAnyPrincipal.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SQSPolicy.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SQSQueueEncryption.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SQSQueuePolicyAnyPrincipal.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SSMDocumentsArePrivate.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SSMParameterUsesCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SSMSessionManagerDocumentEncryption.py +43 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SSMSessionManagerDocumentLogging.py +47 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SageMakerInternetAccessDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SagemakerDomainEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SagemakerEndpointConfigurationEncryption.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SagemakerNotebookEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SagemakerNotebookInCustomVPC.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SagemakerNotebookRoot.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SchedulerScheduleUsesCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecretManagerSecret90days.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecretManagerSecretEncrypted.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecurityGroupRuleDescription.py +56 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecurityGroupUnrestrictedIngress22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecurityGroupUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecurityGroupUnrestrictedIngress80.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SecurityGroupUnrestrictedIngressAny.py +10 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/StateMachineLoggingExecutionHistory.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/StateMachineXray.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/SubnetPublicIP.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/TimestreamDatabaseKMSKey.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/TransferServerIsPublic.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/VPCDefaultNetwork.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/VPCEndpointAcceptanceConfigured.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WAFACLCVE202144228.py +58 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WAFEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WAFHasAnyRules.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WAFHasLogs.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WorkspaceRootVolumeEncrypted.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/WorkspaceUserVolumeEncrypted.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/aws/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRAdminAccountDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRAnonymousPullDisabled.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRContainerScanEnabled.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACREnableImageQuarantine.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACREnableRetentionPolicy.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRGeoreplicated.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRPublicNetworkAccessDisabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ACRUseSignedImages.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSApiServerAuthorizedIpRanges.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSDashboardDisabled.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSEnablesPrivateClusters.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSIsPaidSku.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSLocalAdminDisabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSLoggingEnabled.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSMaxPodsMinimum.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSNetworkPolicy.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSNodePublicIpDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSPoolTypeIsScaleSet.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSRbacEnabled.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSSecretStoreRotation.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSUpgradeChannel.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSUsesAzurePoliciesAddon.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AKSUsesDiskEncryptionSet.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/APIManagementBackendHTTPS.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/APIManagementCertsEnforced.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/APIManagementMinTLS12.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/APIManagementPublicAccess.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/APIServicesUseVirtualNetwork.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/ActiveDirectoryUsedAuthenticationServiceFabric.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppConfigEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppConfigLocalAuth.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppConfigPublicAccess.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppConfigPurgeProtection.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppConfigSku.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppGWUseWAFMode.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppGatewayWAFACLCVE202144228.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceAlwaysOn.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceAuthentication.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceClientCertificate.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceDetailedErrorMessagesEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceDisallowCORS.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceDotnetFrameworkVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceEnableFailedRequest.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceFTPSState.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceHTTPSOnly.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceHttpLoggingEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceHttps20Enabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceIdentity.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceIdentityProviderEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceInstanceMinimum.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceJavaVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceMinTLSVersion.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServicePHPVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServicePythonVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceRemoteDebuggingNotEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceSetHealthCheck.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceSkuMinimum.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceSlotDebugDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceSlotHTTPSOnly.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceSlotMinTLS.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AppServiceUsedAzureFiles.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AutomationEncrypted.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureBatchAccountUsesKeyVaultEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureContainerGroupDeployedIntoVirtualNetwork.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDataExplorerDoubleEncryptionEnabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnAppServices.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnContainerRegistry.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnKeyVaults.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnKubernetes.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnServers.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnSqlServerVMS.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnSqlServers.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureDefenderOnStorage.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureFrontDoorEnablesWAF.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureInstanceExtensions.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureInstancePassword.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureManagedDiskEncryption.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureManagedDiskEncryptionSet.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureScaleSetPassword.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureSearchAllowedIPsNotGlobal.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureSearchManagedIdentity.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureSearchPublicNetworkAccessDisabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureSearchSLAIndex.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureSearchSLAQueryUpdates.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServiceFabricClusterProtectionLevel.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusDoubleEncryptionEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusHasCMK.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusIdentityProviderEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusLocalAuthDisabled.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusMinTLSVersion.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/AzureServicebusPublicAccessDisabled.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CDNDisableHttpEndpoints.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CDNEnableHttpsEndpoints.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CDNTLSProtocol12.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CognitiveServicesDisablesPublicNetwork.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CosmosDBAccountsRestrictedAccess.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CosmosDBDisableAccessKeyWrite.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CosmosDBDisablesPublicNetwork.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CosmosDBHaveCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CosmosDBLocalAuthDisabled.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/CutsomRoleDefinitionSubscriptionOwner.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataExplorerSKUHasSLA.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataExplorerServiceIdentity.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataExplorerUsesDiskEncryption.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataFactoryNoPublicNetworkAccess.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataFactoryUsesGitRepository.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DataLakeStoreEncryption.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/DatabricksWorkspaceIsNotPublic.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridDomainIdentityProviderEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridDomainLocalAuthentication.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridDomainNetworkAccess.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridTopicIdentityProviderEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridTopicLocalAuthentication.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/EventgridTopicNetworkAccess.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FrontDoorWAFACLCVE202144228.py +48 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FrontdoorUseWAFMode.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppDisallowCORS.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppEnableLogging.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppHttpVersionLatest.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppMinTLSVersion.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppsAccessibleOverHttps.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/FunctionAppsEnableAuthentication.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/IoTNoPublicNetworkAccess.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyBackedByHSM.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyExpirationDate.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyVaultDisablesPublicNetworkAccess.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyVaultEnablesFirewallRulesSettings.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyVaultEnablesPurgeProtection.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyVaultEnablesSoftDelete.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/KeyvaultRecoveryEnabled.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/LinuxVMUsesSSH.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MLCCLADisabled.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MLComputeClusterMinNodes.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MLPublicAccess.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MSSQLServerAuditPolicyLogMonitor.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MSSQLServerMinTLSVersion.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MariaDBGeoBackupEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MariaDBPublicAccessDisabled.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MariaDBSSLEnforcementEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MonitorLogProfileCategories.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MonitorLogProfileRetentionDays.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLEncryptionEnaled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLGeoBackupEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLPublicAccessDisabled.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLServerMinTLSVersion.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLServerSSLEnforcementEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/MySQLTreatDetectionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NSGRuleHTTPAccessRestricted.py +13 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NSGRulePortAccessRestricted.py +97 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NSGRuleRDPAccessRestricted.py +13 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NSGRuleSSHAccessRestricted.py +13 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NSGRuleUDPAccessRestricted.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NetworkInterfaceEnableIPForwarding.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/NetworkWatcherFlowLogPeriod.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLEncryptionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLFlexiServerGeoBackupEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLMinTLSVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerConnectionThrottlingEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerLogCheckpointsEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerLogConnectionsEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerLogRetentionEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerPublicAccessDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgreSQLServerSSLEnforcementEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgresSQLTreatDetectionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PostgressSQLGeoBackupEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PubsubSKUSLA.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/PubsubSpecifyIdentity.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/RedisCacheEnableNonSSLPort.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/RedisCacheMinTLSVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/RedisCachePublicNetworkAccessEnabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SQLServerEmailAlertsEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SQLServerEmailAlertsToAdminsEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SQLServerNoPublicAccess.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SQLServerPublicAccessDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SQLServerThreatDetectionTypes.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecretContentType.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecretExpirationDate.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecurityCenterContactEmailAlert.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecurityCenterContactEmailAlertAdmins.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecurityCenterContactEmails.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecurityCenterContactPhone.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SecurityCenterStandardPricing.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SignalRSKUSLA.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SpringCloudAPIPortalHTTPSOnly.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SpringCloudAPIPortalPublicAccessIsDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountAzureServicesAccessEnabled.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountDefaultNetworkAccessDeny.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountDisablePublicAccess.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountLoggingQueueServiceEnabled.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountMinimumTlsVersion.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountName.py +42 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountsTransportEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageAccountsUseReplication.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageBlobRestrictPublicAccess.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageBlobServiceContainerPrivateAccess.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/StorageSyncPublicAccessDisabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SynapseWorkspaceEnablesDataExfilProtection.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/SynapseWorkspaceEnablesManagedVirtualNetworks.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMAgentIsInstalled.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMCredsInCustomData.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMDisablePasswordAuthentication.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMEncryptionAtHostEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMScaleSetsAutoOSImagePatchingEnabled.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VMStorageOsDisk.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VnetLocalDNS.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/VnetSingleDNSServer.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/WinVMAutomaticUpdates.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/WinVMEncryptionAtHost.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/azure/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/base_cloudsplaining_resource_iam_check.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/base_registry.py +12 -0
- s1_cns_cli/s1graph/terraform/checks/resource/base_resource_check.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/base_resource_negative_value_check.py +90 -0
- s1_cns_cli/s1graph/terraform/checks/resource/base_resource_value_check.py +114 -0
- s1_cns_cli/s1graph/terraform/checks/resource/digitalocean/DropletSSHKeys.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/digitalocean/FirewallIngressOpen.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/digitalocean/SpacesBucketPublicRead.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/digitalocean/SpacesBucketVersioning.py +19 -0
- s1_cns_cli/s1graph/terraform/checks/resource/digitalocean/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/AbsGoogleBasicRoles.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/AbsGoogleComputeFirewallUnrestrictedIngress.py +46 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/AbsGoogleIAMMemberDefaultServiceAccount.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/AbsGoogleImpersonationRoles.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/AbsGooglePostgresqlDatabaseFlags.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/ArtifactRegistryPrivateRepo.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/ArtifactRegsitryEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/BigQueryDatasetEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/BigQueryPrivateTable.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/BigQueryTableEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/BigTableInstanceEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudArmorWAFACLCVE202144228.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudBuildWorkersArePrivate.py +18 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudFunctionsShouldNotBePublic.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudPubSubEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudSqlMajorVersion.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudStorageLogging.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudStorageSelfLogging.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/CloudStorageVersioningEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataFusionPrivateInstance.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataFusionStackdriverLogs.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataFusionStackdriverMonitoring.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataflowJobEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataflowPrivateJob.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataprocClusterEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataprocPrivateCluster.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/DataprocPublicIpCluster.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GCPCloudRunPrivateService.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEAliasIpEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEBasicAuth.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEBinaryAuthorization.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEClientCertificateDisabled.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEClusterLogging.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEDisableLegacyAuth.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEEnableShieldedNodes.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEEnableVPCFlowLogs.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEEnsureIntegrityMonitoring.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEHasLabels.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEKubernetesRBACGoogleGroups.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKELegacyInstanceMetadataDisabled.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEMasterAuthorizedNetworksEnabled.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEMetadataServerIsEnabled.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEMonitoringEnabled.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKENetworkPolicyEnabled.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKENodePoolAutoRepairEnabled.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKENodePoolAutoUpgradeEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEPodSecurityPolicyEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEPrivateClusterConfig.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEPrivateNodes.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEPublicControlPlane.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEReleaseChannel.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKESecureBootforShieldedNodes.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GKEUseCosImage.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleBigQueryDatasetPublicACL.py +48 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudDNSKeySpecsRSASHA1.py +36 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudDNSSECEnabled.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudMySqlLocalInfileOff.py +49 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlEnablePgaudit.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogCheckpoints.py +47 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogConnection.py +44 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogDisconnection.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogHostname.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogLockWaits.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogMinDuration.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogMinErrorStatement.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogMinMessage.py +52 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogStatement.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudPostgreSqlLogTemp.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlBackupConfiguration.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlDatabasePubliclyAccessible.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlDatabaseRequireSsl.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlServerContainedDBAuthentication.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlServerCrossDBOwnershipChaining.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleCloudSqlServerNoPublicIP.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeBlockProjectSSH.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeBootDiskEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeDefaultServiceAccount.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeDefaultServiceAccountFullAccess.py +54 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeDiskEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeExternalIP.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress20.py +16 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress21.py +16 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress22.py +16 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress3306.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress3389.py +16 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeFirewallUnrestrictedIngress80.py +16 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeIPForward.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeInstanceOSLogin.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeProjectOSLogin.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeSSLPolicy.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeSerialPorts.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleComputeShieldedVM.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleFolderBasicRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleFolderImpersonationRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleFolderMemberDefaultServiceAccount.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleKMSKeyIsPublic.py +57 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleKMSPreventDestroy.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleKMSRotationPeriod.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleOrgBasicRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleOrgImpersonationRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleOrgMemberDefaultServiceAccount.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleProjectAdminServiceAccount.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleProjectBasicRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleProjectDefaultNetwork.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleProjectImpersonationRole.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleProjectMemberDefaultServiceAccount.py +14 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleRoleServiceAccountUser.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleStorageBucketNotPublic.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleStorageBucketUniformAccess.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleStoragePublicAccessPrevention.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleSubnetworkIPV6PrivateGoogleEnabled.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleSubnetworkLoggingEnabled.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/GoogleSubnetworkPrivateGoogleEnabled.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/MemorystoreForRedisAuthEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/MemorystoreForRedisInTransitEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/PubSubPrivateTopic.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/SpannerDatabaseEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/VertexAIDatasetEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/VertexAIMetadataStoreEncryptedWithCMK.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/VertexAIPrivateInstance.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gcp/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/BranchProtectionRequireSignedCommits.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/BranchProtectionReviewNumTwo.py +30 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/PrivateRepo.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/RepositoryEnableVulnerabilityAlerts.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/SecretsEncrypted.py +37 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/WebhookInsecureSsl.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/github/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gitlab/ForcePushDisabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gitlab/PreventSecretsEnabled.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gitlab/RejectUnsignedCommits.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gitlab/RequireTwoApprovalsToMerge.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/gitlab/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/AllowPrivilegeEscalation.py +55 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/AllowPrivilegeEscalationPSP.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/AllowedCapabilities.py +54 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/AllowedCapabilitiesPSP.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/AllowedCapabilitiesSysAdmin.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/CPULimits.py +56 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/CPURequests.py +52 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ContainerSecurityContext.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DefaultNamespace.py +40 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DefaultServiceAccount.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DefaultServiceAccountBinding.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DockerSocketVolume.py +57 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DropCapabilities.py +68 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/DropCapabilitiesPSP.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/HostPort.py +58 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ImageDigest.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ImagePullPolicyAlways.py +58 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ImageTagFixed.py +55 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/LivenessProbe.py +52 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/MemoryLimits.py +53 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/MemoryRequests.py +52 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/MinimiseCapabilities.py +54 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/MinimiseCapabilitiesPSP.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/PodSecurityContext.py +57 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/PrivilegedContainer.py +47 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/PrivilegedContainerPSP.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ReadinessProbe.py +56 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ReadonlyRootFilesystem.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/RootContainerPSP.py +35 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/SeccompPSP.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/Secrets.py +61 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ShareHostIPC.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ShareHostIPCPSP.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ShareHostPID.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/ShareHostPIDPSP.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/SharedHostNetworkNamespace.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/SharedHostNetworkNamespacePSP.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/Tiller.py +77 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/TillerService.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/WildcardRoles.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/kubernetes/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/authorized_keys.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/firewall_inbound_policy.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/firewall_outbound_policy.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/user_email_set.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/linode/user_username_set.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupInboundRule.py +58 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupInboundRulePort22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupInboundRulePort3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupInboundRulePort80.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupOutboundRule.py +25 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/AccessControlGroupRuleDescription.py +47 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LBListenerUsesSecureProtocols.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LBListenerUsingHTTPS.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LBNetworkPrivate.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LBTargetGroupDefinesHealthCheck.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LBTargetGroupUsingHTTPS.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/LaunchConfigurationEncryptionVPC.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLInbound20.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLInbound21.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLInbound22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLInbound3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLInboundCheck.py +27 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NACLPortCheck.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NASEncryptionEnabled.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NKSControlPlaneLogging.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/NKSPublicAccess.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/RouteTableNATGatewayDefault.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/ServerEncryptionVPC.py +17 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/ServerPublicIP.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/ncp/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/AbsSecurityGroupUnrestrictedIngress.py +39 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/AbsSecurityListUnrestrictedIngress.py +45 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/FileSystemEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/IAMPasswordLength.py +31 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/IAMPasswordPolicyLowerCase.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/IAMPasswordPolicyNumeric.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/IAMPasswordPolicySpecialCharacters.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/IAMPasswordPolicyUpperCase.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/InstanceBootVolumeIntransitEncryption.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/InstanceMetadataServiceEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/InstanceMonitoringEnabled.py +24 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/ObjectStorageEmitEvents.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/ObjectStorageEncryption.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/ObjectStoragePublic.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/ObjectStorageVersioning.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityGroupUnrestrictedIngress22.py +10 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityGroupsIngressStatelessSecurityRules.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityListIngress.py +21 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityListIngressStateless.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityListUnrestrictedIngress22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/SecurityListUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/StorageBlockBackupEnabled.py +22 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/StorageBlockEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/oci/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/AbsSecurityGroupUnrestrictedIngress.py +77 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/ComputeInstanceAdminPassword.py +32 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/FirewallRuleSetDestinationIP.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/SecurityGroupUnrestrictedIngress22.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/SecurityGroupUnrestrictedIngress3389.py +9 -0
- s1_cns_cli/s1graph/terraform/checks/resource/openstack/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/InterfaceMgmtProfileNoHTTP.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/InterfaceMgmtProfileNoTelnet.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/NetworkIPsecAlgorithms.py +43 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/NetworkIPsecAuthAlgorithms.py +43 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/NetworkIPsecProtocols.py +20 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyDescription.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyLogForwarding.py +50 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyLoggingEnabled.py +49 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyNoApplicationAny.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyNoDSRI.py +48 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyNoServiceAny.py +51 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/PolicyNoSrcAnyDstAny.py +70 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/ZoneProtectionProfile.py +43 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/ZoneUserIDIncludeACL.py +55 -0
- s1_cns_cli/s1graph/terraform/checks/resource/panos/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/checks/resource/registry.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ComputeInstanceGroupPublicIP.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ComputeInstanceGroupSecurityGroup.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ComputeVMPublicIP.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ComputeVMSecurityGroup.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ComputeVMSerialConsole.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/IAMCloudElevatedMembers.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/IAMFolderElevatedMembers.py +26 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/IAMOrganizationElevatedMembers.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/IAMPassportAccountUsage.py +57 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SAutoUpgrade.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SEtcdKMSEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SNetworkPolicy.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SNodeGroupAutoUpgrade.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SNodeGroupPublicIP.py +28 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SNodeGroupSecurityGroup.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SPublicIP.py +29 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/K8SSecurityGroup.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/KMSSymmetricKeyRotation.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/MDBPublicIP.py +41 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/MDBSecurityGroup.py +33 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ObjectStorageBucketEncryption.py +23 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/ObjectStorageBucketPublicAccess.py +34 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/VPCSecurityGroupAllowAll.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/VPCSecurityGroupRuleAllowAll.py +38 -0
- s1_cns_cli/s1graph/terraform/checks/resource/yandexcloud/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/checks/utils/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/checks/utils/base_cloudsplaining_iam_scanner.py +53 -0
- s1_cns_cli/s1graph/terraform/checks/utils/consts.py +0 -0
- s1_cns_cli/s1graph/terraform/checks/utils/dependency_path_handler.py +13 -0
- s1_cns_cli/s1graph/terraform/checks/utils/iam_terraform_document_to_policy_converter.py +25 -0
- s1_cns_cli/s1graph/terraform/context_parsers/__init__.py +1 -0
- s1_cns_cli/s1graph/terraform/context_parsers/base_parser.py +186 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/__init__.py +4 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/data_context_parser.py +32 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/locals_context_parser.py +40 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/module_context_parser.py +29 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/provider_context_parser.py +59 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/resource_context_parser.py +36 -0
- s1_cns_cli/s1graph/terraform/context_parsers/parsers/variable_context_parser.py +42 -0
- s1_cns_cli/s1graph/terraform/context_parsers/registry.py +48 -0
- s1_cns_cli/s1graph/terraform/context_parsers/tf_plan/__init__.py +34 -0
- s1_cns_cli/s1graph/terraform/deep_analysis_plan_graph_manager.py +50 -0
- s1_cns_cli/s1graph/terraform/evaluation/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/evaluation/base_variable_evaluation.py +71 -0
- s1_cns_cli/s1graph/terraform/graph_builder/EncryptionCalculation.md +45 -0
- s1_cns_cli/s1graph/terraform/graph_builder/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/abstract_handler.py +248 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/builder.py +25 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/consts.py +14 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/module_handler.py +271 -0
- s1_cns_cli/s1graph/terraform/graph_builder/foreach/resource_handler.py +110 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/attribute_names.py +0 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/block_types.py +15 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/blocks.py +181 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/generic_resource_encryption.py +122 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_components/module.py +271 -0
- s1_cns_cli/s1graph/terraform/graph_builder/graph_to_tf_definitions.py +43 -0
- s1_cns_cli/s1graph/terraform/graph_builder/local_graph.py +710 -0
- s1_cns_cli/s1graph/terraform/graph_builder/utils.py +300 -0
- s1_cns_cli/s1graph/terraform/graph_builder/variable_rendering/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/graph_builder/variable_rendering/evaluate_terraform.py +583 -0
- s1_cns_cli/s1graph/terraform/graph_builder/variable_rendering/renderer.py +588 -0
- s1_cns_cli/s1graph/terraform/graph_builder/variable_rendering/safe_eval_functions.py +344 -0
- s1_cns_cli/s1graph/terraform/graph_builder/variable_rendering/vertex_reference.py +17 -0
- s1_cns_cli/s1graph/terraform/graph_manager.py +63 -0
- s1_cns_cli/s1graph/terraform/image_referencer/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/image_referencer/base_provider.py +57 -0
- s1_cns_cli/s1graph/terraform/image_referencer/manager.py +27 -0
- s1_cns_cli/s1graph/terraform/image_referencer/provider/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform/image_referencer/provider/aws.py +97 -0
- s1_cns_cli/s1graph/terraform/image_referencer/provider/azure.py +111 -0
- s1_cns_cli/s1graph/terraform/image_referencer/provider/gcp.py +70 -0
- s1_cns_cli/s1graph/terraform/module_loading/__init__.py +8 -0
- s1_cns_cli/s1graph/terraform/module_loading/content.py +39 -0
- s1_cns_cli/s1graph/terraform/module_loading/loader.py +74 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/__init__.py +5 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/bitbucket_access_token_loader.py +19 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/bitbucket_loader.py +10 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/git_loader.py +145 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/github_access_token_loader.py +38 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/github_loader.py +21 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/local_path_loader.py +49 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/registry_loader.py +210 -0
- s1_cns_cli/s1graph/terraform/module_loading/loaders/versions_parser.py +68 -0
- s1_cns_cli/s1graph/terraform/module_loading/module_finder.py +100 -0
- s1_cns_cli/s1graph/terraform/module_loading/module_params.py +26 -0
- s1_cns_cli/s1graph/terraform/module_loading/registry.py +106 -0
- s1_cns_cli/s1graph/terraform/modules/__init__.py +2 -0
- s1_cns_cli/s1graph/terraform/modules/module_objects.py +94 -0
- s1_cns_cli/s1graph/terraform/modules/module_utils.py +288 -0
- s1_cns_cli/s1graph/terraform/parser.py +650 -0
- s1_cns_cli/s1graph/terraform/parser_functions.py +207 -0
- s1_cns_cli/s1graph/terraform/plan_parser.py +330 -0
- s1_cns_cli/s1graph/terraform/plan_runner.py +292 -0
- s1_cns_cli/s1graph/terraform/plan_utils.py +137 -0
- s1_cns_cli/s1graph/terraform/runner.py +694 -0
- s1_cns_cli/s1graph/terraform/tag_providers/__init__.py +21 -0
- s1_cns_cli/s1graph/terraform/tag_providers/aws.py +7 -0
- s1_cns_cli/s1graph/terraform/tag_providers/azure.py +7 -0
- s1_cns_cli/s1graph/terraform/tag_providers/gcp.py +7 -0
- s1_cns_cli/s1graph/terraform/tf_parser.py +563 -0
- s1_cns_cli/s1graph/terraform_json/__init__.py +0 -0
- s1_cns_cli/s1graph/terraform_json/parser.py +199 -0
- s1_cns_cli/s1graph/terraform_json/runner.py +230 -0
- s1_cns_cli/s1graph/terraform_json/utils.py +67 -0
- s1_cns_cli/s1graph/version.py +1 -0
- s1_cns_cli/s1graph/yaml_doc/__init__.py +0 -0
- s1_cns_cli/s1graph/yaml_doc/base_registry.py +349 -0
- s1_cns_cli/s1graph/yaml_doc/base_yaml_check.py +28 -0
- s1_cns_cli/s1graph/yaml_doc/enums.py +8 -0
- s1_cns_cli/s1graph/yaml_doc/registry.py +4 -0
- s1_cns_cli/s1graph/yaml_doc/runner.py +128 -0
- s1_cns_cli/sentry.py +39 -0
- s1_cns_cli/version.py +2 -0
- s1_shift_left_cli-0.4.0.dist-info/LICENSE +5 -0
- s1_shift_left_cli-0.4.0.dist-info/METADATA +113 -0
- s1_shift_left_cli-0.4.0.dist-info/RECORD +2207 -0
- s1_shift_left_cli-0.4.0.dist-info/WHEEL +4 -0
- s1_shift_left_cli-0.4.0.dist-info/entry_points.txt +5 -0
|
@@ -0,0 +1,710 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
from collections import defaultdict
|
|
6
|
+
from copy import deepcopy
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import List, Optional, Union, Any, Dict, Set, Tuple
|
|
9
|
+
|
|
10
|
+
from typing_extensions import TypedDict
|
|
11
|
+
|
|
12
|
+
import s1_cns_cli.s1graph.terraform.graph_builder.foreach.consts
|
|
13
|
+
from s1_cns_cli.s1graph.common.graph.graph_builder import Edge
|
|
14
|
+
from s1_cns_cli.s1graph.common.graph.graph_builder import reserved_attribute_names
|
|
15
|
+
from s1_cns_cli.s1graph.common.graph.graph_builder.graph_components.attribute_names import CustomAttributes
|
|
16
|
+
from s1_cns_cli.s1graph.common.graph.graph_builder.local_graph import LocalGraph
|
|
17
|
+
from s1_cns_cli.s1graph.common.graph.graph_builder.utils import calculate_hash, join_trimmed_strings, filter_sub_keys
|
|
18
|
+
from s1_cns_cli.s1graph.common.runners.base_runner import strtobool
|
|
19
|
+
from s1_cns_cli.s1graph.common.util.parser_utils import get_abs_path, get_tf_definition_key_from_module_dependency
|
|
20
|
+
from s1_cns_cli.s1graph.common.util.type_forcers import force_int
|
|
21
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.foreach.builder import ForeachBuilder
|
|
22
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.variable_rendering.vertex_reference import TerraformVertexReference
|
|
23
|
+
from s1_cns_cli.s1graph.terraform.modules.module_objects import TFModule
|
|
24
|
+
from s1_cns_cli.s1graph.terraform.checks.utils.dependency_path_handler import unify_dependency_path
|
|
25
|
+
from s1_cns_cli.s1graph.terraform.context_parsers.registry import parser_registry
|
|
26
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.graph_components.block_types import BlockType
|
|
27
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.graph_components.blocks import TerraformBlock
|
|
28
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.graph_components.generic_resource_encryption import ENCRYPTION_BY_RESOURCE_TYPE
|
|
29
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.graph_components.module import Module
|
|
30
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.utils import (
|
|
31
|
+
get_referenced_vertices_in_value,
|
|
32
|
+
attribute_has_nested_attributes, remove_index_pattern_from_str,
|
|
33
|
+
)
|
|
34
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.utils import is_local_path
|
|
35
|
+
from s1_cns_cli.s1graph.terraform.graph_builder.variable_rendering.renderer import TerraformVariableRenderer
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
MODULE_RESERVED_ATTRIBUTES = ("source", "version")
|
|
39
|
+
CROSS_VARIABLE_EDGE_PREFIX = '[cross-variable] '
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Undetermined(TypedDict):
|
|
43
|
+
module_vertex_id: int
|
|
44
|
+
attribute_name: str
|
|
45
|
+
variable_vertex_id: int
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class TerraformLocalGraph(LocalGraph[TerraformBlock]):
|
|
49
|
+
def __init__(self, module: Module) -> None:
|
|
50
|
+
super().__init__()
|
|
51
|
+
self.vertices: list[TerraformBlock] = []
|
|
52
|
+
self.module = module
|
|
53
|
+
self.map_path_to_module: Dict[str, List[int]] = {}
|
|
54
|
+
self.relative_paths_cache: dict[tuple[str, str], str] = {}
|
|
55
|
+
self.abspath_cache: Dict[str, str] = {}
|
|
56
|
+
self.dirname_cache: Dict[str, str] = {}
|
|
57
|
+
self.vertices_by_module_dependency_by_name: Dict[Tuple[str, str], Dict[BlockType, Dict[str, List[int]]]] = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
|
|
58
|
+
self.vertices_by_module_dependency: Dict[Tuple[str, str], Dict[BlockType, List[int]]] = defaultdict(lambda: defaultdict(list))
|
|
59
|
+
self.enable_foreach_handling = strtobool(os.getenv('SENTINELONE_CNS_ENABLE_FOREACH_HANDLING', 'False'))
|
|
60
|
+
self.enable_modules_foreach_handling = strtobool(os.getenv('SENTINELONE_CNS_ENABLE_MODULES_FOREACH_HANDLING', 'False'))
|
|
61
|
+
self.use_new_tf_parser = strtobool(os.getenv('SENTINELONE_CNS_NEW_TF_PARSER', 'False'))
|
|
62
|
+
self.foreach_blocks: Dict[str, List[int]] = {BlockType.RESOURCE: [], BlockType.MODULE: []}
|
|
63
|
+
|
|
64
|
+
def build_graph(self, render_variables: bool) -> None:
|
|
65
|
+
self._create_vertices()
|
|
66
|
+
logging.info(f"[TerraformLocalGraph] created {len(self.vertices)} vertices")
|
|
67
|
+
self._build_edges()
|
|
68
|
+
logging.info(f"[TerraformLocalGraph] created {len(self.edges)} edges")
|
|
69
|
+
if (self.enable_foreach_handling or self.enable_modules_foreach_handling) \
|
|
70
|
+
and (self.foreach_blocks[BlockType.RESOURCE] or self.foreach_blocks[BlockType.MODULE]):
|
|
71
|
+
try:
|
|
72
|
+
logging.info('[TerraformLocalGraph] start handling foreach')
|
|
73
|
+
foreach_builder = ForeachBuilder(self)
|
|
74
|
+
foreach_builder.handle(self.foreach_blocks)
|
|
75
|
+
self._arrange_graph_data()
|
|
76
|
+
self._build_edges()
|
|
77
|
+
logging.info(f"[TerraformLocalGraph] finished handling foreach values with {len(self.vertices)} vertices and {len(self.edges)} edges")
|
|
78
|
+
except Exception as e:
|
|
79
|
+
logging.info(f'Failed to process foreach handling, error: {str(e)}', exc_info=True)
|
|
80
|
+
|
|
81
|
+
self.calculate_encryption_attribute(ENCRYPTION_BY_RESOURCE_TYPE)
|
|
82
|
+
if render_variables:
|
|
83
|
+
logging.info(f"Rendering variables, graph has {len(self.vertices)} vertices and {len(self.edges)} edges")
|
|
84
|
+
renderer = TerraformVariableRenderer(self)
|
|
85
|
+
renderer.render_variables_from_local_graph()
|
|
86
|
+
self.update_vertices_breadcrumbs_and_module_connections()
|
|
87
|
+
self.update_nested_modules_address()
|
|
88
|
+
if strtobool(os.getenv("SENTINELONE_CNS_EXPERIMENTAL_CROSS_VARIABLE_EDGES", "True")):
|
|
89
|
+
# experimental flag on building cross variable edges for terraform graph
|
|
90
|
+
logging.info("Building cross variable edges")
|
|
91
|
+
edges_count = len(self.edges)
|
|
92
|
+
self._build_cross_variable_edges()
|
|
93
|
+
logging.info(f"Found {len(self.edges) - edges_count} cross variable edges")
|
|
94
|
+
|
|
95
|
+
def _create_vertices(self) -> None:
|
|
96
|
+
logging.info("Creating vertices")
|
|
97
|
+
self.vertices: List[TerraformBlock] = [None] * len(self.module.blocks)
|
|
98
|
+
for i, block in enumerate(self.module.blocks):
|
|
99
|
+
self.vertices[i] = block
|
|
100
|
+
self._add_block_data_to_graph(i, block)
|
|
101
|
+
if self.enable_foreach_handling and (
|
|
102
|
+
s1_cns_cli.s1graph.terraform.graph_builder.foreach.consts.FOREACH_STRING in block.attributes or s1_cns_cli.psgraph.terraform.graph_builder.foreach.consts.COUNT_STRING in block.attributes) \
|
|
103
|
+
and block.block_type in (BlockType.MODULE, BlockType.RESOURCE):
|
|
104
|
+
self.foreach_blocks[block.block_type].append(i)
|
|
105
|
+
|
|
106
|
+
def _add_block_data_to_graph(self, idx: int, block: TerraformBlock) -> None:
|
|
107
|
+
self.vertices_by_block_type[block.block_type].append(idx)
|
|
108
|
+
self.vertices_block_name_map[block.block_type][block.name].append(idx)
|
|
109
|
+
|
|
110
|
+
if block.block_type == BlockType.MODULE:
|
|
111
|
+
# map between file paths and module vertices indexes from that file
|
|
112
|
+
self.map_path_to_module.setdefault(block.path, []).append(idx)
|
|
113
|
+
|
|
114
|
+
if self.use_new_tf_parser:
|
|
115
|
+
self.vertices_by_module_dependency[block.source_module_object][block.block_type].append(idx)
|
|
116
|
+
self.vertices_by_module_dependency_by_name[block.source_module_object][block.block_type][block.name].append(idx)
|
|
117
|
+
else:
|
|
118
|
+
self.vertices_by_module_dependency[(block.module_dependency, block.module_dependency_num)][block.block_type].append(idx)
|
|
119
|
+
self.vertices_by_module_dependency_by_name[(block.module_dependency, block.module_dependency_num)][block.block_type][block.name].append(idx)
|
|
120
|
+
|
|
121
|
+
self.in_edges[idx] = []
|
|
122
|
+
self.out_edges[idx] = []
|
|
123
|
+
|
|
124
|
+
def _arrange_graph_data(self) -> None:
|
|
125
|
+
# reset all the relevant data
|
|
126
|
+
self.vertices_by_block_type = defaultdict(list)
|
|
127
|
+
self.vertices_block_name_map = defaultdict(lambda: defaultdict(list))
|
|
128
|
+
self.map_path_to_module = {}
|
|
129
|
+
self.vertices_by_module_dependency = defaultdict(lambda: defaultdict(list))
|
|
130
|
+
self.vertices_by_module_dependency_by_name = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
|
|
131
|
+
self.edges = []
|
|
132
|
+
for i in range(len(self.vertices)):
|
|
133
|
+
self.out_edges[i] = []
|
|
134
|
+
self.in_edges[i] = []
|
|
135
|
+
|
|
136
|
+
for i, block in enumerate(self.vertices):
|
|
137
|
+
self._add_block_data_to_graph(i, block)
|
|
138
|
+
|
|
139
|
+
def _get_aliases(self) -> Dict[str, Dict[str, BlockType]]:
|
|
140
|
+
"""
|
|
141
|
+
:return aliases: map between alias names that are found inside the blocks and the block type their aliased to.
|
|
142
|
+
"""
|
|
143
|
+
return {
|
|
144
|
+
vertex.name: {CustomAttributes.BLOCK_TYPE: vertex.block_type}
|
|
145
|
+
for vertex in self.vertices
|
|
146
|
+
if "alias" in vertex.attributes
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
def get_module_vertices_mapping(self) -> None:
|
|
150
|
+
"""
|
|
151
|
+
For each vertex, if it's originated in a module import, add to the vertex the index of the
|
|
152
|
+
matching module vertex as 'source_module'
|
|
153
|
+
"""
|
|
154
|
+
if self.use_new_tf_parser:
|
|
155
|
+
for vertex in self.vertices:
|
|
156
|
+
if not vertex.source_module_object:
|
|
157
|
+
continue
|
|
158
|
+
for idx in self.vertices_by_block_type[BlockType.MODULE]:
|
|
159
|
+
if vertex.source_module_object.name != self.vertices[idx].name:
|
|
160
|
+
continue
|
|
161
|
+
if vertex.source_module_object.path != self.vertices[idx].path:
|
|
162
|
+
continue
|
|
163
|
+
if vertex.source_module_object.nested_tf_module != self.vertices[idx].source_module_object:
|
|
164
|
+
continue
|
|
165
|
+
if vertex.source_module_object.foreach_idx != self.vertices[idx].for_each_index:
|
|
166
|
+
continue
|
|
167
|
+
vertex.source_module.add(idx)
|
|
168
|
+
break
|
|
169
|
+
return
|
|
170
|
+
|
|
171
|
+
block_dirs_to_modules: Dict[Tuple[str, str], Dict[str, Set[int]]] = defaultdict(dict)
|
|
172
|
+
for dir_name, paths_to_modules in self.module.module_dependency_map.items():
|
|
173
|
+
# for each directory, find the module vertex that imported it
|
|
174
|
+
for path_to_module in paths_to_modules:
|
|
175
|
+
if not path_to_module:
|
|
176
|
+
continue
|
|
177
|
+
path_to_module_str = unify_dependency_path(path_to_module)
|
|
178
|
+
if block_dirs_to_modules.get((dir_name, path_to_module_str)):
|
|
179
|
+
continue
|
|
180
|
+
module_file = get_abs_path(path_to_module[-1])
|
|
181
|
+
module_list = self.map_path_to_module.get(module_file, [])
|
|
182
|
+
for module_index in module_list:
|
|
183
|
+
module_vertex = self.vertices[module_index]
|
|
184
|
+
if get_path_with_nested_modules(module_vertex) == path_to_module_str:
|
|
185
|
+
module_vertex_dir = self.get_dirname(module_vertex.path)
|
|
186
|
+
module_source = module_vertex.attributes.get("source", [""])[0]
|
|
187
|
+
module_version = module_vertex.attributes.get("version", ["latest"])[0]
|
|
188
|
+
dest_module_path = self._get_dest_module_path(
|
|
189
|
+
curr_module_dir=module_vertex_dir,
|
|
190
|
+
dest_module_source=module_source,
|
|
191
|
+
dest_module_version=module_version
|
|
192
|
+
)
|
|
193
|
+
if dest_module_path == dir_name:
|
|
194
|
+
module_dependency_num = self.module.module_address_map.get((module_vertex.path, module_vertex.name))
|
|
195
|
+
if module_dependency_num:
|
|
196
|
+
block_dirs_to_modules[(dir_name, path_to_module_str)].setdefault(module_dependency_num, set()).add(module_index)
|
|
197
|
+
|
|
198
|
+
for vertex in self.vertices:
|
|
199
|
+
# match the right module vertex according to the vertex path directory
|
|
200
|
+
module_dependency_nums = block_dirs_to_modules.get((self.get_dirname(vertex.path), vertex.module_dependency))
|
|
201
|
+
if module_dependency_nums:
|
|
202
|
+
module_indices = module_dependency_nums.get(vertex.module_dependency_num)
|
|
203
|
+
if module_indices:
|
|
204
|
+
vertex.source_module = module_indices
|
|
205
|
+
|
|
206
|
+
def _build_edges(self) -> None:
|
|
207
|
+
logging.info("Creating edges")
|
|
208
|
+
self.get_module_vertices_mapping()
|
|
209
|
+
aliases = self._get_aliases()
|
|
210
|
+
resources_types = self.get_resources_types_in_graph()
|
|
211
|
+
for origin_node_index, vertex in enumerate(self.vertices):
|
|
212
|
+
self._build_edges_for_vertex(origin_node_index, vertex, aliases, resources_types)
|
|
213
|
+
|
|
214
|
+
def _build_edges_for_vertex(self, origin_node_index: int, vertex: TerraformBlock, aliases: Dict[str, Dict[str, BlockType]],
|
|
215
|
+
resources_types: List[str], cross_variable_edges: bool = False,
|
|
216
|
+
referenced_modules: Optional[List[Dict[str, Any]]] = None):
|
|
217
|
+
|
|
218
|
+
for attribute_key, attribute_value in vertex.attributes.items():
|
|
219
|
+
if attribute_key in reserved_attribute_names or attribute_has_nested_attributes(
|
|
220
|
+
attribute_key, vertex.attributes
|
|
221
|
+
):
|
|
222
|
+
continue
|
|
223
|
+
referenced_vertices = get_referenced_vertices_in_value(
|
|
224
|
+
value=attribute_value,
|
|
225
|
+
aliases=aliases,
|
|
226
|
+
resources_types=resources_types,
|
|
227
|
+
)
|
|
228
|
+
for vertex_reference in referenced_vertices:
|
|
229
|
+
# for certain blocks such as data and resource, the block name is composed from several parts.
|
|
230
|
+
# the purpose of the loop is to avoid not finding the node if the name has several parts
|
|
231
|
+
sub_values = [remove_index_pattern_from_str(sub_value) for sub_value in vertex_reference.sub_parts]
|
|
232
|
+
for i in range(len(sub_values)):
|
|
233
|
+
reference_name = join_trimmed_strings(char_to_join=".", str_lst=sub_values, num_to_trim=i)
|
|
234
|
+
source_module_object = None
|
|
235
|
+
if self.use_new_tf_parser:
|
|
236
|
+
source_module_object = vertex.source_module_object
|
|
237
|
+
if referenced_modules is not None:
|
|
238
|
+
for module in referenced_modules:
|
|
239
|
+
referenced_module_idx = module.get("idx")
|
|
240
|
+
referenced_module_path = module.get("path")
|
|
241
|
+
referenced_module_object = module.get("source_module_object")
|
|
242
|
+
if not self.use_new_tf_parser:
|
|
243
|
+
source_module_object = referenced_module_object if source_module_object else None
|
|
244
|
+
dest_node_index = self._find_vertex_index_relative_to_path(
|
|
245
|
+
vertex_reference.block_type, reference_name, referenced_module_path,
|
|
246
|
+
vertex.module_dependency,
|
|
247
|
+
vertex.module_dependency_num, referenced_module_idx,
|
|
248
|
+
source_module_object=source_module_object
|
|
249
|
+
)
|
|
250
|
+
self._create_edge_from_reference(attribute_key, origin_node_index, dest_node_index,
|
|
251
|
+
sub_values, vertex_reference, cross_variable_edges)
|
|
252
|
+
if vertex.module_dependency or hasattr(vertex, "source_module_object"):
|
|
253
|
+
dest_node_index = self._find_vertex_index_relative_to_path(
|
|
254
|
+
vertex_reference.block_type, reference_name, vertex.path, vertex.module_dependency,
|
|
255
|
+
vertex.module_dependency_num, source_module_object=source_module_object
|
|
256
|
+
)
|
|
257
|
+
if dest_node_index == -1:
|
|
258
|
+
dest_node_index = self._find_vertex_index_relative_to_path(
|
|
259
|
+
vertex_reference.block_type, reference_name, vertex.path, vertex.path,
|
|
260
|
+
vertex.module_dependency_num, source_module_object=source_module_object
|
|
261
|
+
)
|
|
262
|
+
else:
|
|
263
|
+
dest_node_index = self._find_vertex_index_relative_to_path(
|
|
264
|
+
vertex_reference.block_type, reference_name, vertex.path, vertex.module_dependency,
|
|
265
|
+
vertex.module_dependency_num, source_module_object=source_module_object
|
|
266
|
+
)
|
|
267
|
+
if dest_node_index > -1 and origin_node_index > -1:
|
|
268
|
+
self._create_edge_from_reference(attribute_key, origin_node_index, dest_node_index, sub_values,
|
|
269
|
+
vertex_reference, cross_variable_edges)
|
|
270
|
+
break
|
|
271
|
+
|
|
272
|
+
if vertex.block_type == BlockType.MODULE and vertex.attributes.get('source') \
|
|
273
|
+
and isinstance(vertex.attributes.get('source')[0], str):
|
|
274
|
+
dest_module_path = self._get_dest_module_path(
|
|
275
|
+
curr_module_dir=self.get_dirname(vertex.path),
|
|
276
|
+
dest_module_source=vertex.attributes["source"][0],
|
|
277
|
+
dest_module_version=vertex.attributes.get("version", ["latest"])[0]
|
|
278
|
+
)
|
|
279
|
+
target_variables = self._get_target_variables(vertex, dest_module_path)
|
|
280
|
+
for attribute in vertex.attributes.keys():
|
|
281
|
+
if attribute in MODULE_RESERVED_ATTRIBUTES:
|
|
282
|
+
continue
|
|
283
|
+
target_variable = next((v for v in target_variables if self.vertices[v].name == attribute), None)
|
|
284
|
+
if target_variable is not None:
|
|
285
|
+
self._create_edge(target_variable, origin_node_index, "default", cross_variable_edges)
|
|
286
|
+
elif vertex.block_type == BlockType.TF_VARIABLE:
|
|
287
|
+
# Assuming the tfvars file is in the same directory as the variables file (best practice)
|
|
288
|
+
# target_variables = [
|
|
289
|
+
# index
|
|
290
|
+
# for index in self.vertices_block_name_map.get(BlockType.VARIABLE, {}).get(vertex.name, [])
|
|
291
|
+
# if self.get_dirname(self.vertices[index].path) == self.get_dirname(vertex.path)
|
|
292
|
+
# ]
|
|
293
|
+
# PS_CHANGE
|
|
294
|
+
target_variables = []
|
|
295
|
+
for index in self.vertices_block_name_map.get(BlockType.VARIABLE, {}).get(vertex.name, []):
|
|
296
|
+
target_variables.append(index)
|
|
297
|
+
break
|
|
298
|
+
if len(target_variables) == 1:
|
|
299
|
+
self._create_edge(target_variables[0], origin_node_index, "default", cross_variable_edges)
|
|
300
|
+
|
|
301
|
+
def _create_edge_from_reference(self, attribute_key: Any, origin_node_index: int, dest_node_index: int,
|
|
302
|
+
sub_values: List[Any], vertex_reference: TerraformVertexReference,
|
|
303
|
+
cross_variable_edges: bool) -> None:
|
|
304
|
+
if dest_node_index > -1 and origin_node_index > -1:
|
|
305
|
+
if vertex_reference.block_type == BlockType.MODULE:
|
|
306
|
+
try:
|
|
307
|
+
self._connect_module(
|
|
308
|
+
sub_values, attribute_key, self.vertices[dest_node_index],
|
|
309
|
+
origin_node_index,
|
|
310
|
+
cross_variable_edges
|
|
311
|
+
)
|
|
312
|
+
except Exception:
|
|
313
|
+
logging.warning(
|
|
314
|
+
f"Module {self.vertices[dest_node_index]} does not have source attribute, skipping"
|
|
315
|
+
)
|
|
316
|
+
else:
|
|
317
|
+
self._create_edge(origin_node_index, dest_node_index, attribute_key,
|
|
318
|
+
cross_variable_edges)
|
|
319
|
+
|
|
320
|
+
def _get_target_variables(self, vertex: TerraformBlock, dest_module_path: str) -> list[int]:
|
|
321
|
+
if self.use_new_tf_parser:
|
|
322
|
+
target_path = get_vertex_as_tf_module(vertex)
|
|
323
|
+
return [
|
|
324
|
+
index
|
|
325
|
+
for index in self.vertices_by_module_dependency.get(target_path, {}).get(BlockType.VARIABLE, [])
|
|
326
|
+
if self.get_dirname(self.vertices[index].path) == dest_module_path
|
|
327
|
+
]
|
|
328
|
+
else:
|
|
329
|
+
target_path = get_path_with_nested_modules(vertex)
|
|
330
|
+
return [
|
|
331
|
+
index
|
|
332
|
+
for index in self.vertices_by_module_dependency.get(
|
|
333
|
+
(target_path, self.module.module_address_map.get((vertex.path, vertex.name))), {}).get(
|
|
334
|
+
BlockType.VARIABLE, [])
|
|
335
|
+
if self.get_dirname(self.vertices[index].path) == dest_module_path
|
|
336
|
+
]
|
|
337
|
+
|
|
338
|
+
def _build_cross_variable_edges(self):
|
|
339
|
+
aliases = self._get_aliases()
|
|
340
|
+
resources_types = self.get_resources_types_in_graph()
|
|
341
|
+
for origin_node_index, referenced_vertices in self.out_edges.items():
|
|
342
|
+
vertex = self.vertices[origin_node_index]
|
|
343
|
+
if vertex.block_type == BlockType.RESOURCE and \
|
|
344
|
+
any(self.vertices[e.dest].block_type != BlockType.RESOURCE for e in referenced_vertices):
|
|
345
|
+
modules = vertex.breadcrumbs.get(CustomAttributes.SOURCE_MODULE, [])
|
|
346
|
+
self._build_edges_for_vertex(origin_node_index, vertex, aliases, resources_types, True, modules)
|
|
347
|
+
|
|
348
|
+
def _create_edge(self, origin_vertex_index: int, dest_vertex_index: int, label: str,
|
|
349
|
+
cross_variable_edges: bool = False) -> bool:
|
|
350
|
+
if origin_vertex_index == dest_vertex_index:
|
|
351
|
+
return False
|
|
352
|
+
edge = Edge(origin_vertex_index, dest_vertex_index, label)
|
|
353
|
+
if cross_variable_edges:
|
|
354
|
+
if self.vertices[dest_vertex_index].block_type != BlockType.RESOURCE or \
|
|
355
|
+
self.vertices[origin_vertex_index].block_type != BlockType.RESOURCE:
|
|
356
|
+
return False
|
|
357
|
+
if edge in self.out_edges[origin_vertex_index]:
|
|
358
|
+
return False
|
|
359
|
+
edge.label = CROSS_VARIABLE_EDGE_PREFIX + edge.label
|
|
360
|
+
if edge in self.out_edges[origin_vertex_index]:
|
|
361
|
+
return False
|
|
362
|
+
self.edges.append(edge)
|
|
363
|
+
self.out_edges[origin_vertex_index].append(edge)
|
|
364
|
+
self.in_edges[dest_vertex_index].append(edge)
|
|
365
|
+
return True
|
|
366
|
+
|
|
367
|
+
def _connect_module(
|
|
368
|
+
self, sub_values: List[str], attribute_key: str, module_node: TerraformBlock, origin_node_index: int, cross_variable_edges: bool = False
|
|
369
|
+
) -> None:
|
|
370
|
+
"""
|
|
371
|
+
:param sub_values: list of sub values of the attribute value.
|
|
372
|
+
example: given 'instance_type = module.child.myoutput',
|
|
373
|
+
then attribute_key = instance_type, sub_values = ['child', 'myoutput']
|
|
374
|
+
:param attribute_key: the name of the attribute that has module block as value
|
|
375
|
+
:param module_node: the graph node of the module
|
|
376
|
+
|
|
377
|
+
The function receives a node of a block of type BlockType.Module, and finds all the nodes of blocks that belong to this
|
|
378
|
+
module, and creates edges between them.
|
|
379
|
+
"""
|
|
380
|
+
curr_module_dir = self.get_dirname(module_node.path)
|
|
381
|
+
dest_module_source = module_node.attributes["source"][0]
|
|
382
|
+
dest_module_version = module_node.attributes.get("version", ["latest"])[0]
|
|
383
|
+
dest_module_path = self._get_dest_module_path(
|
|
384
|
+
curr_module_dir=curr_module_dir,
|
|
385
|
+
dest_module_source=dest_module_source,
|
|
386
|
+
dest_module_version=dest_module_version
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
if len(sub_values) > 1:
|
|
390
|
+
block_name_in_other_module = sub_values[1]
|
|
391
|
+
output_blocks_with_name = self.vertices_block_name_map.get(BlockType.OUTPUT, {}).get(
|
|
392
|
+
block_name_in_other_module, []
|
|
393
|
+
)
|
|
394
|
+
for vertex_index in output_blocks_with_name:
|
|
395
|
+
vertex = self.vertices[vertex_index]
|
|
396
|
+
if self._should_add_edge(vertex, dest_module_path, module_node):
|
|
397
|
+
added_edge = self._create_edge(origin_node_index, vertex_index, attribute_key, cross_variable_edges)
|
|
398
|
+
if added_edge:
|
|
399
|
+
self.vertices[origin_node_index].add_module_connection(attribute_key, vertex_index)
|
|
400
|
+
break
|
|
401
|
+
|
|
402
|
+
def _get_dest_module_path(self, curr_module_dir: str, dest_module_source: str, dest_module_version: str) -> str:
|
|
403
|
+
"""
|
|
404
|
+
:param curr_module_dir: current source directory
|
|
405
|
+
:param dest_module_source: the value of module.source
|
|
406
|
+
:return: the real path in the local file system of the dest module
|
|
407
|
+
"""
|
|
408
|
+
relative_path_key = (curr_module_dir, dest_module_source)
|
|
409
|
+
if relative_path_key in self.relative_paths_cache:
|
|
410
|
+
return self.relative_paths_cache[relative_path_key]
|
|
411
|
+
elif is_local_path(curr_module_dir, dest_module_source):
|
|
412
|
+
self.relative_paths_cache[relative_path_key] = os.path.abspath(Path(curr_module_dir) / dest_module_source)
|
|
413
|
+
return self.relative_paths_cache[relative_path_key]
|
|
414
|
+
elif (dest_module_source, dest_module_version) in self.module.external_modules_source_map:
|
|
415
|
+
return self.module.external_modules_source_map[(dest_module_source, dest_module_version)]
|
|
416
|
+
|
|
417
|
+
# this happens, when we have external modules, which weren't downloaded
|
|
418
|
+
return ""
|
|
419
|
+
|
|
420
|
+
def _find_vertex_index_relative_to_path(
|
|
421
|
+
self, block_type: BlockType, name: str, block_path: str, module_path: str, module_num: str, relative_module_idx: Optional[int] = None, source_module_object: Optional[TFModule] = None
|
|
422
|
+
) -> int:
|
|
423
|
+
relative_vertices = []
|
|
424
|
+
if self.use_new_tf_parser:
|
|
425
|
+
if relative_module_idx is None:
|
|
426
|
+
module_dependency_by_name_key = source_module_object
|
|
427
|
+
else:
|
|
428
|
+
vertex = self.vertices[relative_module_idx]
|
|
429
|
+
module_dependency_by_name_key = vertex.source_module_object
|
|
430
|
+
elif relative_module_idx is not None:
|
|
431
|
+
# This part of the codescanner is very inefficient for large graphs
|
|
432
|
+
# It's better to avoid using it by setting `self.use_new_tf_parser`
|
|
433
|
+
module_dependency_by_name_key = next(k for k, v in self.vertices_by_module_dependency.items() if
|
|
434
|
+
v.get(BlockType.MODULE, []).__contains__(relative_module_idx))
|
|
435
|
+
else:
|
|
436
|
+
module_dependency_by_name_key = (module_path, module_num)
|
|
437
|
+
possible_vertices = self.vertices_by_module_dependency_by_name.get(module_dependency_by_name_key, {}).get(block_type, {}).get(name, []) # important to use this specific map for big graph performance
|
|
438
|
+
for vertex_index in possible_vertices:
|
|
439
|
+
vertex = self.vertices[vertex_index]
|
|
440
|
+
if self.get_dirname(vertex.path) == self.get_dirname(block_path):
|
|
441
|
+
relative_vertices.append(vertex_index)
|
|
442
|
+
|
|
443
|
+
if len(relative_vertices) == 1:
|
|
444
|
+
relative_vertex = relative_vertices[0]
|
|
445
|
+
else:
|
|
446
|
+
relative_vertex = self._find_vertex_with_longest_path_match(relative_vertices, block_path)
|
|
447
|
+
return relative_vertex
|
|
448
|
+
|
|
449
|
+
def _find_vertex_with_longest_path_match(self, relevant_vertices_indexes: List[int], origin_path: str) -> int:
|
|
450
|
+
vertex_index_with_longest_common_prefix = -1
|
|
451
|
+
longest_common_prefix = ""
|
|
452
|
+
for vertex_index in relevant_vertices_indexes:
|
|
453
|
+
vertex = self.vertices[vertex_index]
|
|
454
|
+
common_prefix = os.path.commonpath([os.path.realpath(vertex.path), os.path.realpath(origin_path)])
|
|
455
|
+
if len(common_prefix) > len(longest_common_prefix):
|
|
456
|
+
vertex_index_with_longest_common_prefix = vertex_index
|
|
457
|
+
longest_common_prefix = common_prefix
|
|
458
|
+
return vertex_index_with_longest_common_prefix
|
|
459
|
+
|
|
460
|
+
def get_vertices_hash_codes_to_attributes_map(self) -> Dict[str, Dict[str, Any]]:
|
|
461
|
+
return {vertex.get_hash(): vertex.get_attribute_dict() for vertex in self.vertices}
|
|
462
|
+
|
|
463
|
+
def order_edges_by_hash_codes(self) -> Dict[str, Edge]:
|
|
464
|
+
edges = {}
|
|
465
|
+
for edge in self.edges:
|
|
466
|
+
edge_data = {
|
|
467
|
+
"edge_label": edge.label,
|
|
468
|
+
"from_vertex_hash": self.get_vertex_hash_by_index(vertex_index=edge.origin),
|
|
469
|
+
"to_vertex_hash": self.get_vertex_hash_by_index(vertex_index=edge.dest),
|
|
470
|
+
}
|
|
471
|
+
edge_hash = calculate_hash(edge_data)
|
|
472
|
+
edges[edge_hash] = edge
|
|
473
|
+
return edges
|
|
474
|
+
|
|
475
|
+
def get_vertex_hash_by_index(self, vertex_index: int) -> str:
|
|
476
|
+
return self.vertex_hash_cache.setdefault(vertex_index, self.vertices[vertex_index].get_hash())
|
|
477
|
+
|
|
478
|
+
def update_vertex_attribute(
|
|
479
|
+
self,
|
|
480
|
+
vertex_index: int,
|
|
481
|
+
attribute_key: str,
|
|
482
|
+
attribute_value: Any,
|
|
483
|
+
change_origin_id: int,
|
|
484
|
+
attribute_at_dest: Optional[Union[str, List[str]]],
|
|
485
|
+
) -> None:
|
|
486
|
+
previous_breadcrumbs = []
|
|
487
|
+
attribute_at_dest = self.vertices[change_origin_id].find_attribute(attribute_at_dest)
|
|
488
|
+
if attribute_at_dest:
|
|
489
|
+
previous_breadcrumbs = self.vertices[change_origin_id].changed_attributes.get(attribute_at_dest, [])
|
|
490
|
+
self.vertices[vertex_index].update_attribute(
|
|
491
|
+
attribute_key, attribute_value, change_origin_id, previous_breadcrumbs, attribute_at_dest
|
|
492
|
+
)
|
|
493
|
+
|
|
494
|
+
def update_vertices_configs(self) -> None:
|
|
495
|
+
for vertex in self.vertices:
|
|
496
|
+
changed_attributes = list(vertex.changed_attributes.keys())
|
|
497
|
+
changed_attributes = filter_sub_keys(changed_attributes)
|
|
498
|
+
self.update_vertex_config(vertex, changed_attributes)
|
|
499
|
+
|
|
500
|
+
def update_vertex_config(self, vertex: TerraformBlock, changed_attributes: Union[List[str], Dict[str, Any]], dynamic_blocks: bool = False) -> None:
|
|
501
|
+
if not changed_attributes:
|
|
502
|
+
# skip, if there is no change
|
|
503
|
+
return
|
|
504
|
+
|
|
505
|
+
updated_config = deepcopy(vertex.config)
|
|
506
|
+
if vertex.block_type != BlockType.LOCALS:
|
|
507
|
+
parts = vertex.name.split(".")
|
|
508
|
+
start = 0
|
|
509
|
+
end = 1
|
|
510
|
+
while end <= len(parts):
|
|
511
|
+
cur_key = ".".join(parts[start:end])
|
|
512
|
+
if cur_key in updated_config:
|
|
513
|
+
updated_config = updated_config[cur_key]
|
|
514
|
+
start = end
|
|
515
|
+
end += 1
|
|
516
|
+
for changed_attribute in changed_attributes:
|
|
517
|
+
new_value = vertex.attributes.get(changed_attribute, None)
|
|
518
|
+
if new_value is not None:
|
|
519
|
+
if vertex.block_type == BlockType.LOCALS:
|
|
520
|
+
changed_attribute = changed_attribute.replace(vertex.name + ".", "")
|
|
521
|
+
updated_config = update_dictionary_attribute(updated_config, changed_attribute, new_value, dynamic_blocks)
|
|
522
|
+
|
|
523
|
+
if len(changed_attributes) > 0:
|
|
524
|
+
if vertex.block_type == BlockType.LOCALS:
|
|
525
|
+
updated_config = updated_config.get(vertex.name)
|
|
526
|
+
update_dictionary_attribute(vertex.config, vertex.name, updated_config, dynamic_blocks)
|
|
527
|
+
|
|
528
|
+
def get_resources_types_in_graph(self) -> List[str]:
|
|
529
|
+
return self.module.get_resources_types()
|
|
530
|
+
|
|
531
|
+
def update_vertices_breadcrumbs_and_module_connections(self) -> None:
|
|
532
|
+
"""
|
|
533
|
+
The function processes each vertex's breadcrumbs:
|
|
534
|
+
1. Get more data to each vertex in breadcrumb (name, path, hash and type)
|
|
535
|
+
2. If a breadcrumb is originated in a different module, it will have 'module_connection'=True
|
|
536
|
+
3. If a vertex has a 'source module' we will add a special breadcrumb for it
|
|
537
|
+
"""
|
|
538
|
+
for vertex in self.vertices:
|
|
539
|
+
for attribute_key, breadcrumbs_list in vertex.changed_attributes.items():
|
|
540
|
+
hash_breadcrumbs = []
|
|
541
|
+
for breadcrumb in breadcrumbs_list:
|
|
542
|
+
v = self.vertices[breadcrumb.vertex_id]
|
|
543
|
+
breadcrumb = v.get_export_data()
|
|
544
|
+
breadcrumb["module_connection"] = self._determine_if_module_connection(breadcrumbs_list, v)
|
|
545
|
+
hash_breadcrumbs.append(breadcrumb)
|
|
546
|
+
vertex.breadcrumbs[attribute_key] = hash_breadcrumbs
|
|
547
|
+
if len(vertex.source_module) == 1:
|
|
548
|
+
v = vertex
|
|
549
|
+
source_module_data = []
|
|
550
|
+
while len(v.source_module) == 1:
|
|
551
|
+
idx = list(v.source_module)[0]
|
|
552
|
+
v = self.vertices[idx]
|
|
553
|
+
module_data = v.get_export_data()
|
|
554
|
+
module_data["idx"] = idx
|
|
555
|
+
if hasattr(vertex, "source_module_object"):
|
|
556
|
+
module_data["source_module_object"] = v.source_module_object
|
|
557
|
+
source_module_data.append(module_data)
|
|
558
|
+
source_module_data.reverse()
|
|
559
|
+
vertex.breadcrumbs[CustomAttributes.SOURCE_MODULE] = source_module_data
|
|
560
|
+
|
|
561
|
+
@staticmethod
|
|
562
|
+
def _determine_if_module_connection(breadcrumbs_list: List[int], vertex_in_breadcrumbs: TerraformBlock) -> bool:
|
|
563
|
+
"""
|
|
564
|
+
:param breadcrumbs_list: list of vertex's breadcrumbs
|
|
565
|
+
:param vertex_in_breadcrumbs: one of the vertices in the breadcrumb list
|
|
566
|
+
:return: True if vertex_in_breadcrumbs has in its module_connections at least one of the vertices in breadcrumbs_list
|
|
567
|
+
"""
|
|
568
|
+
if not vertex_in_breadcrumbs.module_connections:
|
|
569
|
+
return False
|
|
570
|
+
for connection_list in vertex_in_breadcrumbs.module_connections.values():
|
|
571
|
+
if any(i in breadcrumbs_list for i in connection_list):
|
|
572
|
+
return True
|
|
573
|
+
return False
|
|
574
|
+
|
|
575
|
+
def get_dirname(self, path: str) -> str:
|
|
576
|
+
dir_name = self.dirname_cache.get(path)
|
|
577
|
+
if not dir_name:
|
|
578
|
+
dir_name = os.path.dirname(path)
|
|
579
|
+
self.dirname_cache[path] = dir_name
|
|
580
|
+
return dir_name
|
|
581
|
+
|
|
582
|
+
def get_abspath(self, path: str) -> str:
|
|
583
|
+
dir_name = self.abspath_cache.get(path)
|
|
584
|
+
if not dir_name:
|
|
585
|
+
dir_name = os.path.abspath(path)
|
|
586
|
+
self.abspath_cache[path] = dir_name
|
|
587
|
+
return dir_name
|
|
588
|
+
|
|
589
|
+
def update_nested_modules_address(self) -> None:
|
|
590
|
+
for vertex in self.vertices:
|
|
591
|
+
if vertex.block_type not in parser_registry.context_parsers:
|
|
592
|
+
continue
|
|
593
|
+
source_module = vertex.breadcrumbs.get(CustomAttributes.SOURCE_MODULE)
|
|
594
|
+
|
|
595
|
+
address_prefix = ''
|
|
596
|
+
if source_module:
|
|
597
|
+
for module in source_module:
|
|
598
|
+
address_prefix += f"{module.get('type')}.{module.get('name')}."
|
|
599
|
+
|
|
600
|
+
context_parser = parser_registry.context_parsers[vertex.block_type]
|
|
601
|
+
entity_context_path = context_parser.get_entity_context_path(vertex.config)
|
|
602
|
+
resource_id = '.'.join(entity_context_path) if entity_context_path else vertex.name
|
|
603
|
+
address = f'{address_prefix}{resource_id}'
|
|
604
|
+
vertex.attributes[CustomAttributes.TF_RESOURCE_ADDRESS] = address
|
|
605
|
+
|
|
606
|
+
vertex_context = vertex.config
|
|
607
|
+
definition_path = context_parser.get_entity_definition_path(vertex.config)
|
|
608
|
+
for path in definition_path:
|
|
609
|
+
vertex_context = vertex_context.get(path, vertex_context)
|
|
610
|
+
vertex_context[CustomAttributes.TF_RESOURCE_ADDRESS] = address
|
|
611
|
+
|
|
612
|
+
def _should_add_edge(self, vertex: TerraformBlock, dest_module_path: str, module_node: TerraformBlock) -> bool:
|
|
613
|
+
if self.use_new_tf_parser:
|
|
614
|
+
return (self.get_dirname(vertex.path) == dest_module_path) and \
|
|
615
|
+
(
|
|
616
|
+
vertex.source_module_object == module_node.source_module_object # The vertex is in the same file
|
|
617
|
+
or self.get_abspath(vertex.source_module_object.path)
|
|
618
|
+
== self.get_abspath(module_node.path) # The vertex is in the correct dependency path)
|
|
619
|
+
)
|
|
620
|
+
else:
|
|
621
|
+
return (self.get_dirname(vertex.path) == dest_module_path) and \
|
|
622
|
+
(
|
|
623
|
+
vertex.module_dependency == module_node.module_dependency # The vertex is in the same file
|
|
624
|
+
or self.get_abspath(vertex.module_dependency)
|
|
625
|
+
== self.get_abspath(module_node.path) # The vertex is in the correct dependency path
|
|
626
|
+
)
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
def to_list(data):
|
|
630
|
+
if isinstance(data, list) and len(data) == 1 and (isinstance(data[0], str) or isinstance(data[0], int)):
|
|
631
|
+
return data
|
|
632
|
+
elif isinstance(data, list):
|
|
633
|
+
return [to_list(x) for x in data]
|
|
634
|
+
elif isinstance(data, dict):
|
|
635
|
+
return {key: to_list(val) for key, val in data.items()}
|
|
636
|
+
else:
|
|
637
|
+
return [data]
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
def update_dictionary_attribute(
|
|
641
|
+
config: Union[List[Any], Dict[str, Any]], key_to_update: str, new_value: Any, dynamic_blocks: bool = False
|
|
642
|
+
) -> Union[List[Any], Dict[str, Any]]:
|
|
643
|
+
key_parts = key_to_update.split(".")
|
|
644
|
+
|
|
645
|
+
if isinstance(config, dict) and isinstance(key_parts, list):
|
|
646
|
+
key = key_parts[0]
|
|
647
|
+
inner_config = config.get(key)
|
|
648
|
+
|
|
649
|
+
if inner_config is not None:
|
|
650
|
+
if len(key_parts) == 1:
|
|
651
|
+
if isinstance(inner_config, list) and not isinstance(new_value, list):
|
|
652
|
+
new_value = [new_value]
|
|
653
|
+
config[key] = to_list(new_value) if dynamic_blocks else new_value
|
|
654
|
+
return config
|
|
655
|
+
else:
|
|
656
|
+
config[key] = update_dictionary_attribute(inner_config, ".".join(key_parts[1:]), new_value, dynamic_blocks=dynamic_blocks)
|
|
657
|
+
else:
|
|
658
|
+
for key in config:
|
|
659
|
+
config[key] = update_dictionary_attribute(config[key], key_to_update, new_value, dynamic_blocks=dynamic_blocks)
|
|
660
|
+
if isinstance(config, list):
|
|
661
|
+
return update_list_attribute(
|
|
662
|
+
config=config,
|
|
663
|
+
key_parts=key_parts,
|
|
664
|
+
key_to_update=key_to_update,
|
|
665
|
+
new_value=new_value,
|
|
666
|
+
dynamic_blocks=dynamic_blocks
|
|
667
|
+
)
|
|
668
|
+
return config
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
def update_list_attribute(
|
|
672
|
+
config: list[Any], key_parts: list[str], key_to_update: str, new_value: Any, dynamic_blocks: bool = False
|
|
673
|
+
) -> list[Any] | dict[str, Any]:
|
|
674
|
+
"""Updates a list attribute in the given config"""
|
|
675
|
+
|
|
676
|
+
if not config:
|
|
677
|
+
# happens when we can't correctly evaluate something, because of strange defaults or 'for_each' blocks
|
|
678
|
+
return config
|
|
679
|
+
|
|
680
|
+
if len(key_parts) == 1:
|
|
681
|
+
idx = force_int(key_parts[0])
|
|
682
|
+
inner_config = config[0]
|
|
683
|
+
|
|
684
|
+
if idx is not None and isinstance(inner_config, list):
|
|
685
|
+
if not inner_config:
|
|
686
|
+
# happens when config = [[]]
|
|
687
|
+
return config
|
|
688
|
+
|
|
689
|
+
inner_config[idx] = new_value
|
|
690
|
+
return config
|
|
691
|
+
entry_to_update = int(key_parts[0]) if key_parts[0].isnumeric() else -1
|
|
692
|
+
for i, config_value in enumerate(config):
|
|
693
|
+
if entry_to_update == -1:
|
|
694
|
+
config[i] = update_dictionary_attribute(config=config_value, key_to_update=key_to_update, new_value=new_value, dynamic_blocks=dynamic_blocks)
|
|
695
|
+
elif entry_to_update == i:
|
|
696
|
+
config[i] = update_dictionary_attribute(config=config_value, key_to_update=".".join(key_parts[1:]), new_value=new_value, dynamic_blocks=dynamic_blocks)
|
|
697
|
+
|
|
698
|
+
return config
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
def get_path_with_nested_modules(block: TerraformBlock) -> str:
|
|
702
|
+
if not block.module_dependency:
|
|
703
|
+
return block.path
|
|
704
|
+
if not strtobool(os.getenv('SENTINELONE_CNS_ENABLE_NESTED_MODULES', 'True')):
|
|
705
|
+
return unify_dependency_path([block.module_dependency, block.path])
|
|
706
|
+
return get_tf_definition_key_from_module_dependency(block.path, block.module_dependency, block.module_dependency_num)
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
def get_vertex_as_tf_module(block: TerraformBlock) -> TFModule:
|
|
710
|
+
return TFModule(block.path, block.name, block.source_module_object)
|