regscale-cli 6.16.0.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.

Potentially problematic release.


This version of regscale-cli might be problematic. Click here for more details.

Files changed (481) hide show
  1. regscale/__init__.py +1 -0
  2. regscale/airflow/__init__.py +9 -0
  3. regscale/airflow/azure/__init__.py +9 -0
  4. regscale/airflow/azure/cli.py +89 -0
  5. regscale/airflow/azure/upload_dags.py +116 -0
  6. regscale/airflow/click_dags.py +127 -0
  7. regscale/airflow/click_mixins.py +82 -0
  8. regscale/airflow/config.py +25 -0
  9. regscale/airflow/factories/__init__.py +0 -0
  10. regscale/airflow/factories/connections.py +58 -0
  11. regscale/airflow/factories/workflows.py +78 -0
  12. regscale/airflow/hierarchy.py +88 -0
  13. regscale/airflow/operators/__init__.py +0 -0
  14. regscale/airflow/operators/click.py +36 -0
  15. regscale/airflow/sensors/__init__.py +0 -0
  16. regscale/airflow/sensors/sql.py +107 -0
  17. regscale/airflow/sessions/__init__.py +0 -0
  18. regscale/airflow/sessions/sql/__init__.py +3 -0
  19. regscale/airflow/sessions/sql/queries.py +64 -0
  20. regscale/airflow/sessions/sql/sql_server_queries.py +248 -0
  21. regscale/airflow/tasks/__init__.py +0 -0
  22. regscale/airflow/tasks/branches.py +22 -0
  23. regscale/airflow/tasks/cli.py +116 -0
  24. regscale/airflow/tasks/click.py +73 -0
  25. regscale/airflow/tasks/debugging.py +9 -0
  26. regscale/airflow/tasks/groups.py +116 -0
  27. regscale/airflow/tasks/init.py +60 -0
  28. regscale/airflow/tasks/states.py +47 -0
  29. regscale/airflow/tasks/workflows.py +36 -0
  30. regscale/ansible/__init__.py +9 -0
  31. regscale/core/__init__.py +0 -0
  32. regscale/core/app/__init__.py +3 -0
  33. regscale/core/app/api.py +571 -0
  34. regscale/core/app/application.py +665 -0
  35. regscale/core/app/internal/__init__.py +136 -0
  36. regscale/core/app/internal/admin_actions.py +230 -0
  37. regscale/core/app/internal/assessments_editor.py +873 -0
  38. regscale/core/app/internal/catalog.py +316 -0
  39. regscale/core/app/internal/comparison.py +459 -0
  40. regscale/core/app/internal/control_editor.py +571 -0
  41. regscale/core/app/internal/encrypt.py +79 -0
  42. regscale/core/app/internal/evidence.py +1240 -0
  43. regscale/core/app/internal/file_uploads.py +151 -0
  44. regscale/core/app/internal/healthcheck.py +66 -0
  45. regscale/core/app/internal/login.py +305 -0
  46. regscale/core/app/internal/migrations.py +240 -0
  47. regscale/core/app/internal/model_editor.py +1701 -0
  48. regscale/core/app/internal/poam_editor.py +632 -0
  49. regscale/core/app/internal/workflow.py +105 -0
  50. regscale/core/app/logz.py +74 -0
  51. regscale/core/app/utils/XMLIR.py +258 -0
  52. regscale/core/app/utils/__init__.py +0 -0
  53. regscale/core/app/utils/api_handler.py +358 -0
  54. regscale/core/app/utils/app_utils.py +1110 -0
  55. regscale/core/app/utils/catalog_utils/__init__.py +0 -0
  56. regscale/core/app/utils/catalog_utils/common.py +91 -0
  57. regscale/core/app/utils/catalog_utils/compare_catalog.py +193 -0
  58. regscale/core/app/utils/catalog_utils/diagnostic_catalog.py +97 -0
  59. regscale/core/app/utils/catalog_utils/download_catalog.py +103 -0
  60. regscale/core/app/utils/catalog_utils/update_catalog.py +718 -0
  61. regscale/core/app/utils/catalog_utils/update_catalog_v2.py +1378 -0
  62. regscale/core/app/utils/catalog_utils/update_catalog_v3.py +1272 -0
  63. regscale/core/app/utils/catalog_utils/update_plans.py +334 -0
  64. regscale/core/app/utils/file_utils.py +238 -0
  65. regscale/core/app/utils/parser_utils.py +81 -0
  66. regscale/core/app/utils/pickle_file_handler.py +57 -0
  67. regscale/core/app/utils/regscale_utils.py +319 -0
  68. regscale/core/app/utils/report_utils.py +119 -0
  69. regscale/core/app/utils/variables.py +226 -0
  70. regscale/core/decorators.py +31 -0
  71. regscale/core/lazy_group.py +65 -0
  72. regscale/core/login.py +63 -0
  73. regscale/core/server/__init__.py +0 -0
  74. regscale/core/server/flask_api.py +473 -0
  75. regscale/core/server/helpers.py +373 -0
  76. regscale/core/server/rest.py +64 -0
  77. regscale/core/server/static/css/bootstrap.css +6030 -0
  78. regscale/core/server/static/css/bootstrap.min.css +6 -0
  79. regscale/core/server/static/css/main.css +176 -0
  80. regscale/core/server/static/images/regscale-cli.svg +49 -0
  81. regscale/core/server/static/images/regscale.svg +38 -0
  82. regscale/core/server/templates/base.html +74 -0
  83. regscale/core/server/templates/index.html +43 -0
  84. regscale/core/server/templates/login.html +28 -0
  85. regscale/core/server/templates/make_base64.html +22 -0
  86. regscale/core/server/templates/upload_STIG.html +109 -0
  87. regscale/core/server/templates/upload_STIG_result.html +26 -0
  88. regscale/core/server/templates/upload_ssp.html +144 -0
  89. regscale/core/server/templates/upload_ssp_result.html +128 -0
  90. regscale/core/static/__init__.py +0 -0
  91. regscale/core/static/regex.py +14 -0
  92. regscale/core/utils/__init__.py +117 -0
  93. regscale/core/utils/click_utils.py +13 -0
  94. regscale/core/utils/date.py +238 -0
  95. regscale/core/utils/graphql.py +254 -0
  96. regscale/core/utils/urls.py +23 -0
  97. regscale/dev/__init__.py +6 -0
  98. regscale/dev/analysis.py +454 -0
  99. regscale/dev/cli.py +235 -0
  100. regscale/dev/code_gen.py +492 -0
  101. regscale/dev/dirs.py +69 -0
  102. regscale/dev/docs.py +384 -0
  103. regscale/dev/monitoring.py +26 -0
  104. regscale/dev/profiling.py +216 -0
  105. regscale/exceptions/__init__.py +4 -0
  106. regscale/exceptions/license_exception.py +7 -0
  107. regscale/exceptions/validation_exception.py +9 -0
  108. regscale/integrations/__init__.py +1 -0
  109. regscale/integrations/commercial/__init__.py +486 -0
  110. regscale/integrations/commercial/ad.py +433 -0
  111. regscale/integrations/commercial/amazon/__init__.py +0 -0
  112. regscale/integrations/commercial/amazon/common.py +106 -0
  113. regscale/integrations/commercial/aqua/__init__.py +0 -0
  114. regscale/integrations/commercial/aqua/aqua.py +91 -0
  115. regscale/integrations/commercial/aws/__init__.py +6 -0
  116. regscale/integrations/commercial/aws/cli.py +322 -0
  117. regscale/integrations/commercial/aws/inventory/__init__.py +110 -0
  118. regscale/integrations/commercial/aws/inventory/base.py +64 -0
  119. regscale/integrations/commercial/aws/inventory/resources/__init__.py +19 -0
  120. regscale/integrations/commercial/aws/inventory/resources/compute.py +234 -0
  121. regscale/integrations/commercial/aws/inventory/resources/containers.py +113 -0
  122. regscale/integrations/commercial/aws/inventory/resources/database.py +101 -0
  123. regscale/integrations/commercial/aws/inventory/resources/integration.py +237 -0
  124. regscale/integrations/commercial/aws/inventory/resources/networking.py +253 -0
  125. regscale/integrations/commercial/aws/inventory/resources/security.py +240 -0
  126. regscale/integrations/commercial/aws/inventory/resources/storage.py +91 -0
  127. regscale/integrations/commercial/aws/scanner.py +823 -0
  128. regscale/integrations/commercial/azure/__init__.py +0 -0
  129. regscale/integrations/commercial/azure/common.py +32 -0
  130. regscale/integrations/commercial/azure/intune.py +488 -0
  131. regscale/integrations/commercial/azure/scanner.py +49 -0
  132. regscale/integrations/commercial/burp.py +78 -0
  133. regscale/integrations/commercial/cpe.py +144 -0
  134. regscale/integrations/commercial/crowdstrike.py +1117 -0
  135. regscale/integrations/commercial/defender.py +1511 -0
  136. regscale/integrations/commercial/dependabot.py +210 -0
  137. regscale/integrations/commercial/durosuite/__init__.py +0 -0
  138. regscale/integrations/commercial/durosuite/api.py +1546 -0
  139. regscale/integrations/commercial/durosuite/process_devices.py +101 -0
  140. regscale/integrations/commercial/durosuite/scanner.py +637 -0
  141. regscale/integrations/commercial/durosuite/variables.py +21 -0
  142. regscale/integrations/commercial/ecr.py +90 -0
  143. regscale/integrations/commercial/gcp/__init__.py +237 -0
  144. regscale/integrations/commercial/gcp/auth.py +96 -0
  145. regscale/integrations/commercial/gcp/control_tests.py +238 -0
  146. regscale/integrations/commercial/gcp/variables.py +18 -0
  147. regscale/integrations/commercial/gitlab.py +332 -0
  148. regscale/integrations/commercial/grype.py +165 -0
  149. regscale/integrations/commercial/ibm.py +90 -0
  150. regscale/integrations/commercial/import_all/__init__.py +0 -0
  151. regscale/integrations/commercial/import_all/import_all_cmd.py +467 -0
  152. regscale/integrations/commercial/import_all/scan_file_fingerprints.json +27 -0
  153. regscale/integrations/commercial/jira.py +1046 -0
  154. regscale/integrations/commercial/mappings/__init__.py +0 -0
  155. regscale/integrations/commercial/mappings/csf_controls.json +713 -0
  156. regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json +1516 -0
  157. regscale/integrations/commercial/nessus/__init__.py +0 -0
  158. regscale/integrations/commercial/nessus/nessus_utils.py +429 -0
  159. regscale/integrations/commercial/nessus/scanner.py +416 -0
  160. regscale/integrations/commercial/nexpose.py +90 -0
  161. regscale/integrations/commercial/okta.py +798 -0
  162. regscale/integrations/commercial/opentext/__init__.py +0 -0
  163. regscale/integrations/commercial/opentext/click.py +99 -0
  164. regscale/integrations/commercial/opentext/scanner.py +143 -0
  165. regscale/integrations/commercial/prisma.py +91 -0
  166. regscale/integrations/commercial/qualys.py +1462 -0
  167. regscale/integrations/commercial/salesforce.py +980 -0
  168. regscale/integrations/commercial/sap/__init__.py +0 -0
  169. regscale/integrations/commercial/sap/click.py +31 -0
  170. regscale/integrations/commercial/sap/sysdig/__init__.py +0 -0
  171. regscale/integrations/commercial/sap/sysdig/click.py +57 -0
  172. regscale/integrations/commercial/sap/sysdig/sysdig_scanner.py +190 -0
  173. regscale/integrations/commercial/sap/tenable/__init__.py +0 -0
  174. regscale/integrations/commercial/sap/tenable/click.py +49 -0
  175. regscale/integrations/commercial/sap/tenable/scanner.py +196 -0
  176. regscale/integrations/commercial/servicenow.py +1756 -0
  177. regscale/integrations/commercial/sicura/__init__.py +0 -0
  178. regscale/integrations/commercial/sicura/api.py +855 -0
  179. regscale/integrations/commercial/sicura/commands.py +73 -0
  180. regscale/integrations/commercial/sicura/scanner.py +481 -0
  181. regscale/integrations/commercial/sicura/variables.py +16 -0
  182. regscale/integrations/commercial/snyk.py +90 -0
  183. regscale/integrations/commercial/sonarcloud.py +260 -0
  184. regscale/integrations/commercial/sqlserver.py +369 -0
  185. regscale/integrations/commercial/stig_mapper_integration/__init__.py +0 -0
  186. regscale/integrations/commercial/stig_mapper_integration/click_commands.py +38 -0
  187. regscale/integrations/commercial/stig_mapper_integration/mapping_engine.py +353 -0
  188. regscale/integrations/commercial/stigv2/__init__.py +0 -0
  189. regscale/integrations/commercial/stigv2/ckl_parser.py +349 -0
  190. regscale/integrations/commercial/stigv2/click_commands.py +95 -0
  191. regscale/integrations/commercial/stigv2/stig_integration.py +202 -0
  192. regscale/integrations/commercial/synqly/__init__.py +0 -0
  193. regscale/integrations/commercial/synqly/assets.py +46 -0
  194. regscale/integrations/commercial/synqly/ticketing.py +132 -0
  195. regscale/integrations/commercial/synqly/vulnerabilities.py +223 -0
  196. regscale/integrations/commercial/synqly_jira.py +840 -0
  197. regscale/integrations/commercial/tenablev2/__init__.py +0 -0
  198. regscale/integrations/commercial/tenablev2/authenticate.py +31 -0
  199. regscale/integrations/commercial/tenablev2/click.py +1584 -0
  200. regscale/integrations/commercial/tenablev2/scanner.py +504 -0
  201. regscale/integrations/commercial/tenablev2/stig_parsers.py +140 -0
  202. regscale/integrations/commercial/tenablev2/utils.py +78 -0
  203. regscale/integrations/commercial/tenablev2/variables.py +17 -0
  204. regscale/integrations/commercial/trivy.py +162 -0
  205. regscale/integrations/commercial/veracode.py +96 -0
  206. regscale/integrations/commercial/wizv2/WizDataMixin.py +97 -0
  207. regscale/integrations/commercial/wizv2/__init__.py +0 -0
  208. regscale/integrations/commercial/wizv2/click.py +429 -0
  209. regscale/integrations/commercial/wizv2/constants.py +1001 -0
  210. regscale/integrations/commercial/wizv2/issue.py +361 -0
  211. regscale/integrations/commercial/wizv2/models.py +112 -0
  212. regscale/integrations/commercial/wizv2/parsers.py +339 -0
  213. regscale/integrations/commercial/wizv2/sbom.py +115 -0
  214. regscale/integrations/commercial/wizv2/scanner.py +416 -0
  215. regscale/integrations/commercial/wizv2/utils.py +796 -0
  216. regscale/integrations/commercial/wizv2/variables.py +39 -0
  217. regscale/integrations/commercial/wizv2/wiz_auth.py +159 -0
  218. regscale/integrations/commercial/xray.py +91 -0
  219. regscale/integrations/integration/__init__.py +2 -0
  220. regscale/integrations/integration/integration.py +26 -0
  221. regscale/integrations/integration/inventory.py +17 -0
  222. regscale/integrations/integration/issue.py +100 -0
  223. regscale/integrations/integration_override.py +149 -0
  224. regscale/integrations/public/__init__.py +103 -0
  225. regscale/integrations/public/cisa.py +641 -0
  226. regscale/integrations/public/criticality_updater.py +70 -0
  227. regscale/integrations/public/emass.py +411 -0
  228. regscale/integrations/public/emass_slcm_import.py +697 -0
  229. regscale/integrations/public/fedramp/__init__.py +0 -0
  230. regscale/integrations/public/fedramp/appendix_parser.py +548 -0
  231. regscale/integrations/public/fedramp/click.py +479 -0
  232. regscale/integrations/public/fedramp/components.py +714 -0
  233. regscale/integrations/public/fedramp/docx_parser.py +259 -0
  234. regscale/integrations/public/fedramp/fedramp_cis_crm.py +1124 -0
  235. regscale/integrations/public/fedramp/fedramp_common.py +3181 -0
  236. regscale/integrations/public/fedramp/fedramp_docx.py +388 -0
  237. regscale/integrations/public/fedramp/fedramp_five.py +2343 -0
  238. regscale/integrations/public/fedramp/fedramp_traversal.py +138 -0
  239. regscale/integrations/public/fedramp/import_fedramp_r4_ssp.py +279 -0
  240. regscale/integrations/public/fedramp/import_workbook.py +495 -0
  241. regscale/integrations/public/fedramp/inventory_items.py +244 -0
  242. regscale/integrations/public/fedramp/mappings/__init__.py +0 -0
  243. regscale/integrations/public/fedramp/mappings/fedramp_r4_parts.json +7388 -0
  244. regscale/integrations/public/fedramp/mappings/fedramp_r5_params.json +8636 -0
  245. regscale/integrations/public/fedramp/mappings/fedramp_r5_parts.json +9605 -0
  246. regscale/integrations/public/fedramp/mappings/system_roles.py +34 -0
  247. regscale/integrations/public/fedramp/mappings/user.py +175 -0
  248. regscale/integrations/public/fedramp/mappings/values.py +141 -0
  249. regscale/integrations/public/fedramp/markdown_parser.py +150 -0
  250. regscale/integrations/public/fedramp/metadata.py +689 -0
  251. regscale/integrations/public/fedramp/models/__init__.py +59 -0
  252. regscale/integrations/public/fedramp/models/leveraged_auth_new.py +168 -0
  253. regscale/integrations/public/fedramp/models/poam_importer.py +522 -0
  254. regscale/integrations/public/fedramp/parts_mapper.py +107 -0
  255. regscale/integrations/public/fedramp/poam/__init__.py +0 -0
  256. regscale/integrations/public/fedramp/poam/scanner.py +851 -0
  257. regscale/integrations/public/fedramp/properties.py +201 -0
  258. regscale/integrations/public/fedramp/reporting.py +84 -0
  259. regscale/integrations/public/fedramp/resources.py +496 -0
  260. regscale/integrations/public/fedramp/rosetta.py +110 -0
  261. regscale/integrations/public/fedramp/ssp_logger.py +87 -0
  262. regscale/integrations/public/fedramp/system_characteristics.py +922 -0
  263. regscale/integrations/public/fedramp/system_control_implementations.py +582 -0
  264. regscale/integrations/public/fedramp/system_implementation.py +190 -0
  265. regscale/integrations/public/fedramp/xml_utils.py +87 -0
  266. regscale/integrations/public/nist_catalog.py +275 -0
  267. regscale/integrations/public/oscal.py +1946 -0
  268. regscale/integrations/public/otx.py +169 -0
  269. regscale/integrations/scanner_integration.py +2692 -0
  270. regscale/integrations/variables.py +25 -0
  271. regscale/models/__init__.py +7 -0
  272. regscale/models/app_models/__init__.py +5 -0
  273. regscale/models/app_models/catalog_compare.py +213 -0
  274. regscale/models/app_models/click.py +252 -0
  275. regscale/models/app_models/datetime_encoder.py +21 -0
  276. regscale/models/app_models/import_validater.py +321 -0
  277. regscale/models/app_models/mapping.py +260 -0
  278. regscale/models/app_models/pipeline.py +37 -0
  279. regscale/models/click_models.py +413 -0
  280. regscale/models/config.py +154 -0
  281. regscale/models/email_style.css +67 -0
  282. regscale/models/hierarchy.py +8 -0
  283. regscale/models/inspect_models.py +79 -0
  284. regscale/models/integration_models/__init__.py +0 -0
  285. regscale/models/integration_models/amazon_models/__init__.py +0 -0
  286. regscale/models/integration_models/amazon_models/inspector.py +262 -0
  287. regscale/models/integration_models/amazon_models/inspector_scan.py +206 -0
  288. regscale/models/integration_models/aqua.py +247 -0
  289. regscale/models/integration_models/azure_alerts.py +255 -0
  290. regscale/models/integration_models/base64.py +23 -0
  291. regscale/models/integration_models/burp.py +433 -0
  292. regscale/models/integration_models/burp_models.py +128 -0
  293. regscale/models/integration_models/cisa_kev_data.json +19333 -0
  294. regscale/models/integration_models/defender_data.py +93 -0
  295. regscale/models/integration_models/defenderimport.py +143 -0
  296. regscale/models/integration_models/drf.py +443 -0
  297. regscale/models/integration_models/ecr_models/__init__.py +0 -0
  298. regscale/models/integration_models/ecr_models/data.py +69 -0
  299. regscale/models/integration_models/ecr_models/ecr.py +239 -0
  300. regscale/models/integration_models/flat_file_importer.py +1079 -0
  301. regscale/models/integration_models/grype_import.py +247 -0
  302. regscale/models/integration_models/ibm.py +126 -0
  303. regscale/models/integration_models/implementation_results.py +85 -0
  304. regscale/models/integration_models/nexpose.py +140 -0
  305. regscale/models/integration_models/prisma.py +202 -0
  306. regscale/models/integration_models/qualys.py +720 -0
  307. regscale/models/integration_models/qualys_scanner.py +160 -0
  308. regscale/models/integration_models/sbom/__init__.py +0 -0
  309. regscale/models/integration_models/sbom/cyclone_dx.py +139 -0
  310. regscale/models/integration_models/send_reminders.py +620 -0
  311. regscale/models/integration_models/snyk.py +155 -0
  312. regscale/models/integration_models/synqly_models/__init__.py +0 -0
  313. regscale/models/integration_models/synqly_models/capabilities.json +1 -0
  314. regscale/models/integration_models/synqly_models/connector_types.py +22 -0
  315. regscale/models/integration_models/synqly_models/connectors/__init__.py +7 -0
  316. regscale/models/integration_models/synqly_models/connectors/assets.py +97 -0
  317. regscale/models/integration_models/synqly_models/connectors/ticketing.py +583 -0
  318. regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +169 -0
  319. regscale/models/integration_models/synqly_models/ocsf_mapper.py +331 -0
  320. regscale/models/integration_models/synqly_models/param.py +72 -0
  321. regscale/models/integration_models/synqly_models/synqly_model.py +733 -0
  322. regscale/models/integration_models/synqly_models/tenants.py +39 -0
  323. regscale/models/integration_models/tenable_models/__init__.py +0 -0
  324. regscale/models/integration_models/tenable_models/integration.py +187 -0
  325. regscale/models/integration_models/tenable_models/models.py +513 -0
  326. regscale/models/integration_models/trivy_import.py +231 -0
  327. regscale/models/integration_models/veracode.py +217 -0
  328. regscale/models/integration_models/xray.py +135 -0
  329. regscale/models/locking.py +100 -0
  330. regscale/models/platform.py +110 -0
  331. regscale/models/regscale_models/__init__.py +67 -0
  332. regscale/models/regscale_models/assessment.py +570 -0
  333. regscale/models/regscale_models/assessment_plan.py +52 -0
  334. regscale/models/regscale_models/asset.py +567 -0
  335. regscale/models/regscale_models/asset_mapping.py +190 -0
  336. regscale/models/regscale_models/case.py +42 -0
  337. regscale/models/regscale_models/catalog.py +261 -0
  338. regscale/models/regscale_models/cci.py +46 -0
  339. regscale/models/regscale_models/change.py +167 -0
  340. regscale/models/regscale_models/checklist.py +372 -0
  341. regscale/models/regscale_models/comment.py +49 -0
  342. regscale/models/regscale_models/compliance_settings.py +112 -0
  343. regscale/models/regscale_models/component.py +412 -0
  344. regscale/models/regscale_models/component_mapping.py +65 -0
  345. regscale/models/regscale_models/control.py +38 -0
  346. regscale/models/regscale_models/control_implementation.py +1128 -0
  347. regscale/models/regscale_models/control_objective.py +261 -0
  348. regscale/models/regscale_models/control_parameter.py +100 -0
  349. regscale/models/regscale_models/control_test.py +34 -0
  350. regscale/models/regscale_models/control_test_plan.py +75 -0
  351. regscale/models/regscale_models/control_test_result.py +52 -0
  352. regscale/models/regscale_models/custom_field.py +245 -0
  353. regscale/models/regscale_models/data.py +109 -0
  354. regscale/models/regscale_models/data_center.py +40 -0
  355. regscale/models/regscale_models/deviation.py +203 -0
  356. regscale/models/regscale_models/email.py +97 -0
  357. regscale/models/regscale_models/evidence.py +47 -0
  358. regscale/models/regscale_models/evidence_mapping.py +40 -0
  359. regscale/models/regscale_models/facility.py +59 -0
  360. regscale/models/regscale_models/file.py +382 -0
  361. regscale/models/regscale_models/filetag.py +37 -0
  362. regscale/models/regscale_models/form_field_value.py +94 -0
  363. regscale/models/regscale_models/group.py +169 -0
  364. regscale/models/regscale_models/implementation_objective.py +335 -0
  365. regscale/models/regscale_models/implementation_option.py +275 -0
  366. regscale/models/regscale_models/implementation_role.py +33 -0
  367. regscale/models/regscale_models/incident.py +177 -0
  368. regscale/models/regscale_models/interconnection.py +43 -0
  369. regscale/models/regscale_models/issue.py +1176 -0
  370. regscale/models/regscale_models/leveraged_authorization.py +125 -0
  371. regscale/models/regscale_models/line_of_inquiry.py +52 -0
  372. regscale/models/regscale_models/link.py +205 -0
  373. regscale/models/regscale_models/meta_data.py +64 -0
  374. regscale/models/regscale_models/mixins/__init__.py +0 -0
  375. regscale/models/regscale_models/mixins/parent_cache.py +124 -0
  376. regscale/models/regscale_models/module.py +224 -0
  377. regscale/models/regscale_models/modules.py +191 -0
  378. regscale/models/regscale_models/objective.py +14 -0
  379. regscale/models/regscale_models/parameter.py +87 -0
  380. regscale/models/regscale_models/ports_protocol.py +81 -0
  381. regscale/models/regscale_models/privacy.py +89 -0
  382. regscale/models/regscale_models/profile.py +50 -0
  383. regscale/models/regscale_models/profile_link.py +68 -0
  384. regscale/models/regscale_models/profile_mapping.py +124 -0
  385. regscale/models/regscale_models/project.py +63 -0
  386. regscale/models/regscale_models/property.py +278 -0
  387. regscale/models/regscale_models/question.py +85 -0
  388. regscale/models/regscale_models/questionnaire.py +87 -0
  389. regscale/models/regscale_models/questionnaire_instance.py +177 -0
  390. regscale/models/regscale_models/rbac.py +132 -0
  391. regscale/models/regscale_models/reference.py +86 -0
  392. regscale/models/regscale_models/regscale_model.py +1643 -0
  393. regscale/models/regscale_models/requirement.py +29 -0
  394. regscale/models/regscale_models/risk.py +274 -0
  395. regscale/models/regscale_models/sbom.py +54 -0
  396. regscale/models/regscale_models/scan_history.py +436 -0
  397. regscale/models/regscale_models/search.py +53 -0
  398. regscale/models/regscale_models/security_control.py +132 -0
  399. regscale/models/regscale_models/security_plan.py +204 -0
  400. regscale/models/regscale_models/software_inventory.py +159 -0
  401. regscale/models/regscale_models/stake_holder.py +64 -0
  402. regscale/models/regscale_models/stig.py +647 -0
  403. regscale/models/regscale_models/supply_chain.py +152 -0
  404. regscale/models/regscale_models/system_role.py +188 -0
  405. regscale/models/regscale_models/system_role_external_assignment.py +40 -0
  406. regscale/models/regscale_models/tag.py +37 -0
  407. regscale/models/regscale_models/tag_mapping.py +19 -0
  408. regscale/models/regscale_models/task.py +133 -0
  409. regscale/models/regscale_models/threat.py +196 -0
  410. regscale/models/regscale_models/user.py +175 -0
  411. regscale/models/regscale_models/user_group.py +55 -0
  412. regscale/models/regscale_models/vulnerability.py +242 -0
  413. regscale/models/regscale_models/vulnerability_mapping.py +162 -0
  414. regscale/models/regscale_models/workflow.py +55 -0
  415. regscale/models/regscale_models/workflow_action.py +34 -0
  416. regscale/models/regscale_models/workflow_instance.py +269 -0
  417. regscale/models/regscale_models/workflow_instance_step.py +114 -0
  418. regscale/models/regscale_models/workflow_template.py +58 -0
  419. regscale/models/regscale_models/workflow_template_step.py +45 -0
  420. regscale/regscale.py +815 -0
  421. regscale/utils/__init__.py +7 -0
  422. regscale/utils/b64conversion.py +14 -0
  423. regscale/utils/click_utils.py +118 -0
  424. regscale/utils/decorators.py +48 -0
  425. regscale/utils/dict_utils.py +59 -0
  426. regscale/utils/files.py +79 -0
  427. regscale/utils/fxns.py +30 -0
  428. regscale/utils/graphql_client.py +113 -0
  429. regscale/utils/lists.py +16 -0
  430. regscale/utils/numbers.py +12 -0
  431. regscale/utils/shell.py +148 -0
  432. regscale/utils/string.py +121 -0
  433. regscale/utils/synqly_utils.py +165 -0
  434. regscale/utils/threading/__init__.py +8 -0
  435. regscale/utils/threading/threadhandler.py +131 -0
  436. regscale/utils/threading/threadsafe_counter.py +47 -0
  437. regscale/utils/threading/threadsafe_dict.py +242 -0
  438. regscale/utils/threading/threadsafe_list.py +83 -0
  439. regscale/utils/version.py +104 -0
  440. regscale/validation/__init__.py +0 -0
  441. regscale/validation/address.py +37 -0
  442. regscale/validation/record.py +48 -0
  443. regscale/visualization/__init__.py +5 -0
  444. regscale/visualization/click.py +34 -0
  445. regscale_cli-6.16.0.0.dist-info/LICENSE +21 -0
  446. regscale_cli-6.16.0.0.dist-info/METADATA +659 -0
  447. regscale_cli-6.16.0.0.dist-info/RECORD +481 -0
  448. regscale_cli-6.16.0.0.dist-info/WHEEL +5 -0
  449. regscale_cli-6.16.0.0.dist-info/entry_points.txt +6 -0
  450. regscale_cli-6.16.0.0.dist-info/top_level.txt +2 -0
  451. tests/fixtures/__init__.py +2 -0
  452. tests/fixtures/api.py +87 -0
  453. tests/fixtures/models.py +91 -0
  454. tests/fixtures/test_fixture.py +144 -0
  455. tests/mocks/__init__.py +0 -0
  456. tests/mocks/objects.py +3 -0
  457. tests/mocks/response.py +32 -0
  458. tests/mocks/xml.py +13 -0
  459. tests/regscale/__init__.py +0 -0
  460. tests/regscale/core/__init__.py +0 -0
  461. tests/regscale/core/test_api.py +232 -0
  462. tests/regscale/core/test_app.py +406 -0
  463. tests/regscale/core/test_login.py +37 -0
  464. tests/regscale/core/test_logz.py +66 -0
  465. tests/regscale/core/test_sbom_generator.py +87 -0
  466. tests/regscale/core/test_validation_utils.py +163 -0
  467. tests/regscale/core/test_version.py +78 -0
  468. tests/regscale/models/__init__.py +0 -0
  469. tests/regscale/models/test_asset.py +71 -0
  470. tests/regscale/models/test_config.py +26 -0
  471. tests/regscale/models/test_control_implementation.py +27 -0
  472. tests/regscale/models/test_import.py +97 -0
  473. tests/regscale/models/test_issue.py +36 -0
  474. tests/regscale/models/test_mapping.py +52 -0
  475. tests/regscale/models/test_platform.py +31 -0
  476. tests/regscale/models/test_regscale_model.py +346 -0
  477. tests/regscale/models/test_report.py +32 -0
  478. tests/regscale/models/test_tenable_integrations.py +118 -0
  479. tests/regscale/models/test_user_model.py +121 -0
  480. tests/regscale/test_about.py +19 -0
  481. tests/regscale/test_authorization.py +65 -0
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """ECR RegScale integration"""
4
+ import os
5
+ from datetime import datetime
6
+ from typing import Optional
7
+
8
+ import click
9
+
10
+ from regscale.models.integration_models.ecr_models.ecr import ECR
11
+ from regscale.models.integration_models.flat_file_importer import FlatFileImporter
12
+
13
+
14
+ @click.group()
15
+ def ecr():
16
+ """Performs actions on ECR Scanner artifacts."""
17
+
18
+
19
+ @ecr.command(name="import_ecr")
20
+ @FlatFileImporter.common_scanner_options(
21
+ message="File path to the folder containing ECR files to process to RegScale.",
22
+ prompt="File path for ECR files",
23
+ import_name="ecr",
24
+ )
25
+ def import_ecr(
26
+ folder_path: os.PathLike[str],
27
+ regscale_ssp_id: click.INT,
28
+ scan_date: datetime,
29
+ mappings_path: os.PathLike[str],
30
+ disable_mapping: click.BOOL,
31
+ s3_bucket: str,
32
+ s3_prefix: str,
33
+ aws_profile: str,
34
+ upload_file: bool,
35
+ ):
36
+ """
37
+ Import ECR scans, vulnerabilities and assets to RegScale from ECR JSON files
38
+ """
39
+ import_ecr_scans(
40
+ folder_path=folder_path,
41
+ regscale_ssp_id=regscale_ssp_id,
42
+ scan_date=scan_date,
43
+ mappings_path=mappings_path,
44
+ disable_mapping=disable_mapping,
45
+ s3_bucket=s3_bucket,
46
+ s3_prefix=s3_prefix,
47
+ aws_profile=aws_profile,
48
+ upload_file=upload_file,
49
+ )
50
+
51
+
52
+ def import_ecr_scans(
53
+ folder_path: os.PathLike[str],
54
+ regscale_ssp_id: click.INT,
55
+ scan_date: datetime,
56
+ mappings_path: os.PathLike[str],
57
+ disable_mapping: click.BOOL,
58
+ s3_bucket: str,
59
+ s3_prefix: str,
60
+ aws_profile: str,
61
+ upload_file: Optional[bool] = True,
62
+ ) -> None:
63
+ """
64
+ Function to import ECR scans to RegScale as assets and vulnerabilities
65
+
66
+ :param os.PathLike[str] folder_path: Path to the folder containing ECR files
67
+ :param int regscale_ssp_id: RegScale System Security Plan ID
68
+ :param datetime scan_date: Date of the scan
69
+ :param click.Path mappings_path: Path to the header mapping file
70
+ :param bool disable_mapping: Disable header mapping
71
+ :param str s3_bucket: S3 bucket name
72
+ :param str s3_prefix: S3 prefix
73
+ :param str aws_profile: AWS profile
74
+ :param bool upload_file: Whether to upload the file to RegScale after processing, defaults to True
75
+ :rtype: None
76
+ """
77
+ FlatFileImporter.import_files(
78
+ import_type=ECR,
79
+ import_name="ECR",
80
+ file_types=[".csv", ".json"],
81
+ folder_path=folder_path,
82
+ regscale_ssp_id=regscale_ssp_id,
83
+ scan_date=scan_date,
84
+ mappings_path=mappings_path,
85
+ disable_mapping=disable_mapping,
86
+ s3_bucket=s3_bucket,
87
+ s3_prefix=s3_prefix,
88
+ aws_profile=aws_profile,
89
+ upload_file=upload_file,
90
+ )
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """RegScale GCP Package"""
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from google.cloud.securitycenter_v1 import Finding
8
+ from google.cloud.securitycenter_v1.services.security_center.pagers import ListFindingsPager
9
+ from google.cloud import asset_v1
10
+
11
+ import copy
12
+ from typing import List, Optional
13
+
14
+ import click
15
+
16
+ from regscale.core.utils.date import default_date_format
17
+ from regscale.integrations.commercial.gcp.auth import (
18
+ get_gcp_security_center_client,
19
+ get_gcp_asset_service_client,
20
+ )
21
+ from regscale.integrations.commercial.gcp.control_tests import gcp_control_tests
22
+ from regscale.integrations.commercial.gcp.variables import GcpVariables
23
+ from regscale.integrations.scanner_integration import (
24
+ logger,
25
+ IntegrationFinding,
26
+ ScannerIntegration,
27
+ IntegrationAsset,
28
+ )
29
+ from regscale.models import regscale_models
30
+
31
+
32
+ @click.group()
33
+ def gcp():
34
+ """GCP Integrations"""
35
+
36
+
37
+ @gcp.command(name="sync_findings")
38
+ @click.option(
39
+ "--regscale_ssp_id",
40
+ type=click.INT,
41
+ help="The ID number from RegScale of the System Security Plan",
42
+ prompt="Enter RegScale System Security Plan ID",
43
+ required=True,
44
+ )
45
+ def sync_findings(regscale_ssp_id):
46
+ """Sync GCP Findings to RegScale."""
47
+ GCPScannerIntegration.sync_findings(plan_id=regscale_ssp_id)
48
+
49
+
50
+ @gcp.command(name="sync_assets")
51
+ @click.option(
52
+ "--regscale_ssp_id",
53
+ type=click.INT,
54
+ help="The ID number from RegScale of the System Security Plan",
55
+ prompt="Enter RegScale System Security Plan ID",
56
+ required=True,
57
+ )
58
+ def sync_assets(regscale_ssp_id):
59
+ """Sync GCP Assets to RegScale."""
60
+ GCPScannerIntegration.sync_assets(plan_id=regscale_ssp_id)
61
+
62
+
63
+ class GCPScannerIntegration(ScannerIntegration):
64
+ title = "GCP Scanner Integration"
65
+ asset_identifier_field = "googleIdentifier"
66
+ gcp_control_tests: dict[str, dict[str, dict[str, str]]] = {}
67
+ finding_severity_map = {
68
+ 0: regscale_models.IssueSeverity.Low,
69
+ 1: regscale_models.IssueSeverity.Critical,
70
+ 2: regscale_models.IssueSeverity.High,
71
+ 3: regscale_models.IssueSeverity.Moderate,
72
+ 4: regscale_models.IssueSeverity.Low,
73
+ }
74
+
75
+ @staticmethod
76
+ def get_failed_findings() -> "ListFindingsPager":
77
+ """
78
+ Fetches GCP findings using the SecurityCenterClient
79
+
80
+ :raises NameError: If gcpFindingSources is set incorrectly
81
+ :return: A list of parsed findings
82
+ :rtype: ListFindingsPager
83
+ """
84
+ from google.api_core.exceptions import InvalidArgument # Optimize import performance
85
+
86
+ logger.info("Fetching GCP findings...")
87
+
88
+ if str(GcpVariables.gcpScanType) == "project": # type: ignore
89
+ sources = f"projects/{GcpVariables.gcpProjectId}/sources/-"
90
+ else:
91
+ sources = f"organizations/{GcpVariables.gcpOrganizationId}/sources/-"
92
+ try:
93
+ client = get_gcp_security_center_client()
94
+ gcp_findings = client.list_findings(request={"parent": sources})
95
+ logger.info("Fetched GCP findings.")
96
+ return gcp_findings
97
+ except InvalidArgument:
98
+ error_msg = f"gcpFindingSources is set incorrectly: {sources}."
99
+ logger.error(error_msg)
100
+ raise NameError(error_msg)
101
+
102
+ def get_passed_findings(self) -> List[IntegrationFinding]:
103
+ """
104
+ Gets passed findings for from the GCP control tests
105
+
106
+ :return: A list of passed findings
107
+ :rtype: List[IntegrationFinding]
108
+ """
109
+ passed_findings = []
110
+ self.gcp_control_tests = copy.copy(gcp_control_tests)
111
+
112
+ for control_label, categories in self.gcp_control_tests.items():
113
+ for category, control_test in categories.items():
114
+ if control_test.get("status", "") == "Failed":
115
+ logger.debug(
116
+ f"Control {control_label} had findings in category {category}, "
117
+ f"skipping passed control test creation"
118
+ )
119
+ continue
120
+ passed_findings.append(
121
+ IntegrationFinding(
122
+ control_labels=[control_label.lower()],
123
+ title=f"{self.title} Control Assessment",
124
+ category=category,
125
+ description=control_test.get("description", ""),
126
+ severity=regscale_models.IssueSeverity.Low,
127
+ status=regscale_models.ControlTestResultStatus.PASS,
128
+ impact=regscale_models.IssueSeverity.Low,
129
+ plugin_name=category,
130
+ )
131
+ )
132
+ return passed_findings
133
+
134
+ def fetch_findings(self, **kwargs) -> List[IntegrationFinding]:
135
+ """
136
+ Fetches GCP findings using the SecurityCenterClient
137
+
138
+ :return: A list of parsed findings
139
+ :rtype: List[IntegrationFinding]
140
+ """
141
+ gcp_findings = self.get_failed_findings()
142
+
143
+ self.gcp_control_tests = copy.copy(gcp_control_tests)
144
+ failed_findings = list(filter(None, [self.parse_finding(finding.finding) for finding in gcp_findings]))
145
+ passed_findings = self.get_passed_findings()
146
+ return failed_findings + passed_findings
147
+
148
+ def parse_finding(self, gcp_finding: "Finding") -> Optional[IntegrationFinding]:
149
+ """
150
+ Parses GCP findings
151
+
152
+ :param Finding gcp_finding: The GCP finding to parse
153
+ :return: The parsed IntegrationFinding
154
+ :rtype: Optional[IntegrationFinding]
155
+ """
156
+ from google.cloud.securitycenter_v1 import Finding # Optimize import performance
157
+
158
+ if any(
159
+ control_labels := [
160
+ label.lower() for c in gcp_finding.compliances if c.standard == "nist" for label in c.ids
161
+ ]
162
+ ):
163
+ control_labels = [label.lower() for label in control_labels]
164
+
165
+ # Set control test status to failed since we found a finding for it
166
+ for control_label in control_labels:
167
+ # Ensure control_id is a string when used as a key
168
+ control_label = str(control_label)
169
+ if self.gcp_control_tests.get(control_label, {}).get(gcp_finding.category):
170
+ self.gcp_control_tests[control_label][gcp_finding.category]["status"] = "Failed"
171
+
172
+ severity = self.finding_severity_map.get(
173
+ gcp_finding.severity, regscale_models.IssueSeverity.Low
174
+ ) # Default to Low
175
+ return IntegrationFinding(
176
+ control_labels=control_labels,
177
+ title=f"{self.title} Control Assessment",
178
+ category=gcp_finding.category,
179
+ description=gcp_finding.description,
180
+ severity=severity,
181
+ status=regscale_models.ControlTestResultStatus.FAIL,
182
+ external_id=gcp_finding.external_uri,
183
+ gaps=f"Resource out of compliance: {gcp_finding.resource_name}\n"
184
+ f"Recommendation: {gcp_finding.source_properties.get('Recommendation', '')}",
185
+ observations=gcp_finding.source_properties.get("Explanation", ""),
186
+ evidence=Finding.to_json(gcp_finding),
187
+ identified_risk=gcp_finding.source_properties.get("Explanation", ""),
188
+ impact=severity,
189
+ recommendation_for_mitigation=gcp_finding.source_properties.get("Recommendation", ""),
190
+ plugin_name=gcp_finding.category,
191
+ )
192
+ logger.info(f"Finding {gcp_finding.name} has no NIST controls.")
193
+ return None
194
+
195
+ def fetch_assets(self):
196
+ """
197
+ Fetches GCP assets using the AssetServiceClient
198
+
199
+ :yields: Iterator[IntegrationAsset]
200
+ """
201
+ from google.cloud import asset_v1 # Optimize import performance
202
+
203
+ logger.info("Fetching GCP assets...")
204
+ client = get_gcp_asset_service_client()
205
+ if str(GcpVariables.gcpScanType) == "project": # type: ignore
206
+ sources = f"projects/{GcpVariables.gcpProjectId}"
207
+ else:
208
+ sources = f"organizations/{GcpVariables.gcpOrganizationId}"
209
+ request = asset_v1.ListAssetsRequest(parent=sources) # type: ignore
210
+ logger.info("Fetched GCP assets.")
211
+ self.num_assets_to_process = 0
212
+ for asset in client.list_assets(request=request):
213
+ self.num_assets_to_process += 1
214
+ yield self.parse_asset(asset)
215
+
216
+ def parse_asset(self, asset: "asset_v1.Asset") -> IntegrationAsset:
217
+ """
218
+ Parses GCP assets
219
+
220
+ :param asset_v1.Asset asset: The GCP asset to parse
221
+ :return: The parsed IntegrationAsset
222
+ :rtype: IntegrationAsset
223
+ """
224
+ from google.cloud import asset_v1 # type: ignore # Optimize import performance
225
+
226
+ return IntegrationAsset(
227
+ name=asset.name,
228
+ identifier=asset.name,
229
+ asset_type=asset.asset_type,
230
+ asset_owner_id=self.assessor_id,
231
+ parent_id=self.plan_id,
232
+ parent_module=regscale_models.SecurityPlan.get_module_slug(),
233
+ asset_category="GCP",
234
+ date_last_updated=asset.update_time.strftime(default_date_format),
235
+ component_names=[asset.asset_type],
236
+ status="Active (On Network)",
237
+ )
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """Sync GCP Authentication and Checks"""
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from google.cloud import securitycenter
8
+ from google.cloud import asset_v1
9
+
10
+ import logging
11
+ import os
12
+
13
+ from regscale.core.app.utils.app_utils import error_and_exit
14
+ from regscale.integrations.commercial.gcp.variables import GcpVariables
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ def ensure_gcp_credentials() -> None:
20
+ """
21
+ Ensures that the GCP credentials are set in the environment
22
+
23
+ :rtype: None
24
+ """
25
+ if not os.environ.get("GOOGLE_APPLICATION_CREDENTIALS"):
26
+ os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = GcpVariables.gcpCredentials
27
+
28
+
29
+ def ensure_gcp_api_enabled(service_name: str) -> None:
30
+ """
31
+ Ensures that the Security Center API is enabled
32
+ Checks if the API is enabled and raises an exception or prints a message if it is not
33
+
34
+ :param str service_name: The name of the service to check
35
+ :raises RuntimeError: If the API is not enabled or any other error occurs
36
+ :rtype: None
37
+ """
38
+ from google.auth.exceptions import GoogleAuthError # Optimize import performance
39
+ from googleapiclient.discovery import build # Optimize import performance
40
+
41
+ ensure_gcp_credentials() # Assuming this function sets up authentication
42
+ project_id = GcpVariables.gcpProjectId
43
+
44
+ try:
45
+ service = build("serviceusage", "v1")
46
+ request = service.services().get(name=f"projects/{project_id}/services/{service_name}")
47
+ response = request.execute()
48
+
49
+ if response and response.get("state") == "ENABLED":
50
+ logger.info(f"{service_name} api is enabled for project {project_id}.")
51
+ else:
52
+ error_and_exit(
53
+ f"{service_name} api is not enabled for project {project_id}. Please enable it.\n"
54
+ f"Run the following command:\n"
55
+ f"gcloud services enable {service_name} --project {project_id}"
56
+ )
57
+ except GoogleAuthError as e:
58
+ raise RuntimeError(f"Authentication error: {e}")
59
+ except Exception as e:
60
+ raise RuntimeError(f"An error occurred: {e}")
61
+
62
+
63
+ def ensure_security_center_api_enabled() -> None:
64
+ """
65
+ Ensures that the Security Center API is enabled
66
+
67
+ :rtype: None
68
+ """
69
+ ensure_gcp_credentials()
70
+ os.system(f"gcloud services enable securitycenter.googleapis.com --project {GcpVariables.gcpProjectId}")
71
+
72
+
73
+ def get_gcp_security_center_client() -> "securitycenter.SecurityCenterClient":
74
+ """
75
+ Gets the GCP Security Center client
76
+
77
+ :return: The GCP client
78
+ :rtype: securitycenter.SecurityCenterClient
79
+ """
80
+ from google.cloud import securitycenter # Optimize import performance
81
+
82
+ ensure_gcp_api_enabled("securitycenter.googleapis.com")
83
+ return securitycenter.SecurityCenterClient()
84
+
85
+
86
+ def get_gcp_asset_service_client() -> "asset_v1.AssetServiceClient":
87
+ """
88
+ Gets the GCP Asset Service client
89
+
90
+ :return: The GCP client
91
+ :rtype: asset_v1.AssetServiceClient
92
+ """
93
+ from google.cloud import asset_v1 # Optimize import performance
94
+
95
+ ensure_gcp_api_enabled("cloudasset.googleapis.com")
96
+ return asset_v1.AssetServiceClient()
@@ -0,0 +1,238 @@
1
+ gcp_control_tests = {
2
+ "ac-2": {
3
+ "PUBLIC_BUCKET_ACL": {
4
+ "severity": "HIGH",
5
+ "description": "Cloud Storage buckets should not be anonymously or publicly accessible",
6
+ },
7
+ "PUBLIC_DATASET": {
8
+ "severity": "HIGH",
9
+ "description": "Datasets should not be publicly accessible by anyone on the internet",
10
+ },
11
+ "AUDIT_LOGGING_DISABLED": {
12
+ "severity": "LOW",
13
+ "description": "Cloud Audit Logging should be configured properly across all services and all users from a "
14
+ "project",
15
+ },
16
+ },
17
+ "au-2": {
18
+ "AUDIT_LOGGING_DISABLED": {
19
+ "severity": "LOW",
20
+ "description": "Cloud Audit Logging should be configured properly across all services and all users from a "
21
+ "project",
22
+ }
23
+ },
24
+ "ac-3": {
25
+ "NON_ORG_IAM_MEMBER": {
26
+ "severity": "HIGH",
27
+ "description": "Corporate login credentials should be used instead of Gmail accounts",
28
+ },
29
+ "SQL_NO_ROOT_PASSWORD": {
30
+ "severity": "HIGH",
31
+ "description": "MySQL database instance should not allow anyone to connect with administrative privileges.",
32
+ },
33
+ },
34
+ "ac-5": {
35
+ "KMS_ROLE_SEPARATION": {
36
+ "severity": "MEDIUM",
37
+ "description": "Separation of duties should be enforced while assigning KMS related roles to users",
38
+ },
39
+ "SERVICE_ACCOUNT_ROLE_SEPARATION": {
40
+ "severity": "MEDIUM",
41
+ "description": "Separation of duties should be enforced while assigning service account related roles to "
42
+ "users",
43
+ },
44
+ },
45
+ "ac-6": {
46
+ "FULL_API_ACCESS": {
47
+ "severity": "MEDIUM",
48
+ "description": "Instances should not be configured to use the default service account with full access to "
49
+ "all Cloud APIs",
50
+ },
51
+ "OVER_PRIVILEGED_SERVICE_ACCOUNT_USER": {
52
+ "severity": "MEDIUM",
53
+ "description": "The iam.serviceAccountUser and iam.serviceAccountTokenCreator roles should not be assigned "
54
+ "to a user at the project level",
55
+ },
56
+ "PRIMITIVE_ROLES_USED": {
57
+ "severity": "MEDIUM",
58
+ "description": "Basic roles (Owner, Writer, Reader) are too permissive and should not be used",
59
+ },
60
+ "OVER_PRIVILEGED_ACCOUNT": {
61
+ "severity": "MEDIUM",
62
+ "description": "Default Service account should not used for Project access in Kubernetes Clusters",
63
+ },
64
+ "KMS_PROJECT_HAS_OWNER": {
65
+ "severity": "MEDIUM",
66
+ "description": 'Users should not have "Owner" permissions on a project that has cryptographic keys',
67
+ },
68
+ },
69
+ "au-9": {
70
+ "PUBLIC_LOG_BUCKET": {
71
+ "severity": "HIGH",
72
+ "description": "Storage buckets used as log sinks should not be publicly accessible",
73
+ }
74
+ },
75
+ "au-11": {
76
+ "LOCKED_RETENTION_POLICY_NOT_SET": {
77
+ "severity": "LOW",
78
+ "description": "A locked retention policy should be configured for Cloud Storage buckets",
79
+ },
80
+ "OBJECT_VERSIONING_DISABLED": {
81
+ "severity": "LOW",
82
+ "description": "Log-buckets should have Object Versioning enabled",
83
+ },
84
+ },
85
+ "ca-3": {
86
+ "PUBLIC_IP_ADDRESS": {
87
+ "severity": "HIGH",
88
+ "description": "VMs should not be assigned public IP addresses",
89
+ },
90
+ "PUBLIC_SQL_INSTANCE": {
91
+ "severity": "HIGH",
92
+ "description": "Cloud SQL database instances should not be publicly accessible by anyone on the internet",
93
+ },
94
+ },
95
+ "cp-9": {
96
+ "AUTO_BACKUP_DISABLED": {
97
+ "severity": "MEDIUM",
98
+ "description": "Automated backups should be Enabled",
99
+ }
100
+ },
101
+ "ia-2": {
102
+ "MFA_NOT_ENFORCED": {
103
+ "severity": "HIGH",
104
+ "description": "Multi-factor authentication should be enabled for all users in your org unit",
105
+ }
106
+ },
107
+ "sc-7": {
108
+ "OVER_PRIVILEGED_ACCOUNT": {
109
+ "severity": "MEDIUM",
110
+ "description": "Default Service account should not used for Project access in Kubernetes Clusters",
111
+ },
112
+ "PUBLIC_IP_ADDRESS": {
113
+ "severity": "HIGH",
114
+ "description": "VMs should not be assigned public IP addresses",
115
+ },
116
+ "PUBLIC_SQL_INSTANCE": {
117
+ "severity": "HIGH",
118
+ "description": "Cloud SQL database instances should not be publicly accessible by anyone on the internet",
119
+ },
120
+ "NETWORK_POLICY_DISABLED": {
121
+ "severity": "MEDIUM",
122
+ "description": "Network policy should be Enabled on Kubernetes Engine Clusters",
123
+ },
124
+ "OPEN_CASSANDRA_PORT": {
125
+ "severity": "HIGH",
126
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 7000-7001, "
127
+ "7199, 8888, 9042, 9160, 61620-61621",
128
+ },
129
+ "OPEN_CISCOSECURE_WEBSM_PORT": {
130
+ "severity": "HIGH",
131
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 9090",
132
+ },
133
+ "OPEN_DIRECTORY_SERVICES_PORT": {
134
+ "severity": "HIGH",
135
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or UDP port 445",
136
+ },
137
+ "OPEN_DNS_PORT": {
138
+ "severity": "HIGH",
139
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or UDP port 53",
140
+ },
141
+ "OPEN_ELASTICSEARCH_PORT": {
142
+ "severity": "HIGH",
143
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 9200, 9300",
144
+ },
145
+ "OPEN_FTP_PORT": {
146
+ "severity": "HIGH",
147
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 21",
148
+ },
149
+ "OPEN_HTTP_PORT": {
150
+ "severity": "HIGH",
151
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 80",
152
+ },
153
+ "OPEN_LDAP_PORT": {
154
+ "severity": "HIGH",
155
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 389, 636"
156
+ " or UDP port 389",
157
+ },
158
+ "OPEN_MEMCACHED_PORT": {
159
+ "severity": "HIGH",
160
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 11211, "
161
+ "11214-11215 or UDP ports 11211, 11214-11215",
162
+ },
163
+ "OPEN_MONGODB_PORT": {
164
+ "severity": "HIGH",
165
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 27017-27019",
166
+ },
167
+ "OPEN_MYSQL_PORT": {
168
+ "severity": "HIGH",
169
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 3306",
170
+ },
171
+ "OPEN_NETBIOS_PORT": {
172
+ "severity": "HIGH",
173
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or UDP ports "
174
+ "137-139",
175
+ },
176
+ "OPEN_ORACLEDB_PORT": {
177
+ "severity": "HIGH",
178
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP ports 1521, "
179
+ "2483-2484 or UDP ports 2483-2484",
180
+ },
181
+ "OPEN_POP3_PORT": {
182
+ "severity": "HIGH",
183
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 110",
184
+ },
185
+ "OPEN_POSTGRESQL_PORT": {
186
+ "severity": "HIGH",
187
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or UDP port 5432",
188
+ },
189
+ "OPEN_RDP_PORT": {
190
+ "severity": "HIGH",
191
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or UDP port 3389",
192
+ },
193
+ "OPEN_REDIS_PORT": {
194
+ "severity": "HIGH",
195
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 6379",
196
+ },
197
+ "OPEN_SMTP_PORT": {
198
+ "severity": "HIGH",
199
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 25",
200
+ },
201
+ "OPEN_SSH_PORT": {
202
+ "severity": "HIGH",
203
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP or SCTP port 22",
204
+ },
205
+ "OPEN_TELNET_PORT": {
206
+ "severity": "HIGH",
207
+ "description": "Firewall rules should not allow connections from all IP addresses on TCP port 23",
208
+ },
209
+ "SSL_NOT_ENFORCED": {
210
+ "severity": "HIGH",
211
+ "description": "Cloud SQL database instance should require all incoming connections to use SSL",
212
+ },
213
+ "WEAK_SSL_POLICY": {
214
+ "severity": "MEDIUM",
215
+ "description": "Weak or insecure SSL Policys should not be used",
216
+ },
217
+ },
218
+ "sc-12": {
219
+ "KMS_PROJECT_HAS_OWNER": {
220
+ "severity": "MEDIUM",
221
+ "description": 'Users should not have "Owner" permissions on a project that has cryptographic keys',
222
+ },
223
+ "KMS_KEY_NOT_ROTATED": {
224
+ "severity": "MEDIUM",
225
+ "description": "Encryption keys should be rotated within a period of 90 days",
226
+ },
227
+ },
228
+ "si-4": {
229
+ "FIREWALL_RULE_LOGGING_DISABLED": {
230
+ "severity": "MEDIUM",
231
+ "description": "Firewall rule logging should be enabled so you can audit network access",
232
+ },
233
+ "FLOW_LOGS_DISABLED": {
234
+ "severity": "LOW",
235
+ "description": "VPC Flow logs should be Enabled for every subnet in VPC Network",
236
+ },
237
+ },
238
+ }
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """GCP Variables"""
4
+
5
+ from regscale.core.app.utils.variables import RsVariableType, RsVariablesMeta
6
+
7
+
8
+ class GcpVariables(metaclass=RsVariablesMeta):
9
+ """
10
+ GCP Variables class to define class-level attributes with type annotations and examples
11
+ """
12
+
13
+ # Define class-level attributes with type annotations and examples
14
+ gcpProjectId: RsVariableType(str, "000000000000") # type: ignore
15
+ gcpOrganizationId: RsVariableType(str, "000000000000") # type: ignore
16
+ gcpScanType: RsVariableType(str, "organization | project") # type: ignore # noqa: F821
17
+ gcpCredentials: RsVariableType(str, "path/to/credentials.json") # type: ignore # noqa: F821
18
+ # gcpOrganizationId: RsVariableTypeWithExample(str, "000000000000", required=False)