pangea 0.0.45 → 0.0.46

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.
Files changed (2051) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -83
  3. data/Dockerfile +4 -20
  4. data/Gemfile +0 -7
  5. data/Gemfile.lock +71 -211
  6. data/LICENSE +1 -1
  7. data/README.md +40 -208
  8. data/Rakefile +23 -146
  9. data/bin/pangea +2 -2
  10. data/example/config/README.md +3 -0
  11. data/example/config/sample.rb +20 -0
  12. data/flake.lock +6 -6
  13. data/flake.nix +0 -25
  14. data/gemset.nix +114 -575
  15. data/lib/pangea/cli/config.rb +99 -0
  16. data/lib/pangea/cli/constants.rb +33 -0
  17. data/lib/pangea/cli/subcommands/config.rb +212 -0
  18. data/lib/pangea/cli/subcommands/infra.rb +311 -0
  19. data/lib/pangea/cli/subcommands/main.rb +58 -0
  20. data/lib/pangea/cli/subcommands/pangea.rb +18 -0
  21. data/lib/pangea/cli/subcommands/state.rb +30 -0
  22. data/lib/pangea/cli.rb +63 -0
  23. data/lib/pangea/config.rb +35 -0
  24. data/lib/pangea/docker.rb +104 -0
  25. data/lib/pangea/errors/incorrect_subcommand_error.rb +2 -0
  26. data/lib/pangea/errors/namespace_not_found_error.rb +2 -0
  27. data/lib/pangea/errors/no_infra_target_error.rb +2 -0
  28. data/lib/pangea/errors/project_not_found_error.rb +2 -0
  29. data/lib/pangea/errors/site_not_found_error.rb +2 -0
  30. data/lib/pangea/executor.rb +10 -0
  31. data/lib/pangea/log/init.rb +2 -0
  32. data/lib/pangea/modcache.rb +79 -0
  33. data/lib/pangea/module.rb +17 -0
  34. data/lib/pangea/modules.rb +134 -0
  35. data/lib/pangea/processor.rb +101 -0
  36. data/lib/pangea/renderer.rb +241 -0
  37. data/lib/pangea/sandbox.rb +90 -0
  38. data/lib/pangea/say/init.rb +27 -0
  39. data/lib/pangea/shell/README.md +1 -0
  40. data/lib/pangea/shell/terraform.rb +21 -0
  41. data/lib/pangea/shell.rb +27 -0
  42. data/lib/pangea/stack.rb +11 -0
  43. data/lib/pangea/state.rb +96 -0
  44. data/lib/pangea/structures/README.md +3 -0
  45. data/lib/pangea/structures/abstract.rb +2 -0
  46. data/lib/pangea/structures/namespace.rb +4 -0
  47. data/lib/pangea/structures/project.rb +4 -0
  48. data/lib/pangea/structures/site.rb +4 -0
  49. data/lib/pangea/synthesizer/config.rb +38 -0
  50. data/lib/pangea/utils.rb +32 -0
  51. data/lib/pangea/version.rb +1 -15
  52. data/lib/pangea.rb +17 -37
  53. data/pangea.gemspec +33 -37
  54. data/pangea.rb +0 -14
  55. metadata +136 -2263
  56. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -114
  57. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -67
  58. data/.github/ISSUE_TEMPLATE/question.yml +0 -44
  59. data/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  60. data/.github/workflows/ci.yml +0 -79
  61. data/.github/workflows/release.yml +0 -43
  62. data/AGENT_GUIDE.md +0 -333
  63. data/CHANGELOG.md +0 -67
  64. data/CLAUDE.md +0 -626
  65. data/CONTRIBUTING.md +0 -143
  66. data/EXAMPLES.md +0 -376
  67. data/OPEN_SOURCE_READINESS.md +0 -170
  68. data/README_backend_configuration.md +0 -174
  69. data/SECURITY.md +0 -90
  70. data/Steepfile +0 -33
  71. data/audit_results/vpc_resources_audit.json +0 -219
  72. data/docker-compose.test.yml +0 -31
  73. data/docs/RESOURCES.md +0 -456
  74. data/examples/advanced_global_infrastructure.rb +0 -544
  75. data/examples/advanced_ml_healthcare_infrastructure.rb +0 -546
  76. data/examples/api_gateway_complete.rb +0 -275
  77. data/examples/basic-web-app/README.md +0 -176
  78. data/examples/basic-web-app/infrastructure.rb +0 -686
  79. data/examples/basic-web-app/pangea.yaml +0 -36
  80. data/examples/cicd-pipeline/README.md +0 -348
  81. data/examples/cicd-pipeline/infrastructure.rb +0 -1186
  82. data/examples/cicd-pipeline/pangea.yaml +0 -35
  83. data/examples/cloudwatch_monitoring_example.rb +0 -192
  84. data/examples/comprehensive_database_platform.rb +0 -575
  85. data/examples/data-processing/README.md +0 -320
  86. data/examples/data-processing/infrastructure.rb +0 -1616
  87. data/examples/data-processing/pangea.yaml +0 -57
  88. data/examples/disaster-recovery/README.md +0 -446
  89. data/examples/disaster-recovery/infrastructure.rb +0 -1518
  90. data/examples/disaster-recovery/pangea.yaml +0 -62
  91. data/examples/gaming_infrastructure.rb +0 -505
  92. data/examples/global-multi-region/README.md +0 -427
  93. data/examples/global-multi-region/infrastructure.rb +0 -1454
  94. data/examples/global-multi-region/pangea.yaml +0 -61
  95. data/examples/messaging_example.rb +0 -189
  96. data/examples/microservices-platform/README.md +0 -275
  97. data/examples/microservices-platform/infrastructure.rb +0 -1024
  98. data/examples/microservices-platform/pangea.yaml +0 -35
  99. data/examples/ml-platform/README.md +0 -456
  100. data/examples/ml-platform/infrastructure.rb +0 -1882
  101. data/examples/ml-platform/pangea.yaml +0 -58
  102. data/examples/multi-environment/README.md +0 -280
  103. data/examples/multi-environment/infrastructure.rb +0 -1266
  104. data/examples/multi-environment/pangea.yaml +0 -71
  105. data/examples/multi-tier-architecture/README.md +0 -271
  106. data/examples/multi-tier-architecture/infrastructure.rb +0 -1077
  107. data/examples/multi-tier-architecture/pangea.yaml +0 -49
  108. data/examples/resource_composition_patterns.rb +0 -303
  109. data/examples/robotics_and_specialized_services.rb +0 -310
  110. data/examples/scalable_infrastructure.rb +0 -422
  111. data/examples/security-focused/README.md +0 -368
  112. data/examples/security-focused/infrastructure.rb +0 -1684
  113. data/examples/security-focused/pangea.yaml +0 -60
  114. data/examples/simple.rb +0 -39
  115. data/examples/type_safe_infrastructure.rb +0 -214
  116. data/exe/pangea +0 -37
  117. data/guides/README.md +0 -157
  118. data/guides/advanced-patterns.md +0 -1196
  119. data/guides/cicd-integration.md +0 -1047
  120. data/guides/getting-started.md +0 -399
  121. data/guides/migration-from-terraform.md +0 -924
  122. data/guides/multi-environment-management.md +0 -769
  123. data/guides/template-isolation.md +0 -673
  124. data/guides/type-safe-infrastructure.md +0 -695
  125. data/lib/pangea/agent.rb +0 -366
  126. data/lib/pangea/architecture_registry.rb +0 -94
  127. data/lib/pangea/architectures/ARCHITECTURE_CATALOG.md +0 -736
  128. data/lib/pangea/architectures/CLAUDE.md +0 -425
  129. data/lib/pangea/architectures/COMPLETE_ARCHITECTURE_SUMMARY.md +0 -385
  130. data/lib/pangea/architectures/base.rb +0 -545
  131. data/lib/pangea/architectures/examples/web_application_examples.rb +0 -589
  132. data/lib/pangea/architectures/examples.rb +0 -508
  133. data/lib/pangea/architectures/patterns/data_processing.rb +0 -669
  134. data/lib/pangea/architectures/patterns/microservices.rb +0 -626
  135. data/lib/pangea/architectures/patterns/simple_web_application.rb +0 -120
  136. data/lib/pangea/architectures/patterns/web_application.rb +0 -556
  137. data/lib/pangea/architectures/simple_web_app/architecture.rb +0 -70
  138. data/lib/pangea/architectures/simple_web_app/types.rb +0 -36
  139. data/lib/pangea/architectures/types.rb +0 -281
  140. data/lib/pangea/architectures/web_application_architecture/README.md +0 -375
  141. data/lib/pangea/architectures/web_application_architecture/architecture.rb +0 -511
  142. data/lib/pangea/architectures/web_application_architecture/types.rb +0 -295
  143. data/lib/pangea/architectures.rb +0 -24
  144. data/lib/pangea/backends/base.rb +0 -77
  145. data/lib/pangea/backends/local.rb +0 -159
  146. data/lib/pangea/backends/s3.rb +0 -213
  147. data/lib/pangea/backends.rb +0 -51
  148. data/lib/pangea/cli/application.rb +0 -211
  149. data/lib/pangea/cli/commands/agent.rb +0 -609
  150. data/lib/pangea/cli/commands/apply.rb +0 -240
  151. data/lib/pangea/cli/commands/base_command.rb +0 -131
  152. data/lib/pangea/cli/commands/destroy.rb +0 -131
  153. data/lib/pangea/cli/commands/inspect.rb +0 -437
  154. data/lib/pangea/cli/commands/plan.rb +0 -194
  155. data/lib/pangea/cli/formatters/json_formatter.rb +0 -195
  156. data/lib/pangea/cli/ui/diff.rb +0 -250
  157. data/lib/pangea/cli/ui/logger.rb +0 -174
  158. data/lib/pangea/cli/ui/progress.rb +0 -232
  159. data/lib/pangea/cli/ui/spinner.rb +0 -68
  160. data/lib/pangea/cli/ui/table.rb +0 -51
  161. data/lib/pangea/cli/ui/visualizer.rb +0 -409
  162. data/lib/pangea/compilation/template_compiler.rb +0 -384
  163. data/lib/pangea/compilation/validator.rb +0 -133
  164. data/lib/pangea/component_registry.rb +0 -79
  165. data/lib/pangea/components/ADVANCED_COMPONENT_CATALOG.md +0 -556
  166. data/lib/pangea/components/CLAUDE.md +0 -350
  167. data/lib/pangea/components/COMPLETE_COMPONENT_SUMMARY.md +0 -266
  168. data/lib/pangea/components/COMPONENT_CATALOG.md +0 -470
  169. data/lib/pangea/components/EXTENDED_COMPONENT_CATALOG.md +0 -558
  170. data/lib/pangea/components/IMPLEMENTATION_PROGRESS.md +0 -246
  171. data/lib/pangea/components/api_gateway_microservices/README.md +0 -384
  172. data/lib/pangea/components/api_gateway_microservices/component.rb +0 -630
  173. data/lib/pangea/components/api_gateway_microservices/types.rb +0 -248
  174. data/lib/pangea/components/application_load_balancer/CLAUDE.md +0 -224
  175. data/lib/pangea/components/application_load_balancer/README.md +0 -225
  176. data/lib/pangea/components/application_load_balancer/component.rb +0 -316
  177. data/lib/pangea/components/application_load_balancer/types.rb +0 -117
  178. data/lib/pangea/components/auto_scaling_web_servers/README.md +0 -326
  179. data/lib/pangea/components/auto_scaling_web_servers/component.rb +0 -396
  180. data/lib/pangea/components/auto_scaling_web_servers/types.rb +0 -176
  181. data/lib/pangea/components/base.rb +0 -104
  182. data/lib/pangea/components/capabilities.rb +0 -93
  183. data/lib/pangea/components/carbon_aware_compute/CLAUDE.md +0 -295
  184. data/lib/pangea/components/carbon_aware_compute/README.md +0 -194
  185. data/lib/pangea/components/carbon_aware_compute/component.rb +0 -1136
  186. data/lib/pangea/components/carbon_aware_compute/types.rb +0 -167
  187. data/lib/pangea/components/disaster_recovery_pilot_light/README.md +0 -366
  188. data/lib/pangea/components/disaster_recovery_pilot_light/component.rb +0 -1549
  189. data/lib/pangea/components/disaster_recovery_pilot_light/types.rb +0 -255
  190. data/lib/pangea/components/event_driven_microservice/README.md +0 -341
  191. data/lib/pangea/components/event_driven_microservice/component.rb +0 -665
  192. data/lib/pangea/components/event_driven_microservice/types.rb +0 -217
  193. data/lib/pangea/components/examples.rb +0 -515
  194. data/lib/pangea/components/global_service_mesh/README.md +0 -438
  195. data/lib/pangea/components/global_service_mesh/component.rb +0 -1307
  196. data/lib/pangea/components/global_service_mesh/types.rb +0 -289
  197. data/lib/pangea/components/global_traffic_manager/README.md +0 -351
  198. data/lib/pangea/components/global_traffic_manager/component.rb +0 -1144
  199. data/lib/pangea/components/global_traffic_manager/types.rb +0 -282
  200. data/lib/pangea/components/green_data_lifecycle/CLAUDE.md +0 -353
  201. data/lib/pangea/components/green_data_lifecycle/README.md +0 -270
  202. data/lib/pangea/components/green_data_lifecycle/component.rb +0 -1403
  203. data/lib/pangea/components/green_data_lifecycle/types.rb +0 -184
  204. data/lib/pangea/components/microservice_deployment/README.md +0 -321
  205. data/lib/pangea/components/microservice_deployment/component.rb +0 -440
  206. data/lib/pangea/components/microservice_deployment/types.rb +0 -236
  207. data/lib/pangea/components/microservices_examples.rb +0 -444
  208. data/lib/pangea/components/multi_region_active_active/README.md +0 -267
  209. data/lib/pangea/components/multi_region_active_active/component.rb +0 -1200
  210. data/lib/pangea/components/multi_region_active_active/types.rb +0 -248
  211. data/lib/pangea/components/mysql_database/README.md +0 -342
  212. data/lib/pangea/components/mysql_database/component.rb +0 -343
  213. data/lib/pangea/components/mysql_database/types.rb +0 -201
  214. data/lib/pangea/components/public_private_subnets/CLAUDE.md +0 -547
  215. data/lib/pangea/components/public_private_subnets/README.md +0 -293
  216. data/lib/pangea/components/public_private_subnets/component.rb +0 -386
  217. data/lib/pangea/components/public_private_subnets/types.rb +0 -152
  218. data/lib/pangea/components/reference.rb +0 -155
  219. data/lib/pangea/components/secure_s3_bucket/README.md +0 -459
  220. data/lib/pangea/components/secure_s3_bucket/component.rb +0 -442
  221. data/lib/pangea/components/secure_s3_bucket/types.rb +0 -292
  222. data/lib/pangea/components/secure_vpc/CLAUDE.md +0 -366
  223. data/lib/pangea/components/secure_vpc/README.md +0 -187
  224. data/lib/pangea/components/secure_vpc/component.rb +0 -88
  225. data/lib/pangea/components/secure_vpc/types.rb +0 -141
  226. data/lib/pangea/components/service_mesh_observability/README.md +0 -423
  227. data/lib/pangea/components/service_mesh_observability/component.rb +0 -610
  228. data/lib/pangea/components/service_mesh_observability/types.rb +0 -231
  229. data/lib/pangea/components/siem_security_platform/component.rb +0 -2877
  230. data/lib/pangea/components/siem_security_platform/types.rb +0 -220
  231. data/lib/pangea/components/spot_instance_carbon_optimizer/CLAUDE.md +0 -469
  232. data/lib/pangea/components/spot_instance_carbon_optimizer/README.md +0 -338
  233. data/lib/pangea/components/spot_instance_carbon_optimizer/component.rb +0 -1638
  234. data/lib/pangea/components/spot_instance_carbon_optimizer/types.rb +0 -213
  235. data/lib/pangea/components/sustainable_ml_training/CLAUDE.md +0 -653
  236. data/lib/pangea/components/sustainable_ml_training/README.md +0 -363
  237. data/lib/pangea/components/sustainable_ml_training/component.rb +0 -1754
  238. data/lib/pangea/components/sustainable_ml_training/types.rb +0 -234
  239. data/lib/pangea/components/threat_intelligence_platform/types.rb +0 -203
  240. data/lib/pangea/components/types.rb +0 -198
  241. data/lib/pangea/components/vpc_with_subnets/component.rb +0 -177
  242. data/lib/pangea/components/vpc_with_subnets/types.rb +0 -61
  243. data/lib/pangea/components/web_security_group/CLAUDE.md +0 -690
  244. data/lib/pangea/components/web_security_group/README.md +0 -450
  245. data/lib/pangea/components/web_security_group/component.rb +0 -217
  246. data/lib/pangea/components/web_security_group/types.rb +0 -257
  247. data/lib/pangea/components/web_tier_subnets/CLAUDE.md +0 -572
  248. data/lib/pangea/components/web_tier_subnets/README.md +0 -368
  249. data/lib/pangea/components/web_tier_subnets/component.rb +0 -205
  250. data/lib/pangea/components/web_tier_subnets/types.rb +0 -185
  251. data/lib/pangea/components/zero_trust_network/component.rb +0 -674
  252. data/lib/pangea/components/zero_trust_network/types.rb +0 -150
  253. data/lib/pangea/components.rb +0 -80
  254. data/lib/pangea/configuration/types.rb +0 -294
  255. data/lib/pangea/configuration.rb +0 -249
  256. data/lib/pangea/documentation/generator.rb +0 -139
  257. data/lib/pangea/documentation/writer.rb +0 -86
  258. data/lib/pangea/entities/module_definition.rb +0 -140
  259. data/lib/pangea/entities/namespace.rb +0 -154
  260. data/lib/pangea/entities/project.rb +0 -99
  261. data/lib/pangea/entities/template.rb +0 -121
  262. data/lib/pangea/entities.rb +0 -29
  263. data/lib/pangea/errors.rb +0 -67
  264. data/lib/pangea/execution/terraform_executor.rb +0 -271
  265. data/lib/pangea/execution/workspace_manager.rb +0 -164
  266. data/lib/pangea/generators/resource_generator.rb +0 -82
  267. data/lib/pangea/generators/test_generator.rb +0 -68
  268. data/lib/pangea/quality/resource_auditor.rb +0 -74
  269. data/lib/pangea/resource_registry.rb +0 -68
  270. data/lib/pangea/resources/AWS_RESOURCE_COMPLETION_SUMMARY.md +0 -200
  271. data/lib/pangea/resources/CLAUDE.md +0 -607
  272. data/lib/pangea/resources/DATABASE_SERVICES_CLAUDE.md +0 -577
  273. data/lib/pangea/resources/EXTENDED_SERVICES_IMPLEMENTATION.md +0 -197
  274. data/lib/pangea/resources/FINAL_BATCH_IMPLEMENTATION.md +0 -328
  275. data/lib/pangea/resources/IMPLEMENTATION_SUMMARY.md +0 -185
  276. data/lib/pangea/resources/NEW_RESOURCES_SUMMARY.md +0 -259
  277. data/lib/pangea/resources/aws/MEDIA_SERVICES_IMPLEMENTATION_SUMMARY.md +0 -219
  278. data/lib/pangea/resources/aws/appconfig/configuration_version.rb +0 -55
  279. data/lib/pangea/resources/aws/appconfig/deployment_strategy.rb +0 -104
  280. data/lib/pangea/resources/aws/appconfig/extension.rb +0 -55
  281. data/lib/pangea/resources/aws/appconfig/extension_association.rb +0 -55
  282. data/lib/pangea/resources/aws/appconfig/hosted_configuration_version.rb +0 -55
  283. data/lib/pangea/resources/aws/appconfig/monitor.rb +0 -55
  284. data/lib/pangea/resources/aws/appconfig/validator.rb +0 -55
  285. data/lib/pangea/resources/aws/appconfig.rb +0 -42
  286. data/lib/pangea/resources/aws/applicationdiscoveryservice/application.rb +0 -82
  287. data/lib/pangea/resources/aws/applicationdiscoveryservice/application_resource.rb +0 -55
  288. data/lib/pangea/resources/aws/applicationdiscoveryservice/application_resource.rbs +0 -15
  289. data/lib/pangea/resources/aws/applicationdiscoveryservice.rb +0 -30
  290. data/lib/pangea/resources/aws/audit_manager/CLAUDE.md +0 -778
  291. data/lib/pangea/resources/aws/audit_manager/account_registration.rb +0 -55
  292. data/lib/pangea/resources/aws/audit_manager/assessment.rb +0 -55
  293. data/lib/pangea/resources/aws/audit_manager/assessment_control_set.rb +0 -55
  294. data/lib/pangea/resources/aws/audit_manager/assessment_delegation.rb +0 -55
  295. data/lib/pangea/resources/aws/audit_manager/assessment_report.rb +0 -55
  296. data/lib/pangea/resources/aws/audit_manager/control.rb +0 -55
  297. data/lib/pangea/resources/aws/audit_manager/evidence_folder.rb +0 -55
  298. data/lib/pangea/resources/aws/audit_manager/framework.rb +0 -55
  299. data/lib/pangea/resources/aws/audit_manager/framework_share.rb +0 -55
  300. data/lib/pangea/resources/aws/audit_manager/organization_admin_account.rb +0 -55
  301. data/lib/pangea/resources/aws/audit_manager.rb +0 -186
  302. data/lib/pangea/resources/aws/autoscaling/autoscaling_group_tag.rb +0 -55
  303. data/lib/pangea/resources/aws/autoscaling/autoscaling_lifecycle_hook.rb +0 -55
  304. data/lib/pangea/resources/aws/autoscaling/autoscaling_notification.rb +0 -55
  305. data/lib/pangea/resources/aws/autoscaling/autoscaling_policy_step_adjustment.rb +0 -55
  306. data/lib/pangea/resources/aws/autoscaling/autoscaling_policy_target_tracking_scaling_policy.rb +0 -55
  307. data/lib/pangea/resources/aws/autoscaling/autoscaling_schedule.rb +0 -55
  308. data/lib/pangea/resources/aws/autoscaling/autoscaling_traffic_source_attachment.rb +0 -55
  309. data/lib/pangea/resources/aws/autoscaling/autoscaling_warm_pool.rb +0 -55
  310. data/lib/pangea/resources/aws/autoscaling/launch_configuration.rb +0 -55
  311. data/lib/pangea/resources/aws/autoscaling/placement_group.rb +0 -55
  312. data/lib/pangea/resources/aws/autoscaling.rb +0 -186
  313. data/lib/pangea/resources/aws/base_resource.rb +0 -92
  314. data/lib/pangea/resources/aws/batch/CLAUDE.md +0 -965
  315. data/lib/pangea/resources/aws/batch/compute_environment.rb +0 -55
  316. data/lib/pangea/resources/aws/batch/job.rb +0 -55
  317. data/lib/pangea/resources/aws/batch/job_definition.rb +0 -55
  318. data/lib/pangea/resources/aws/batch/job_queue.rb +0 -55
  319. data/lib/pangea/resources/aws/batch/scheduling_policy.rb +0 -55
  320. data/lib/pangea/resources/aws/batch.rb +0 -106
  321. data/lib/pangea/resources/aws/cdk/bootstrap_version.rb +0 -47
  322. data/lib/pangea/resources/aws/cdk/bundling_docker_image.rb +0 -46
  323. data/lib/pangea/resources/aws/cdk/custom_resource_provider.rb +0 -46
  324. data/lib/pangea/resources/aws/cdk/docker_image_asset.rb +0 -46
  325. data/lib/pangea/resources/aws/cdk/file_asset.rb +0 -46
  326. data/lib/pangea/resources/aws/cdk/metadata.rb +0 -46
  327. data/lib/pangea/resources/aws/cdk/toolkit_stack_tags.rb +0 -48
  328. data/lib/pangea/resources/aws/cdk/tree_metadata.rb +0 -46
  329. data/lib/pangea/resources/aws/cdk.rb +0 -44
  330. data/lib/pangea/resources/aws/cleanrooms.rb +0 -145
  331. data/lib/pangea/resources/aws/cloudformation/CLAUDE.md +0 -98
  332. data/lib/pangea/resources/aws/cloudformation/hook_default_version.rb +0 -48
  333. data/lib/pangea/resources/aws/cloudformation/public_type_version.rb +0 -51
  334. data/lib/pangea/resources/aws/cloudformation/publisher.rb +0 -63
  335. data/lib/pangea/resources/aws/cloudformation/resource_default_version.rb +0 -48
  336. data/lib/pangea/resources/aws/cloudformation/resource_version.rb +0 -56
  337. data/lib/pangea/resources/aws/cloudformation/stack_instances.rb +0 -161
  338. data/lib/pangea/resources/aws/cloudformation/stack_set.rb +0 -195
  339. data/lib/pangea/resources/aws/cloudformation/stack_set_instance.rb +0 -151
  340. data/lib/pangea/resources/aws/cloudformation/type.rb +0 -167
  341. data/lib/pangea/resources/aws/cloudformation/type_activation.rb +0 -91
  342. data/lib/pangea/resources/aws/cloudformation/types.rb +0 -301
  343. data/lib/pangea/resources/aws/cloudformation/types.rbs +0 -125
  344. data/lib/pangea/resources/aws/cloudformation.rb +0 -48
  345. data/lib/pangea/resources/aws/code/codebuild_project_cache.rb +0 -55
  346. data/lib/pangea/resources/aws/code/codebuild_project_file_system_location.rb +0 -55
  347. data/lib/pangea/resources/aws/code/codebuild_source_credential.rb +0 -55
  348. data/lib/pangea/resources/aws/code/codebuild_webhook_filter.rb +0 -55
  349. data/lib/pangea/resources/aws/code/codecommit_approval_rule_template.rb +0 -55
  350. data/lib/pangea/resources/aws/code/codecommit_approval_rule_template_association.rb +0 -55
  351. data/lib/pangea/resources/aws/code/codedeploy_deployment_config.rb +0 -55
  352. data/lib/pangea/resources/aws/code/codedeploy_deployment_group_auto_rollback.rb +0 -55
  353. data/lib/pangea/resources/aws/code/codepipeline_custom_action_type.rb +0 -55
  354. data/lib/pangea/resources/aws/code/codepipeline_webhook.rb +0 -55
  355. data/lib/pangea/resources/aws/code/codestar_connection.rb +0 -85
  356. data/lib/pangea/resources/aws/code/codestar_notification_rule.rb +0 -55
  357. data/lib/pangea/resources/aws/code.rb +0 -52
  358. data/lib/pangea/resources/aws/comprehendmedical/jobs.rb +0 -320
  359. data/lib/pangea/resources/aws/comprehendmedical.rb +0 -28
  360. data/lib/pangea/resources/aws/config/aggregate_authorization.rb +0 -55
  361. data/lib/pangea/resources/aws/config/configuration_aggregator_organization.rb +0 -55
  362. data/lib/pangea/resources/aws/config/organization_conformance_pack.rb +0 -103
  363. data/lib/pangea/resources/aws/config/organization_custom_rule.rb +0 -55
  364. data/lib/pangea/resources/aws/config/organization_managed_rule.rb +0 -55
  365. data/lib/pangea/resources/aws/config/remediation_configuration.rb +0 -55
  366. data/lib/pangea/resources/aws/config/retention_configuration.rb +0 -55
  367. data/lib/pangea/resources/aws/config/stored_query.rb +0 -55
  368. data/lib/pangea/resources/aws/config.rb +0 -44
  369. data/lib/pangea/resources/aws/controltower/control.rb +0 -82
  370. data/lib/pangea/resources/aws/controltower/control_resource.rb +0 -55
  371. data/lib/pangea/resources/aws/controltower/control_resource.rbs +0 -15
  372. data/lib/pangea/resources/aws/controltower/enabled_control.rb +0 -74
  373. data/lib/pangea/resources/aws/controltower/enabled_control_resource.rb +0 -55
  374. data/lib/pangea/resources/aws/controltower/enabled_control_resource.rbs +0 -15
  375. data/lib/pangea/resources/aws/controltower/landing_zone.rb +0 -126
  376. data/lib/pangea/resources/aws/controltower/landing_zone_resource.rb +0 -55
  377. data/lib/pangea/resources/aws/controltower/landing_zone_resource.rbs +0 -18
  378. data/lib/pangea/resources/aws/controltower.rb +0 -34
  379. data/lib/pangea/resources/aws/data_pipeline/pipeline.rb +0 -55
  380. data/lib/pangea/resources/aws/data_pipeline/pipeline_definition.rb +0 -55
  381. data/lib/pangea/resources/aws/detective/CLAUDE.md +0 -668
  382. data/lib/pangea/resources/aws/detective/datasource_package.rb +0 -55
  383. data/lib/pangea/resources/aws/detective/finding.rb +0 -56
  384. data/lib/pangea/resources/aws/detective/graph.rb +0 -58
  385. data/lib/pangea/resources/aws/detective/indicator.rb +0 -56
  386. data/lib/pangea/resources/aws/detective/invitation_accepter.rb +0 -54
  387. data/lib/pangea/resources/aws/detective/member.rb +0 -59
  388. data/lib/pangea/resources/aws/detective/organization_admin_account.rb +0 -54
  389. data/lib/pangea/resources/aws/detective/organization_configuration.rb +0 -54
  390. data/lib/pangea/resources/aws/detective.rb +0 -154
  391. data/lib/pangea/resources/aws/ec2/ec2_ami_launch_permission.rb +0 -55
  392. data/lib/pangea/resources/aws/ec2/ec2_availability_zone_group.rb +0 -55
  393. data/lib/pangea/resources/aws/ec2/ec2_capacity_block_reservation.rb +0 -55
  394. data/lib/pangea/resources/aws/ec2/ec2_capacity_reservation.rb +0 -55
  395. data/lib/pangea/resources/aws/ec2/ec2_dedicated_host.rb +0 -55
  396. data/lib/pangea/resources/aws/ec2/ec2_fleet.rb +0 -55
  397. data/lib/pangea/resources/aws/ec2/ec2_host_resource_group_association.rb +0 -55
  398. data/lib/pangea/resources/aws/ec2/ec2_image_block_public_access.rb +0 -55
  399. data/lib/pangea/resources/aws/ec2/ec2_instance_metadata_defaults.rb +0 -55
  400. data/lib/pangea/resources/aws/ec2/ec2_serial_console_access.rb +0 -55
  401. data/lib/pangea/resources/aws/ec2/ec2_snapshot_block_public_access.rb +0 -55
  402. data/lib/pangea/resources/aws/ec2/ec2_spot_datafeed_subscription.rb +0 -55
  403. data/lib/pangea/resources/aws/ec2/ec2_spot_fleet_request.rb +0 -55
  404. data/lib/pangea/resources/aws/ec2/ec2_spot_instance_request.rb +0 -55
  405. data/lib/pangea/resources/aws/ec2/ec2_tag.rb +0 -55
  406. data/lib/pangea/resources/aws/ec2/ec2_transit_gateway_multicast_domain.rb +0 -55
  407. data/lib/pangea/resources/aws/ec2/ec2_transit_gateway_multicast_domain_association.rb +0 -55
  408. data/lib/pangea/resources/aws/ec2/ec2_transit_gateway_multicast_group_member.rb +0 -55
  409. data/lib/pangea/resources/aws/ec2.rb +0 -314
  410. data/lib/pangea/resources/aws/elasticache_extended.disabled/auth_token.rb +0 -50
  411. data/lib/pangea/resources/aws/elasticache_extended.disabled/cache_policy.rb +0 -57
  412. data/lib/pangea/resources/aws/elasticache_extended.disabled/global_replication_group.rb +0 -121
  413. data/lib/pangea/resources/aws/elasticache_extended.disabled/notification_topic.rb +0 -50
  414. data/lib/pangea/resources/aws/elasticache_extended.disabled/parameter_group_parameter.rb +0 -52
  415. data/lib/pangea/resources/aws/elasticache_extended.disabled/reserved_cache_node.rb +0 -55
  416. data/lib/pangea/resources/aws/elasticache_extended.disabled/serverless_cache.rb +0 -178
  417. data/lib/pangea/resources/aws/elasticache_extended.disabled/user_group.rb +0 -90
  418. data/lib/pangea/resources/aws/elasticache_extended.disabled/user_group_association.rb +0 -50
  419. data/lib/pangea/resources/aws/elasticache_extended.rb +0 -46
  420. data/lib/pangea/resources/aws/emrcontainers/job_run.rb +0 -134
  421. data/lib/pangea/resources/aws/emrcontainers/job_template.rb +0 -165
  422. data/lib/pangea/resources/aws/emrcontainers/managed_endpoint.rb +0 -126
  423. data/lib/pangea/resources/aws/emrcontainers/virtual_cluster.rb +0 -99
  424. data/lib/pangea/resources/aws/emrcontainers.rb +0 -34
  425. data/lib/pangea/resources/aws/extended_resources_CLAUDE.md +0 -470
  426. data/lib/pangea/resources/aws/frauddetector/detector.rb +0 -262
  427. data/lib/pangea/resources/aws/frauddetector.rb +0 -28
  428. data/lib/pangea/resources/aws/gamedev.rb +0 -178
  429. data/lib/pangea/resources/aws/gamelift.rb +0 -244
  430. data/lib/pangea/resources/aws/gamesparks.rb +0 -246
  431. data/lib/pangea/resources/aws/healthlake/fhir_datastore.rb +0 -220
  432. data/lib/pangea/resources/aws/healthlake.rb +0 -28
  433. data/lib/pangea/resources/aws/kinesisvideo/signaling_channel.rb +0 -55
  434. data/lib/pangea/resources/aws/kinesisvideo/stream.rb +0 -55
  435. data/lib/pangea/resources/aws/kinesisvideo.rb +0 -58
  436. data/lib/pangea/resources/aws/load_balancing/alb_target_group_attachment.rb +0 -55
  437. data/lib/pangea/resources/aws/load_balancing/elb_attachment.rb +0 -55
  438. data/lib/pangea/resources/aws/load_balancing/elb_service_account.rb +0 -55
  439. data/lib/pangea/resources/aws/load_balancing/lb_cookie_stickiness_policy.rb +0 -55
  440. data/lib/pangea/resources/aws/load_balancing/lb_ssl_negotiation_policy.rb +0 -55
  441. data/lib/pangea/resources/aws/load_balancing/lb_target_group_attachment.rb +0 -55
  442. data/lib/pangea/resources/aws/load_balancing/lb_trust_store.rb +0 -55
  443. data/lib/pangea/resources/aws/load_balancing/lb_trust_store_revocation.rb +0 -55
  444. data/lib/pangea/resources/aws/load_balancing/load_balancer_backend_server_policy.rb +0 -55
  445. data/lib/pangea/resources/aws/load_balancing/load_balancer_listener_policy.rb +0 -55
  446. data/lib/pangea/resources/aws/load_balancing/load_balancer_policy.rb +0 -55
  447. data/lib/pangea/resources/aws/load_balancing/proxy_protocol_policy.rb +0 -55
  448. data/lib/pangea/resources/aws/load_balancing.rb +0 -218
  449. data/lib/pangea/resources/aws/lookout/equipment.rb +0 -227
  450. data/lib/pangea/resources/aws/lookout/metrics.rb +0 -129
  451. data/lib/pangea/resources/aws/lookout.rb +0 -30
  452. data/lib/pangea/resources/aws/media_services_CLAUDE.md +0 -494
  453. data/lib/pangea/resources/aws/mediaconvert/job.rb +0 -55
  454. data/lib/pangea/resources/aws/mediaconvert/job_template.rb +0 -55
  455. data/lib/pangea/resources/aws/mediaconvert/preset.rb +0 -55
  456. data/lib/pangea/resources/aws/mediaconvert/queue.rb +0 -55
  457. data/lib/pangea/resources/aws/mediaconvert.rb +0 -90
  458. data/lib/pangea/resources/aws/medialive/channel.rb +0 -55
  459. data/lib/pangea/resources/aws/medialive/input.rb +0 -55
  460. data/lib/pangea/resources/aws/medialive/input_security_group.rb +0 -55
  461. data/lib/pangea/resources/aws/medialive/multiplex.rb +0 -55
  462. data/lib/pangea/resources/aws/medialive/multiplex_program.rb +0 -55
  463. data/lib/pangea/resources/aws/medialive.rb +0 -106
  464. data/lib/pangea/resources/aws/mediapackage/channel.rb +0 -55
  465. data/lib/pangea/resources/aws/mediapackage/origin_endpoint.rb +0 -55
  466. data/lib/pangea/resources/aws/mediapackage/packaging_configuration.rb +0 -55
  467. data/lib/pangea/resources/aws/mediapackage/packaging_group.rb +0 -55
  468. data/lib/pangea/resources/aws/mediapackage.rb +0 -90
  469. data/lib/pangea/resources/aws/migrationhub/progress_update_stream.rb +0 -69
  470. data/lib/pangea/resources/aws/migrationhub/progress_update_stream_resource.rb +0 -55
  471. data/lib/pangea/resources/aws/migrationhub/progress_update_stream_resource.rbs +0 -14
  472. data/lib/pangea/resources/aws/migrationhub.rb +0 -30
  473. data/lib/pangea/resources/aws/opensearch.disabled/CLAUDE.md +0 -480
  474. data/lib/pangea/resources/aws/opensearch.disabled/domain.rb +0 -59
  475. data/lib/pangea/resources/aws/opensearch.disabled/domain_endpoint.rb +0 -88
  476. data/lib/pangea/resources/aws/opensearch.disabled/domain_policy.rb +0 -89
  477. data/lib/pangea/resources/aws/opensearch.disabled/domain_saml_options.rb +0 -105
  478. data/lib/pangea/resources/aws/opensearch.disabled/inbound_connection.rb +0 -75
  479. data/lib/pangea/resources/aws/opensearch.disabled/outbound_connection.rb +0 -137
  480. data/lib/pangea/resources/aws/opensearch.disabled/package.rb +0 -102
  481. data/lib/pangea/resources/aws/opensearch.disabled/package_association.rb +0 -80
  482. data/lib/pangea/resources/aws/opensearch.disabled/serverless_access_policy.rb +0 -143
  483. data/lib/pangea/resources/aws/opensearch.disabled/serverless_collection.rb +0 -109
  484. data/lib/pangea/resources/aws/opensearch.disabled/serverless_security_policy.rb +0 -118
  485. data/lib/pangea/resources/aws/opensearch.disabled/vpc_endpoint.rb +0 -86
  486. data/lib/pangea/resources/aws/opensearch.rb.disabled +0 -36
  487. data/lib/pangea/resources/aws/private5g.rb +0 -132
  488. data/lib/pangea/resources/aws/robomaker.rb +0 -175
  489. data/lib/pangea/resources/aws/sagemaker/feature_group.rb +0 -146
  490. data/lib/pangea/resources/aws/sagemaker/model_package_group.rb +0 -79
  491. data/lib/pangea/resources/aws/sagemaker/pipeline.rb +0 -152
  492. data/lib/pangea/resources/aws/sagemaker.rb +0 -32
  493. data/lib/pangea/resources/aws/security_lake/CLAUDE.md +0 -932
  494. data/lib/pangea/resources/aws/security_lake/aws_log_source.rb +0 -55
  495. data/lib/pangea/resources/aws/security_lake/custom_log_source.rb +0 -55
  496. data/lib/pangea/resources/aws/security_lake/data_lake.rb +0 -55
  497. data/lib/pangea/resources/aws/security_lake/data_lake_exception_subscription.rb +0 -55
  498. data/lib/pangea/resources/aws/security_lake/organization_configuration.rb +0 -55
  499. data/lib/pangea/resources/aws/security_lake/subscriber.rb +0 -55
  500. data/lib/pangea/resources/aws/security_lake/subscriber_notification.rb +0 -55
  501. data/lib/pangea/resources/aws/security_lake.rb +0 -138
  502. data/lib/pangea/resources/aws/servicecatalog/constraint.rb +0 -93
  503. data/lib/pangea/resources/aws/servicecatalog/constraint_resource.rb +0 -55
  504. data/lib/pangea/resources/aws/servicecatalog/constraint_resource.rbs +0 -15
  505. data/lib/pangea/resources/aws/servicecatalog/portfolio.rb +0 -69
  506. data/lib/pangea/resources/aws/servicecatalog/portfolio_resource.rb +0 -55
  507. data/lib/pangea/resources/aws/servicecatalog/portfolio_resource.rbs +0 -15
  508. data/lib/pangea/resources/aws/servicecatalog/principal_portfolio_association.rb +0 -70
  509. data/lib/pangea/resources/aws/servicecatalog/principal_portfolio_association_resource.rb +0 -55
  510. data/lib/pangea/resources/aws/servicecatalog/principal_portfolio_association_resource.rbs +0 -14
  511. data/lib/pangea/resources/aws/servicecatalog/product.rb +0 -108
  512. data/lib/pangea/resources/aws/servicecatalog/product_portfolio_association.rb +0 -70
  513. data/lib/pangea/resources/aws/servicecatalog/product_portfolio_association_resource.rb +0 -55
  514. data/lib/pangea/resources/aws/servicecatalog/product_portfolio_association_resource.rbs +0 -14
  515. data/lib/pangea/resources/aws/servicecatalog/product_resource.rb +0 -55
  516. data/lib/pangea/resources/aws/servicecatalog/product_resource.rbs +0 -16
  517. data/lib/pangea/resources/aws/servicecatalog/provisioned_product.rb +0 -96
  518. data/lib/pangea/resources/aws/servicecatalog/provisioned_product_resource.rb +0 -55
  519. data/lib/pangea/resources/aws/servicecatalog/provisioned_product_resource.rbs +0 -18
  520. data/lib/pangea/resources/aws/servicecatalog/tag_option.rb +0 -75
  521. data/lib/pangea/resources/aws/servicecatalog/tag_option_resource.rb +0 -55
  522. data/lib/pangea/resources/aws/servicecatalog/tag_option_resource.rbs +0 -15
  523. data/lib/pangea/resources/aws/servicecatalog/tag_option_resource_association.rb +0 -65
  524. data/lib/pangea/resources/aws/servicecatalog/tag_option_resource_association_resource.rb +0 -55
  525. data/lib/pangea/resources/aws/servicecatalog/tag_option_resource_association_resource.rbs +0 -14
  526. data/lib/pangea/resources/aws/servicecatalog.rb +0 -44
  527. data/lib/pangea/resources/aws/sfn_extended.disabled/activity.rb +0 -79
  528. data/lib/pangea/resources/aws/sfn_extended.disabled/activity_task.rb +0 -51
  529. data/lib/pangea/resources/aws/sfn_extended.disabled/execution.rb +0 -53
  530. data/lib/pangea/resources/aws/sfn_extended.disabled/express_logging_configuration.rb +0 -54
  531. data/lib/pangea/resources/aws/sfn_extended.disabled/map_run.rb +0 -51
  532. data/lib/pangea/resources/aws/sfn_extended.disabled/state_machine_alias.rb +0 -99
  533. data/lib/pangea/resources/aws/sfn_extended.disabled/state_machine_version.rb +0 -52
  534. data/lib/pangea/resources/aws/sfn_extended.rb +0 -40
  535. data/lib/pangea/resources/aws/ssm/automation_execution.rb +0 -55
  536. data/lib/pangea/resources/aws/ssm/command_invocation.rb +0 -55
  537. data/lib/pangea/resources/aws/ssm/compliance_item.rb +0 -55
  538. data/lib/pangea/resources/aws/ssm/inventory_result_entity.rb +0 -55
  539. data/lib/pangea/resources/aws/ssm/maintenance_window_target.rb +0 -93
  540. data/lib/pangea/resources/aws/ssm/maintenance_window_target_resource.rb +0 -55
  541. data/lib/pangea/resources/aws/ssm/maintenance_window_target_resource.rbs +0 -15
  542. data/lib/pangea/resources/aws/ssm/maintenance_window_task.rb +0 -149
  543. data/lib/pangea/resources/aws/ssm/maintenance_window_task_resource.rb +0 -55
  544. data/lib/pangea/resources/aws/ssm/maintenance_window_task_resource.rbs +0 -15
  545. data/lib/pangea/resources/aws/ssm/ops_item.rb +0 -177
  546. data/lib/pangea/resources/aws/ssm/ops_metadata.rb +0 -55
  547. data/lib/pangea/resources/aws/ssm/patch_manager_patch_baseline_approval_rule.rb +0 -55
  548. data/lib/pangea/resources/aws/ssm/resource_compliance_item.rb +0 -55
  549. data/lib/pangea/resources/aws/ssm/session_manager_preferences.rb +0 -55
  550. data/lib/pangea/resources/aws/ssm/session_preferences.rb +0 -55
  551. data/lib/pangea/resources/aws/ssm.rb +0 -52
  552. data/lib/pangea/resources/aws/sumerian.rb +0 -223
  553. data/lib/pangea/resources/aws/supplychain.rb +0 -120
  554. data/lib/pangea/resources/aws/types/vpc.rb +0 -94
  555. data/lib/pangea/resources/aws/verifiedpermissions.rb +0 -101
  556. data/lib/pangea/resources/aws/vpc/default_network_acl.rb +0 -55
  557. data/lib/pangea/resources/aws/vpc/default_route_table.rb +0 -55
  558. data/lib/pangea/resources/aws/vpc/default_security_group.rb +0 -55
  559. data/lib/pangea/resources/aws/vpc/default_vpc_dhcp_options.rb +0 -55
  560. data/lib/pangea/resources/aws/vpc/vpc_dhcp_options_association.rb +0 -55
  561. data/lib/pangea/resources/aws/vpc/vpc_endpoint_connection_accepter.rb +0 -55
  562. data/lib/pangea/resources/aws/vpc/vpc_endpoint_connection_notification.rb +0 -55
  563. data/lib/pangea/resources/aws/vpc/vpc_endpoint_route_table_association.rb +0 -55
  564. data/lib/pangea/resources/aws/vpc/vpc_endpoint_service_allowed_principal.rb +0 -55
  565. data/lib/pangea/resources/aws/vpc/vpc_endpoint_subnet_association.rb +0 -55
  566. data/lib/pangea/resources/aws/vpc/vpc_network_performance_metric_subscription.rb +0 -55
  567. data/lib/pangea/resources/aws/vpc/vpc_peering_connection_accepter.rb +0 -55
  568. data/lib/pangea/resources/aws/vpc/vpc_peering_connection_options.rb +0 -55
  569. data/lib/pangea/resources/aws/vpc/vpc_security_group_egress_rule.rb +0 -55
  570. data/lib/pangea/resources/aws/vpc/vpc_security_group_ingress_rule.rb +0 -55
  571. data/lib/pangea/resources/aws/vpc.rb +0 -266
  572. data/lib/pangea/resources/aws/wellarchitected/workload.rb +0 -103
  573. data/lib/pangea/resources/aws/wellarchitected/workload_resource.rb +0 -55
  574. data/lib/pangea/resources/aws/wellarchitected/workload_resource.rbs +0 -15
  575. data/lib/pangea/resources/aws/wellarchitected.rb +0 -30
  576. data/lib/pangea/resources/aws.rb +0 -49
  577. data/lib/pangea/resources/aws_acm_certificate/CLAUDE.md +0 -290
  578. data/lib/pangea/resources/aws_acm_certificate/resource.rb +0 -120
  579. data/lib/pangea/resources/aws_acm_certificate/types.rb +0 -153
  580. data/lib/pangea/resources/aws_acm_certificate_validation/CLAUDE.md +0 -437
  581. data/lib/pangea/resources/aws_acm_certificate_validation/resource.rb +0 -75
  582. data/lib/pangea/resources/aws_acm_certificate_validation/types.rb +0 -145
  583. data/lib/pangea/resources/aws_acmpca_certificate_authority/resource.rb +0 -129
  584. data/lib/pangea/resources/aws_acmpca_certificate_authority/types.rb +0 -343
  585. data/lib/pangea/resources/aws_alb_target_group_attachment/resource.rb +0 -67
  586. data/lib/pangea/resources/aws_alb_target_group_attachment/types.rb +0 -46
  587. data/lib/pangea/resources/aws_ami/CLAUDE.md +0 -253
  588. data/lib/pangea/resources/aws_ami/resource.rb +0 -142
  589. data/lib/pangea/resources/aws_ami/types.rb +0 -196
  590. data/lib/pangea/resources/aws_api_gateway_api_key/resource.rb +0 -86
  591. data/lib/pangea/resources/aws_api_gateway_api_key/types.rb +0 -247
  592. data/lib/pangea/resources/aws_api_gateway_deployment/CLAUDE.md +0 -270
  593. data/lib/pangea/resources/aws_api_gateway_deployment/resource.rb +0 -197
  594. data/lib/pangea/resources/aws_api_gateway_deployment/types.rb +0 -199
  595. data/lib/pangea/resources/aws_api_gateway_integration/CLAUDE.md +0 -304
  596. data/lib/pangea/resources/aws_api_gateway_integration/resource.rb +0 -172
  597. data/lib/pangea/resources/aws_api_gateway_integration/types.rb +0 -257
  598. data/lib/pangea/resources/aws_api_gateway_method/CLAUDE.md +0 -235
  599. data/lib/pangea/resources/aws_api_gateway_method/resource.rb +0 -82
  600. data/lib/pangea/resources/aws_api_gateway_method/types.rb +0 -172
  601. data/lib/pangea/resources/aws_api_gateway_resource/CLAUDE.md +0 -215
  602. data/lib/pangea/resources/aws_api_gateway_resource/resource.rb +0 -62
  603. data/lib/pangea/resources/aws_api_gateway_resource/types.rb +0 -129
  604. data/lib/pangea/resources/aws_api_gateway_rest_api/CLAUDE.md +0 -152
  605. data/lib/pangea/resources/aws_api_gateway_rest_api/resource.rb +0 -95
  606. data/lib/pangea/resources/aws_api_gateway_rest_api/types.rb +0 -161
  607. data/lib/pangea/resources/aws_api_gateway_stage/CLAUDE.md +0 -308
  608. data/lib/pangea/resources/aws_api_gateway_stage/resource.rb +0 -335
  609. data/lib/pangea/resources/aws_api_gateway_stage/types.rb +0 -226
  610. data/lib/pangea/resources/aws_api_gateway_usage_plan/resource.rb +0 -122
  611. data/lib/pangea/resources/aws_api_gateway_usage_plan/types.rb +0 -312
  612. data/lib/pangea/resources/aws_api_gateway_usage_plan.rbs +0 -60
  613. data/lib/pangea/resources/aws_application_integration_README.md +0 -453
  614. data/lib/pangea/resources/aws_appstream_fleet/CLAUDE.md +0 -468
  615. data/lib/pangea/resources/aws_appstream_fleet/resource.rb +0 -121
  616. data/lib/pangea/resources/aws_appstream_fleet/types.rb +0 -223
  617. data/lib/pangea/resources/aws_appstream_image_builder/resource.rb +0 -34
  618. data/lib/pangea/resources/aws_appstream_stack/resource.rb +0 -34
  619. data/lib/pangea/resources/aws_appsync_datasource/CLAUDE.md +0 -479
  620. data/lib/pangea/resources/aws_appsync_datasource/resource.rb +0 -152
  621. data/lib/pangea/resources/aws_appsync_datasource/types.rb +0 -176
  622. data/lib/pangea/resources/aws_appsync_datasource.rbs +0 -129
  623. data/lib/pangea/resources/aws_appsync_graphql_api/CLAUDE.md +0 -325
  624. data/lib/pangea/resources/aws_appsync_graphql_api/resource.rb +0 -166
  625. data/lib/pangea/resources/aws_appsync_graphql_api/types.rb +0 -164
  626. data/lib/pangea/resources/aws_appsync_graphql_api.rbs +0 -134
  627. data/lib/pangea/resources/aws_appsync_resolver/CLAUDE.md +0 -459
  628. data/lib/pangea/resources/aws_appsync_resolver/resource.rb +0 -118
  629. data/lib/pangea/resources/aws_appsync_resolver/types.rb +0 -134
  630. data/lib/pangea/resources/aws_appsync_resolver.rbs +0 -86
  631. data/lib/pangea/resources/aws_athena_database/CLAUDE.md +0 -276
  632. data/lib/pangea/resources/aws_athena_database/resource.rb +0 -106
  633. data/lib/pangea/resources/aws_athena_database/types.rb +0 -192
  634. data/lib/pangea/resources/aws_athena_database/types.rbs +0 -38
  635. data/lib/pangea/resources/aws_athena_database.rbs +0 -10
  636. data/lib/pangea/resources/aws_athena_named_query/CLAUDE.md +0 -385
  637. data/lib/pangea/resources/aws_athena_named_query/resource.rb +0 -77
  638. data/lib/pangea/resources/aws_athena_named_query/types.rb +0 -248
  639. data/lib/pangea/resources/aws_athena_named_query/types.rbs +0 -42
  640. data/lib/pangea/resources/aws_athena_named_query.rbs +0 -10
  641. data/lib/pangea/resources/aws_athena_workgroup/CLAUDE.md +0 -315
  642. data/lib/pangea/resources/aws_athena_workgroup/resource.rb +0 -141
  643. data/lib/pangea/resources/aws_athena_workgroup/types.rb +0 -251
  644. data/lib/pangea/resources/aws_athena_workgroup/types.rbs +0 -38
  645. data/lib/pangea/resources/aws_athena_workgroup.rbs +0 -10
  646. data/lib/pangea/resources/aws_auditmanager_assessment.rbs +0 -35
  647. data/lib/pangea/resources/aws_autoscaling_attachment/CLAUDE.md +0 -226
  648. data/lib/pangea/resources/aws_autoscaling_attachment/resource.rb +0 -81
  649. data/lib/pangea/resources/aws_autoscaling_attachment/types.rb +0 -86
  650. data/lib/pangea/resources/aws_autoscaling_group/CLAUDE.md +0 -263
  651. data/lib/pangea/resources/aws_autoscaling_group/resource.rb +0 -175
  652. data/lib/pangea/resources/aws_autoscaling_group/types.rb +0 -236
  653. data/lib/pangea/resources/aws_autoscaling_group_tag/resource.rb +0 -67
  654. data/lib/pangea/resources/aws_autoscaling_group_tag/types.rb +0 -46
  655. data/lib/pangea/resources/aws_autoscaling_lifecycle_hook/CLAUDE.md +0 -357
  656. data/lib/pangea/resources/aws_autoscaling_lifecycle_hook/resource.rb +0 -67
  657. data/lib/pangea/resources/aws_autoscaling_lifecycle_hook/types.rb +0 -46
  658. data/lib/pangea/resources/aws_autoscaling_lifecycle_hook/types.rbs +0 -42
  659. data/lib/pangea/resources/aws_autoscaling_notification/CLAUDE.md +0 -405
  660. data/lib/pangea/resources/aws_autoscaling_notification/resource.rb +0 -67
  661. data/lib/pangea/resources/aws_autoscaling_notification/types.rb +0 -46
  662. data/lib/pangea/resources/aws_autoscaling_notification/types.rbs +0 -41
  663. data/lib/pangea/resources/aws_autoscaling_policy/CLAUDE.md +0 -278
  664. data/lib/pangea/resources/aws_autoscaling_policy/resource.rb +0 -168
  665. data/lib/pangea/resources/aws_autoscaling_policy/types.rb +0 -239
  666. data/lib/pangea/resources/aws_autoscaling_policy_step_adjustment/resource.rb +0 -67
  667. data/lib/pangea/resources/aws_autoscaling_policy_step_adjustment/types.rb +0 -46
  668. data/lib/pangea/resources/aws_autoscaling_policy_target_tracking_scaling_policy/resource.rb +0 -67
  669. data/lib/pangea/resources/aws_autoscaling_policy_target_tracking_scaling_policy/types.rb +0 -46
  670. data/lib/pangea/resources/aws_autoscaling_schedule/CLAUDE.md +0 -219
  671. data/lib/pangea/resources/aws_autoscaling_schedule/resource.rb +0 -67
  672. data/lib/pangea/resources/aws_autoscaling_schedule/types.rb +0 -46
  673. data/lib/pangea/resources/aws_autoscaling_schedule/types.rbs +0 -45
  674. data/lib/pangea/resources/aws_autoscaling_tag/CLAUDE.md +0 -443
  675. data/lib/pangea/resources/aws_autoscaling_tag/resource.rb +0 -119
  676. data/lib/pangea/resources/aws_autoscaling_tag/types.rb +0 -233
  677. data/lib/pangea/resources/aws_autoscaling_tag/types.rbs +0 -60
  678. data/lib/pangea/resources/aws_autoscaling_traffic_source_attachment/resource.rb +0 -67
  679. data/lib/pangea/resources/aws_autoscaling_traffic_source_attachment/types.rb +0 -46
  680. data/lib/pangea/resources/aws_autoscaling_warm_pool/resource.rb +0 -67
  681. data/lib/pangea/resources/aws_autoscaling_warm_pool/types.rb +0 -46
  682. data/lib/pangea/resources/aws_batch_compute_environment/CLAUDE.md +0 -571
  683. data/lib/pangea/resources/aws_batch_compute_environment/resource.rb +0 -158
  684. data/lib/pangea/resources/aws_batch_compute_environment/types.rb +0 -332
  685. data/lib/pangea/resources/aws_batch_compute_environment.rbs +0 -33
  686. data/lib/pangea/resources/aws_batch_job_definition/CLAUDE.md +0 -714
  687. data/lib/pangea/resources/aws_batch_job_definition/resource.rb +0 -253
  688. data/lib/pangea/resources/aws_batch_job_definition/types.rb +0 -548
  689. data/lib/pangea/resources/aws_batch_job_queue/CLAUDE.md +0 -585
  690. data/lib/pangea/resources/aws_batch_job_queue/resource.rb +0 -72
  691. data/lib/pangea/resources/aws_batch_job_queue/types.rb +0 -371
  692. data/lib/pangea/resources/aws_billing_service_account/resource.rb +0 -56
  693. data/lib/pangea/resources/aws_billing_service_account/types.rb +0 -43
  694. data/lib/pangea/resources/aws_blockchain_query/resource.rb +0 -122
  695. data/lib/pangea/resources/aws_blockchain_query/types.rb +0 -339
  696. data/lib/pangea/resources/aws_blockchain_token_balance/resource.rb +0 -94
  697. data/lib/pangea/resources/aws_blockchain_token_balance/types.rb +0 -319
  698. data/lib/pangea/resources/aws_braket_device/CLAUDE.md +0 -331
  699. data/lib/pangea/resources/aws_braket_device/resource.rb +0 -118
  700. data/lib/pangea/resources/aws_braket_device/types.rb +0 -242
  701. data/lib/pangea/resources/aws_braket_device_capabilities/resource.rb +0 -86
  702. data/lib/pangea/resources/aws_braket_device_capabilities/types.rb +0 -251
  703. data/lib/pangea/resources/aws_braket_job/resource.rb +0 -162
  704. data/lib/pangea/resources/aws_braket_job/types.rb +0 -265
  705. data/lib/pangea/resources/aws_braket_job_queue/resource.rb +0 -111
  706. data/lib/pangea/resources/aws_braket_job_queue/types.rb +0 -246
  707. data/lib/pangea/resources/aws_braket_local_simulator/resource.rb +0 -149
  708. data/lib/pangea/resources/aws_braket_local_simulator/types.rb +0 -301
  709. data/lib/pangea/resources/aws_braket_quantum_task/CLAUDE.md +0 -188
  710. data/lib/pangea/resources/aws_braket_quantum_task/resource.rb +0 -90
  711. data/lib/pangea/resources/aws_braket_quantum_task/types.rb +0 -171
  712. data/lib/pangea/resources/aws_budgets_budget/CLAUDE.md +0 -304
  713. data/lib/pangea/resources/aws_budgets_budget/resource.rb +0 -199
  714. data/lib/pangea/resources/aws_budgets_budget/types.rb +0 -337
  715. data/lib/pangea/resources/aws_budgets_budget_action/CLAUDE.md +0 -357
  716. data/lib/pangea/resources/aws_budgets_budget_action/resource.rb +0 -201
  717. data/lib/pangea/resources/aws_budgets_budget_action/types.rb +0 -417
  718. data/lib/pangea/resources/aws_ce_anomaly_detector/resource.rb +0 -65
  719. data/lib/pangea/resources/aws_ce_anomaly_detector/types.rb +0 -72
  720. data/lib/pangea/resources/aws_ce_anomaly_subscription/resource.rb +0 -62
  721. data/lib/pangea/resources/aws_ce_anomaly_subscription/types.rb +0 -59
  722. data/lib/pangea/resources/aws_ce_cost_category/resource.rb +0 -204
  723. data/lib/pangea/resources/aws_ce_cost_category/types.rb +0 -399
  724. data/lib/pangea/resources/aws_cloudformation_stack/CLAUDE.md +0 -244
  725. data/lib/pangea/resources/aws_cloudformation_stack/resource.rb +0 -139
  726. data/lib/pangea/resources/aws_cloudformation_stack/types.rb +0 -244
  727. data/lib/pangea/resources/aws_cloudformation_stack/types.rbs +0 -46
  728. data/lib/pangea/resources/aws_cloudformation_stack_set/CLAUDE.md +0 -309
  729. data/lib/pangea/resources/aws_cloudformation_stack_set/resource.rb +0 -152
  730. data/lib/pangea/resources/aws_cloudformation_stack_set/types.rb +0 -311
  731. data/lib/pangea/resources/aws_cloudformation_stack_set/types.rbs +0 -48
  732. data/lib/pangea/resources/aws_cloudfront_cache_policy/resource.rb +0 -84
  733. data/lib/pangea/resources/aws_cloudfront_cache_policy/types.rb +0 -56
  734. data/lib/pangea/resources/aws_cloudfront_distribution/CLAUDE.md +0 -62
  735. data/lib/pangea/resources/aws_cloudfront_distribution/resource.rb +0 -251
  736. data/lib/pangea/resources/aws_cloudfront_distribution/types.rb +0 -415
  737. data/lib/pangea/resources/aws_cloudfront_key_group/resource.rb +0 -71
  738. data/lib/pangea/resources/aws_cloudfront_key_group/types.rb +0 -191
  739. data/lib/pangea/resources/aws_cloudfront_origin_access_control/resource.rb +0 -68
  740. data/lib/pangea/resources/aws_cloudfront_origin_access_control/types.rb +0 -100
  741. data/lib/pangea/resources/aws_cloudfront_origin_request_policy/resource.rb +0 -76
  742. data/lib/pangea/resources/aws_cloudfront_origin_request_policy/types.rb +0 -49
  743. data/lib/pangea/resources/aws_cloudfront_public_key/resource.rb +0 -69
  744. data/lib/pangea/resources/aws_cloudfront_public_key/types.rb +0 -177
  745. data/lib/pangea/resources/aws_cloudfront_public_key.rbs +0 -30
  746. data/lib/pangea/resources/aws_cloudfront_response_headers_policy/resource.rb +0 -175
  747. data/lib/pangea/resources/aws_cloudfront_response_headers_policy/types.rb +0 -385
  748. data/lib/pangea/resources/aws_cloudtrail/resource.rb +0 -133
  749. data/lib/pangea/resources/aws_cloudtrail/types.rb +0 -364
  750. data/lib/pangea/resources/aws_cloudtrail.rbs +0 -10
  751. data/lib/pangea/resources/aws_cloudtrail_event_data_store/resource.rb +0 -64
  752. data/lib/pangea/resources/aws_cloudtrail_event_data_store/types.rb +0 -73
  753. data/lib/pangea/resources/aws_cloudtrail_event_data_store.rbs +0 -10
  754. data/lib/pangea/resources/aws_cloudwatch_anomaly_detector/resource.rb +0 -103
  755. data/lib/pangea/resources/aws_cloudwatch_composite_alarm/CLAUDE.md +0 -288
  756. data/lib/pangea/resources/aws_cloudwatch_composite_alarm/resource.rb +0 -133
  757. data/lib/pangea/resources/aws_cloudwatch_composite_alarm/types.rb +0 -134
  758. data/lib/pangea/resources/aws_cloudwatch_dashboard/CLAUDE.md +0 -342
  759. data/lib/pangea/resources/aws_cloudwatch_dashboard/resource.rb +0 -156
  760. data/lib/pangea/resources/aws_cloudwatch_dashboard/types.rb +0 -302
  761. data/lib/pangea/resources/aws_cloudwatch_event_rule/CLAUDE.md +0 -568
  762. data/lib/pangea/resources/aws_cloudwatch_event_rule/resource.rb +0 -143
  763. data/lib/pangea/resources/aws_cloudwatch_event_rule/types.rb +0 -181
  764. data/lib/pangea/resources/aws_cloudwatch_event_target/CLAUDE.md +0 -625
  765. data/lib/pangea/resources/aws_cloudwatch_event_target/resource.rb +0 -226
  766. data/lib/pangea/resources/aws_cloudwatch_event_target/types.rb +0 -231
  767. data/lib/pangea/resources/aws_cloudwatch_insight_rule/resource.rb +0 -101
  768. data/lib/pangea/resources/aws_cloudwatch_log_data_protection_policy/resource.rb +0 -99
  769. data/lib/pangea/resources/aws_cloudwatch_log_destination/CLAUDE.md +0 -388
  770. data/lib/pangea/resources/aws_cloudwatch_log_destination/resource.rb +0 -103
  771. data/lib/pangea/resources/aws_cloudwatch_log_destination/types.rb +0 -103
  772. data/lib/pangea/resources/aws_cloudwatch_log_destination_policy/CLAUDE.md +0 -479
  773. data/lib/pangea/resources/aws_cloudwatch_log_destination_policy/resource.rb +0 -132
  774. data/lib/pangea/resources/aws_cloudwatch_log_destination_policy/types.rb +0 -130
  775. data/lib/pangea/resources/aws_cloudwatch_log_group/CLAUDE.md +0 -175
  776. data/lib/pangea/resources/aws_cloudwatch_log_group/resource.rb +0 -120
  777. data/lib/pangea/resources/aws_cloudwatch_log_group/types.rb +0 -138
  778. data/lib/pangea/resources/aws_cloudwatch_log_metric_filter/CLAUDE.md +0 -502
  779. data/lib/pangea/resources/aws_cloudwatch_log_metric_filter/resource.rb +0 -130
  780. data/lib/pangea/resources/aws_cloudwatch_log_metric_filter/types.rb +0 -139
  781. data/lib/pangea/resources/aws_cloudwatch_log_resource_policy/resource.rb +0 -82
  782. data/lib/pangea/resources/aws_cloudwatch_log_stream/CLAUDE.md +0 -260
  783. data/lib/pangea/resources/aws_cloudwatch_log_stream/resource.rb +0 -90
  784. data/lib/pangea/resources/aws_cloudwatch_log_stream/types.rb +0 -130
  785. data/lib/pangea/resources/aws_cloudwatch_log_subscription_filter/CLAUDE.md +0 -473
  786. data/lib/pangea/resources/aws_cloudwatch_log_subscription_filter/resource.rb +0 -105
  787. data/lib/pangea/resources/aws_cloudwatch_log_subscription_filter/types.rb +0 -142
  788. data/lib/pangea/resources/aws_cloudwatch_metric_alarm/CLAUDE.md +0 -317
  789. data/lib/pangea/resources/aws_cloudwatch_metric_alarm/resource.rb +0 -198
  790. data/lib/pangea/resources/aws_cloudwatch_metric_alarm/types.rb +0 -242
  791. data/lib/pangea/resources/aws_cloudwatch_query_definition/resource.rb +0 -93
  792. data/lib/pangea/resources/aws_codeartifact_domain/CLAUDE.md +0 -54
  793. data/lib/pangea/resources/aws_codeartifact_domain/resource.rb +0 -126
  794. data/lib/pangea/resources/aws_codeartifact_domain/types.rb +0 -131
  795. data/lib/pangea/resources/aws_codeartifact_repository/CLAUDE.md +0 -55
  796. data/lib/pangea/resources/aws_codeartifact_repository/resource.rb +0 -176
  797. data/lib/pangea/resources/aws_codeartifact_repository/types.rb +0 -196
  798. data/lib/pangea/resources/aws_codebuild_project/CLAUDE.md +0 -304
  799. data/lib/pangea/resources/aws_codebuild_project/resource.rb +0 -254
  800. data/lib/pangea/resources/aws_codebuild_project/types.rb +0 -288
  801. data/lib/pangea/resources/aws_codebuild_project/types.rbs +0 -140
  802. data/lib/pangea/resources/aws_codebuild_project.rbs +0 -10
  803. data/lib/pangea/resources/aws_codecommit_repository/CLAUDE.md +0 -150
  804. data/lib/pangea/resources/aws_codecommit_repository/resource.rb +0 -100
  805. data/lib/pangea/resources/aws_codecommit_repository/types.rb +0 -122
  806. data/lib/pangea/resources/aws_codecommit_repository/types.rbs +0 -55
  807. data/lib/pangea/resources/aws_codecommit_repository.rbs +0 -10
  808. data/lib/pangea/resources/aws_codedeploy_application/CLAUDE.md +0 -312
  809. data/lib/pangea/resources/aws_codedeploy_application/resource.rb +0 -81
  810. data/lib/pangea/resources/aws_codedeploy_application/types.rb +0 -98
  811. data/lib/pangea/resources/aws_codedeploy_application.rbs +0 -10
  812. data/lib/pangea/resources/aws_codedeploy_deployment_config/CLAUDE.md +0 -354
  813. data/lib/pangea/resources/aws_codedeploy_deployment_config/resource.rb +0 -97
  814. data/lib/pangea/resources/aws_codedeploy_deployment_config/types.rb +0 -143
  815. data/lib/pangea/resources/aws_codedeploy_deployment_config.rbs +0 -10
  816. data/lib/pangea/resources/aws_codedeploy_deployment_group/CLAUDE.md +0 -342
  817. data/lib/pangea/resources/aws_codedeploy_deployment_group/resource.rb +0 -224
  818. data/lib/pangea/resources/aws_codedeploy_deployment_group/types.rb +0 -249
  819. data/lib/pangea/resources/aws_codedeploy_deployment_group.rbs +0 -10
  820. data/lib/pangea/resources/aws_codepipeline/CLAUDE.md +0 -592
  821. data/lib/pangea/resources/aws_codepipeline/resource.rb +0 -126
  822. data/lib/pangea/resources/aws_codepipeline/types.rb +0 -212
  823. data/lib/pangea/resources/aws_codepipeline.rbs +0 -10
  824. data/lib/pangea/resources/aws_codepipeline_webhook/CLAUDE.md +0 -449
  825. data/lib/pangea/resources/aws_codepipeline_webhook/resource.rb +0 -94
  826. data/lib/pangea/resources/aws_codepipeline_webhook/types.rb +0 -134
  827. data/lib/pangea/resources/aws_codepipeline_webhook.rbs +0 -10
  828. data/lib/pangea/resources/aws_codestar_connection/CLAUDE.md +0 -55
  829. data/lib/pangea/resources/aws_codestar_connection/resource.rb +0 -136
  830. data/lib/pangea/resources/aws_codestar_connection/types.rb +0 -191
  831. data/lib/pangea/resources/aws_cognito_identity_pool/CLAUDE.md +0 -712
  832. data/lib/pangea/resources/aws_cognito_identity_pool/resource.rb +0 -110
  833. data/lib/pangea/resources/aws_cognito_identity_pool/types.rb +0 -343
  834. data/lib/pangea/resources/aws_cognito_identity_provider/resource.rb +0 -91
  835. data/lib/pangea/resources/aws_cognito_identity_provider/types.rb +0 -480
  836. data/lib/pangea/resources/aws_cognito_user/resource.rb +0 -81
  837. data/lib/pangea/resources/aws_cognito_user/types.rb +0 -145
  838. data/lib/pangea/resources/aws_cognito_user_group/resource.rb +0 -64
  839. data/lib/pangea/resources/aws_cognito_user_group/types.rb +0 -130
  840. data/lib/pangea/resources/aws_cognito_user_pool/CLAUDE.md +0 -431
  841. data/lib/pangea/resources/aws_cognito_user_pool/resource.rb +0 -251
  842. data/lib/pangea/resources/aws_cognito_user_pool/types.rb +0 -359
  843. data/lib/pangea/resources/aws_cognito_user_pool_client/CLAUDE.md +0 -542
  844. data/lib/pangea/resources/aws_cognito_user_pool_client/resource.rb +0 -139
  845. data/lib/pangea/resources/aws_cognito_user_pool_client/types.rb +0 -394
  846. data/lib/pangea/resources/aws_cognito_user_pool_domain/CLAUDE.md +0 -524
  847. data/lib/pangea/resources/aws_cognito_user_pool_domain/resource.rb +0 -71
  848. data/lib/pangea/resources/aws_cognito_user_pool_domain/types.rb +0 -252
  849. data/lib/pangea/resources/aws_config_config_rule/CLAUDE.md +0 -381
  850. data/lib/pangea/resources/aws_config_config_rule/resource.rb +0 -190
  851. data/lib/pangea/resources/aws_config_config_rule/types.rb +0 -231
  852. data/lib/pangea/resources/aws_config_config_rule.rbs +0 -10
  853. data/lib/pangea/resources/aws_config_configuration_recorder/CLAUDE.md +0 -247
  854. data/lib/pangea/resources/aws_config_configuration_recorder/resource.rb +0 -139
  855. data/lib/pangea/resources/aws_config_configuration_recorder/types.rb +0 -156
  856. data/lib/pangea/resources/aws_config_configuration_recorder.rbs +0 -10
  857. data/lib/pangea/resources/aws_config_delivery_channel/CLAUDE.md +0 -290
  858. data/lib/pangea/resources/aws_config_delivery_channel/resource.rb +0 -141
  859. data/lib/pangea/resources/aws_config_delivery_channel/types.rb +0 -195
  860. data/lib/pangea/resources/aws_config_delivery_channel.rbs +0 -10
  861. data/lib/pangea/resources/aws_config_remediation_configuration/resource.rb +0 -77
  862. data/lib/pangea/resources/aws_config_remediation_configuration/types.rb +0 -119
  863. data/lib/pangea/resources/aws_config_remediation_configuration.rbs +0 -10
  864. data/lib/pangea/resources/aws_cur_report_definition/resource.rb +0 -63
  865. data/lib/pangea/resources/aws_cur_report_definition/types.rb +0 -80
  866. data/lib/pangea/resources/aws_customer_gateway/CLAUDE.md +0 -458
  867. data/lib/pangea/resources/aws_customer_gateway/resource.rb +0 -93
  868. data/lib/pangea/resources/aws_customer_gateway/types.rb +0 -117
  869. data/lib/pangea/resources/aws_db_cluster_snapshot/resource.rb +0 -95
  870. data/lib/pangea/resources/aws_db_cluster_snapshot/types.rb +0 -245
  871. data/lib/pangea/resources/aws_db_instance/CLAUDE.md +0 -407
  872. data/lib/pangea/resources/aws_db_instance/resource.rb +0 -126
  873. data/lib/pangea/resources/aws_db_instance/types.rb +0 -260
  874. data/lib/pangea/resources/aws_db_parameter_group/CLAUDE.md +0 -285
  875. data/lib/pangea/resources/aws_db_parameter_group/resource.rb +0 -94
  876. data/lib/pangea/resources/aws_db_parameter_group/types.rb +0 -300
  877. data/lib/pangea/resources/aws_db_snapshot/resource.rb +0 -92
  878. data/lib/pangea/resources/aws_db_snapshot/types.rb +0 -175
  879. data/lib/pangea/resources/aws_db_subnet_group/CLAUDE.md +0 -189
  880. data/lib/pangea/resources/aws_db_subnet_group/resource.rb +0 -77
  881. data/lib/pangea/resources/aws_db_subnet_group/types.rb +0 -102
  882. data/lib/pangea/resources/aws_default_network_acl/resource.rb +0 -67
  883. data/lib/pangea/resources/aws_default_network_acl/types.rb +0 -46
  884. data/lib/pangea/resources/aws_default_route_table/resource.rb +0 -67
  885. data/lib/pangea/resources/aws_default_route_table/types.rb +0 -46
  886. data/lib/pangea/resources/aws_default_security_group/resource.rb +0 -67
  887. data/lib/pangea/resources/aws_default_security_group/types.rb +0 -46
  888. data/lib/pangea/resources/aws_default_vpc_dhcp_options/resource.rb +0 -67
  889. data/lib/pangea/resources/aws_default_vpc_dhcp_options/types.rb +0 -46
  890. data/lib/pangea/resources/aws_detective_graph.rbs +0 -29
  891. data/lib/pangea/resources/aws_device_farm_project/CLAUDE.md +0 -299
  892. data/lib/pangea/resources/aws_device_farm_project/resource.rb +0 -78
  893. data/lib/pangea/resources/aws_device_farm_project/types.rb +0 -51
  894. data/lib/pangea/resources/aws_device_farm_project.rbs +0 -33
  895. data/lib/pangea/resources/aws_directory_service_directory/resource.rb +0 -34
  896. data/lib/pangea/resources/aws_docdb_certificate/CLAUDE.md +0 -96
  897. data/lib/pangea/resources/aws_docdb_certificate/resource.rb +0 -74
  898. data/lib/pangea/resources/aws_docdb_certificate/types.rb +0 -48
  899. data/lib/pangea/resources/aws_docdb_cluster/CLAUDE.md +0 -96
  900. data/lib/pangea/resources/aws_docdb_cluster/resource.rb +0 -96
  901. data/lib/pangea/resources/aws_docdb_cluster/types.rb +0 -70
  902. data/lib/pangea/resources/aws_docdb_cluster_endpoint/CLAUDE.md +0 -96
  903. data/lib/pangea/resources/aws_docdb_cluster_endpoint/resource.rb +0 -74
  904. data/lib/pangea/resources/aws_docdb_cluster_endpoint/types.rb +0 -52
  905. data/lib/pangea/resources/aws_docdb_cluster_instance/CLAUDE.md +0 -96
  906. data/lib/pangea/resources/aws_docdb_cluster_instance/resource.rb +0 -89
  907. data/lib/pangea/resources/aws_docdb_cluster_instance/types.rb +0 -61
  908. data/lib/pangea/resources/aws_docdb_cluster_parameter_group/CLAUDE.md +0 -96
  909. data/lib/pangea/resources/aws_docdb_cluster_parameter_group/resource.rb +0 -71
  910. data/lib/pangea/resources/aws_docdb_cluster_parameter_group/types.rb +0 -51
  911. data/lib/pangea/resources/aws_docdb_cluster_snapshot/CLAUDE.md +0 -96
  912. data/lib/pangea/resources/aws_docdb_cluster_snapshot/resource.rb +0 -80
  913. data/lib/pangea/resources/aws_docdb_cluster_snapshot/types.rb +0 -49
  914. data/lib/pangea/resources/aws_docdb_event_subscription/CLAUDE.md +0 -96
  915. data/lib/pangea/resources/aws_docdb_event_subscription/resource.rb +0 -74
  916. data/lib/pangea/resources/aws_docdb_event_subscription/types.rb +0 -53
  917. data/lib/pangea/resources/aws_docdb_global_cluster/CLAUDE.md +0 -96
  918. data/lib/pangea/resources/aws_docdb_global_cluster/resource.rb +0 -76
  919. data/lib/pangea/resources/aws_docdb_global_cluster/types.rb +0 -54
  920. data/lib/pangea/resources/aws_docdb_subnet_group/CLAUDE.md +0 -96
  921. data/lib/pangea/resources/aws_docdb_subnet_group/resource.rb +0 -70
  922. data/lib/pangea/resources/aws_docdb_subnet_group/types.rb +0 -50
  923. data/lib/pangea/resources/aws_drs_launch_configuration_template/resource.rb +0 -183
  924. data/lib/pangea/resources/aws_drs_replication_configuration_template/resource.rb +0 -156
  925. data/lib/pangea/resources/aws_dynamodb_global_table/CLAUDE.md +0 -184
  926. data/lib/pangea/resources/aws_dynamodb_global_table/resource.rb +0 -134
  927. data/lib/pangea/resources/aws_dynamodb_global_table/types.rb +0 -272
  928. data/lib/pangea/resources/aws_dynamodb_global_table/types.rbs +0 -39
  929. data/lib/pangea/resources/aws_dynamodb_kinesis_streaming_destination/resource.rb +0 -70
  930. data/lib/pangea/resources/aws_dynamodb_kinesis_streaming_destination/types.rb +0 -76
  931. data/lib/pangea/resources/aws_dynamodb_table/CLAUDE.md +0 -130
  932. data/lib/pangea/resources/aws_dynamodb_table/resource.rb +0 -224
  933. data/lib/pangea/resources/aws_dynamodb_table/types.rb +0 -408
  934. data/lib/pangea/resources/aws_dynamodb_table/types.rbs +0 -55
  935. data/lib/pangea/resources/aws_dynamodb_table_export/resource.rb +0 -85
  936. data/lib/pangea/resources/aws_dynamodb_table_export/types.rb +0 -98
  937. data/lib/pangea/resources/aws_ebs_volume/CLAUDE.md +0 -275
  938. data/lib/pangea/resources/aws_ebs_volume/resource.rb +0 -114
  939. data/lib/pangea/resources/aws_ebs_volume/types.rb +0 -250
  940. data/lib/pangea/resources/aws_ec2_ami_launch_permission/resource.rb +0 -67
  941. data/lib/pangea/resources/aws_ec2_ami_launch_permission/types.rb +0 -46
  942. data/lib/pangea/resources/aws_ec2_availability_zone_group/resource.rb +0 -67
  943. data/lib/pangea/resources/aws_ec2_availability_zone_group/types.rb +0 -46
  944. data/lib/pangea/resources/aws_ec2_capacity_block_reservation/resource.rb +0 -67
  945. data/lib/pangea/resources/aws_ec2_capacity_block_reservation/types.rb +0 -46
  946. data/lib/pangea/resources/aws_ec2_capacity_reservation/resource.rb +0 -67
  947. data/lib/pangea/resources/aws_ec2_capacity_reservation/types.rb +0 -46
  948. data/lib/pangea/resources/aws_ec2_dedicated_host/resource.rb +0 -67
  949. data/lib/pangea/resources/aws_ec2_dedicated_host/types.rb +0 -46
  950. data/lib/pangea/resources/aws_ec2_fleet/resource.rb +0 -67
  951. data/lib/pangea/resources/aws_ec2_fleet/types.rb +0 -46
  952. data/lib/pangea/resources/aws_ec2_host_resource_group_association/resource.rb +0 -67
  953. data/lib/pangea/resources/aws_ec2_host_resource_group_association/types.rb +0 -46
  954. data/lib/pangea/resources/aws_ec2_image_block_public_access/resource.rb +0 -67
  955. data/lib/pangea/resources/aws_ec2_image_block_public_access/types.rb +0 -46
  956. data/lib/pangea/resources/aws_ec2_instance_metadata_defaults/resource.rb +0 -67
  957. data/lib/pangea/resources/aws_ec2_instance_metadata_defaults/types.rb +0 -46
  958. data/lib/pangea/resources/aws_ec2_serial_console_access/resource.rb +0 -67
  959. data/lib/pangea/resources/aws_ec2_serial_console_access/types.rb +0 -46
  960. data/lib/pangea/resources/aws_ec2_snapshot_block_public_access/resource.rb +0 -67
  961. data/lib/pangea/resources/aws_ec2_snapshot_block_public_access/types.rb +0 -46
  962. data/lib/pangea/resources/aws_ec2_spot_datafeed_subscription/resource.rb +0 -67
  963. data/lib/pangea/resources/aws_ec2_spot_datafeed_subscription/types.rb +0 -46
  964. data/lib/pangea/resources/aws_ec2_spot_fleet_request/resource.rb +0 -67
  965. data/lib/pangea/resources/aws_ec2_spot_fleet_request/types.rb +0 -46
  966. data/lib/pangea/resources/aws_ec2_spot_instance_request/resource.rb +0 -67
  967. data/lib/pangea/resources/aws_ec2_spot_instance_request/types.rb +0 -46
  968. data/lib/pangea/resources/aws_ec2_tag/resource.rb +0 -67
  969. data/lib/pangea/resources/aws_ec2_tag/types.rb +0 -46
  970. data/lib/pangea/resources/aws_ec2_transit_gateway/CLAUDE.md +0 -220
  971. data/lib/pangea/resources/aws_ec2_transit_gateway/resource.rb +0 -114
  972. data/lib/pangea/resources/aws_ec2_transit_gateway/types.rb +0 -124
  973. data/lib/pangea/resources/aws_ec2_transit_gateway.rbs +0 -29
  974. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_domain/resource.rb +0 -67
  975. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_domain/types.rb +0 -46
  976. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_domain_association/resource.rb +0 -67
  977. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_domain_association/types.rb +0 -46
  978. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_group_member/resource.rb +0 -67
  979. data/lib/pangea/resources/aws_ec2_transit_gateway_multicast_group_member/types.rb +0 -46
  980. data/lib/pangea/resources/aws_ec2_transit_gateway_route/CLAUDE.md +0 -458
  981. data/lib/pangea/resources/aws_ec2_transit_gateway_route/resource.rb +0 -81
  982. data/lib/pangea/resources/aws_ec2_transit_gateway_route/types.rb +0 -233
  983. data/lib/pangea/resources/aws_ec2_transit_gateway_route.rbs +0 -27
  984. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table/CLAUDE.md +0 -384
  985. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table/resource.rb +0 -77
  986. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table/types.rb +0 -171
  987. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table.rbs +0 -24
  988. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_association/CLAUDE.md +0 -409
  989. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_association/resource.rb +0 -74
  990. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_association/types.rb +0 -167
  991. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_association.rbs +0 -25
  992. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_propagation/CLAUDE.md +0 -433
  993. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_propagation/resource.rb +0 -70
  994. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_propagation/types.rb +0 -213
  995. data/lib/pangea/resources/aws_ec2_transit_gateway_route_table_propagation.rbs +0 -25
  996. data/lib/pangea/resources/aws_ec2_transit_gateway_vpc_attachment/CLAUDE.md +0 -326
  997. data/lib/pangea/resources/aws_ec2_transit_gateway_vpc_attachment/resource.rb +0 -101
  998. data/lib/pangea/resources/aws_ec2_transit_gateway_vpc_attachment/types.rb +0 -152
  999. data/lib/pangea/resources/aws_ec2_transit_gateway_vpc_attachment.rbs +0 -30
  1000. data/lib/pangea/resources/aws_ecr_lifecycle_policy/CLAUDE.md +0 -56
  1001. data/lib/pangea/resources/aws_ecr_lifecycle_policy/resource.rb +0 -164
  1002. data/lib/pangea/resources/aws_ecr_lifecycle_policy/types.rb +0 -220
  1003. data/lib/pangea/resources/aws_ecr_replication_configuration/CLAUDE.md +0 -55
  1004. data/lib/pangea/resources/aws_ecr_replication_configuration/resource.rb +0 -147
  1005. data/lib/pangea/resources/aws_ecr_replication_configuration/types.rb +0 -169
  1006. data/lib/pangea/resources/aws_ecr_repository/CLAUDE.md +0 -54
  1007. data/lib/pangea/resources/aws_ecr_repository/resource.rb +0 -143
  1008. data/lib/pangea/resources/aws_ecr_repository/types.rb +0 -128
  1009. data/lib/pangea/resources/aws_ecr_repository_policy/CLAUDE.md +0 -55
  1010. data/lib/pangea/resources/aws_ecr_repository_policy/resource.rb +0 -133
  1011. data/lib/pangea/resources/aws_ecr_repository_policy/types.rb +0 -193
  1012. data/lib/pangea/resources/aws_ecs_capacity_provider/resource.rb +0 -106
  1013. data/lib/pangea/resources/aws_ecs_capacity_provider/types.rb +0 -114
  1014. data/lib/pangea/resources/aws_ecs_cluster/CLAUDE.md +0 -218
  1015. data/lib/pangea/resources/aws_ecs_cluster/resource.rb +0 -130
  1016. data/lib/pangea/resources/aws_ecs_cluster/types.rb +0 -155
  1017. data/lib/pangea/resources/aws_ecs_cluster_capacity_providers/CLAUDE.md +0 -191
  1018. data/lib/pangea/resources/aws_ecs_cluster_capacity_providers/resource.rb +0 -79
  1019. data/lib/pangea/resources/aws_ecs_cluster_capacity_providers/types.rb +0 -171
  1020. data/lib/pangea/resources/aws_ecs_service/CLAUDE.md +0 -256
  1021. data/lib/pangea/resources/aws_ecs_service/resource.rb +0 -242
  1022. data/lib/pangea/resources/aws_ecs_service/types.rb +0 -327
  1023. data/lib/pangea/resources/aws_ecs_task_definition/CLAUDE.md +0 -281
  1024. data/lib/pangea/resources/aws_ecs_task_definition/resource.rb +0 -318
  1025. data/lib/pangea/resources/aws_ecs_task_definition/types.rb +0 -439
  1026. data/lib/pangea/resources/aws_ecs_task_definition/types_old.rb +0 -439
  1027. data/lib/pangea/resources/aws_efs_access_point/CLAUDE.md +0 -504
  1028. data/lib/pangea/resources/aws_efs_access_point/resource.rb +0 -77
  1029. data/lib/pangea/resources/aws_efs_access_point/types.rb +0 -185
  1030. data/lib/pangea/resources/aws_efs_file_system/CLAUDE.md +0 -279
  1031. data/lib/pangea/resources/aws_efs_file_system/resource.rb +0 -80
  1032. data/lib/pangea/resources/aws_efs_file_system/types.rb +0 -106
  1033. data/lib/pangea/resources/aws_efs_mount_target/CLAUDE.md +0 -361
  1034. data/lib/pangea/resources/aws_efs_mount_target/resource.rb +0 -68
  1035. data/lib/pangea/resources/aws_efs_mount_target/types.rb +0 -100
  1036. data/lib/pangea/resources/aws_eip/CLAUDE.md +0 -325
  1037. data/lib/pangea/resources/aws_eip/resource.rb +0 -105
  1038. data/lib/pangea/resources/aws_eip/types.rb +0 -102
  1039. data/lib/pangea/resources/aws_eip_association/CLAUDE.md +0 -96
  1040. data/lib/pangea/resources/aws_eip_association/resource.rb +0 -77
  1041. data/lib/pangea/resources/aws_eip_association/types.rb +0 -88
  1042. data/lib/pangea/resources/aws_eks_access_entry/resource.rb +0 -92
  1043. data/lib/pangea/resources/aws_eks_access_entry/types.rb +0 -110
  1044. data/lib/pangea/resources/aws_eks_addon/CLAUDE.md +0 -271
  1045. data/lib/pangea/resources/aws_eks_addon/resource.rb +0 -153
  1046. data/lib/pangea/resources/aws_eks_addon/types.rb +0 -199
  1047. data/lib/pangea/resources/aws_eks_cluster/CLAUDE.md +0 -198
  1048. data/lib/pangea/resources/aws_eks_cluster/resource.rb +0 -165
  1049. data/lib/pangea/resources/aws_eks_cluster/types.rb +0 -195
  1050. data/lib/pangea/resources/aws_eks_fargate_profile/CLAUDE.md +0 -266
  1051. data/lib/pangea/resources/aws_eks_fargate_profile/resource.rb +0 -152
  1052. data/lib/pangea/resources/aws_eks_fargate_profile/types.rb +0 -145
  1053. data/lib/pangea/resources/aws_eks_node_group/CLAUDE.md +0 -258
  1054. data/lib/pangea/resources/aws_eks_node_group/resource.rb +0 -224
  1055. data/lib/pangea/resources/aws_eks_node_group/types.rb +0 -260
  1056. data/lib/pangea/resources/aws_elasticache_cluster/CLAUDE.md +0 -240
  1057. data/lib/pangea/resources/aws_elasticache_cluster/resource.rb +0 -134
  1058. data/lib/pangea/resources/aws_elasticache_cluster/types.rb +0 -286
  1059. data/lib/pangea/resources/aws_elasticache_cluster/types.rbs +0 -41
  1060. data/lib/pangea/resources/aws_elasticache_parameter_group/CLAUDE.md +0 -334
  1061. data/lib/pangea/resources/aws_elasticache_parameter_group/resource.rb +0 -94
  1062. data/lib/pangea/resources/aws_elasticache_parameter_group/types.rb +0 -295
  1063. data/lib/pangea/resources/aws_elasticache_subnet_group/CLAUDE.md +0 -286
  1064. data/lib/pangea/resources/aws_elasticache_subnet_group/resource.rb +0 -79
  1065. data/lib/pangea/resources/aws_elasticache_subnet_group/types.rb +0 -159
  1066. data/lib/pangea/resources/aws_elb_attachment/resource.rb +0 -67
  1067. data/lib/pangea/resources/aws_elb_attachment/types.rb +0 -46
  1068. data/lib/pangea/resources/aws_elb_service_account/resource.rb +0 -67
  1069. data/lib/pangea/resources/aws_elb_service_account/types.rb +0 -46
  1070. data/lib/pangea/resources/aws_elemental_data_plane_channel/resource.rb +0 -74
  1071. data/lib/pangea/resources/aws_elemental_data_plane_channel/types.rb +0 -66
  1072. data/lib/pangea/resources/aws_emr_cluster/CLAUDE.md +0 -660
  1073. data/lib/pangea/resources/aws_emr_cluster/resource.rb +0 -324
  1074. data/lib/pangea/resources/aws_emr_cluster/types.rb +0 -496
  1075. data/lib/pangea/resources/aws_emr_cluster/types.rbs +0 -67
  1076. data/lib/pangea/resources/aws_emr_instance_group/CLAUDE.md +0 -586
  1077. data/lib/pangea/resources/aws_emr_instance_group/resource.rb +0 -185
  1078. data/lib/pangea/resources/aws_emr_instance_group/types.rb +0 -420
  1079. data/lib/pangea/resources/aws_emr_instance_group/types.rbs +0 -51
  1080. data/lib/pangea/resources/aws_emr_step/CLAUDE.md +0 -560
  1081. data/lib/pangea/resources/aws_emr_step/resource.rb +0 -96
  1082. data/lib/pangea/resources/aws_emr_step/types.rb +0 -389
  1083. data/lib/pangea/resources/aws_emr_step/types.rbs +0 -46
  1084. data/lib/pangea/resources/aws_eventbridge_bus/CLAUDE.md +0 -208
  1085. data/lib/pangea/resources/aws_eventbridge_bus/resource.rb +0 -78
  1086. data/lib/pangea/resources/aws_eventbridge_bus/types.rb +0 -177
  1087. data/lib/pangea/resources/aws_eventbridge_bus/types.rbs +0 -32
  1088. data/lib/pangea/resources/aws_eventbridge_rule/CLAUDE.md +0 -232
  1089. data/lib/pangea/resources/aws_eventbridge_rule/resource.rb +0 -95
  1090. data/lib/pangea/resources/aws_eventbridge_rule/types.rb +0 -332
  1091. data/lib/pangea/resources/aws_eventbridge_rule/types.rbs +0 -41
  1092. data/lib/pangea/resources/aws_eventbridge_target/CLAUDE.md +0 -260
  1093. data/lib/pangea/resources/aws_eventbridge_target/resource.rb +0 -220
  1094. data/lib/pangea/resources/aws_eventbridge_target/types.rb +0 -483
  1095. data/lib/pangea/resources/aws_eventbridge_target/types.rbs +0 -58
  1096. data/lib/pangea/resources/aws_extended_resources_CLAUDE.md +0 -395
  1097. data/lib/pangea/resources/aws_fsx_lustre_filesystem/CLAUDE.md +0 -383
  1098. data/lib/pangea/resources/aws_fsx_lustre_filesystem/resource.rb +0 -151
  1099. data/lib/pangea/resources/aws_fsx_lustre_filesystem/types.rb +0 -218
  1100. data/lib/pangea/resources/aws_gamelift_alias/CLAUDE.md +0 -261
  1101. data/lib/pangea/resources/aws_gamelift_alias/resource.rb +0 -78
  1102. data/lib/pangea/resources/aws_gamelift_alias/types.rb +0 -84
  1103. data/lib/pangea/resources/aws_gamelift_alias.rbs +0 -44
  1104. data/lib/pangea/resources/aws_gamelift_build/CLAUDE.md +0 -233
  1105. data/lib/pangea/resources/aws_gamelift_build/resource.rb +0 -89
  1106. data/lib/pangea/resources/aws_gamelift_build/types.rb +0 -71
  1107. data/lib/pangea/resources/aws_gamelift_build.rbs +0 -45
  1108. data/lib/pangea/resources/aws_gamelift_compute/resource.rb +0 -86
  1109. data/lib/pangea/resources/aws_gamelift_compute/types.rb +0 -51
  1110. data/lib/pangea/resources/aws_gamelift_fleet/CLAUDE.md +0 -191
  1111. data/lib/pangea/resources/aws_gamelift_fleet/resource.rb +0 -118
  1112. data/lib/pangea/resources/aws_gamelift_fleet/types.rb +0 -128
  1113. data/lib/pangea/resources/aws_gamelift_fleet.rbs +0 -84
  1114. data/lib/pangea/resources/aws_gamelift_game_session/resource.rb +0 -107
  1115. data/lib/pangea/resources/aws_gamelift_game_session/types.rb +0 -62
  1116. data/lib/pangea/resources/aws_gamelift_game_session_queue/CLAUDE.md +0 -282
  1117. data/lib/pangea/resources/aws_gamelift_game_session_queue/resource.rb +0 -101
  1118. data/lib/pangea/resources/aws_gamelift_game_session_queue/types.rb +0 -87
  1119. data/lib/pangea/resources/aws_gamelift_game_session_queue.rbs +0 -57
  1120. data/lib/pangea/resources/aws_gamelift_matchmaking_configuration/CLAUDE.md +0 -288
  1121. data/lib/pangea/resources/aws_gamelift_matchmaking_configuration/resource.rb +0 -83
  1122. data/lib/pangea/resources/aws_gamelift_matchmaking_configuration/types.rb +0 -89
  1123. data/lib/pangea/resources/aws_gamelift_matchmaking_configuration.rbs +0 -52
  1124. data/lib/pangea/resources/aws_gamelift_matchmaking_rule_set/resource.rb +0 -88
  1125. data/lib/pangea/resources/aws_gamelift_matchmaking_rule_set/types.rb +0 -41
  1126. data/lib/pangea/resources/aws_gamelift_player_session/resource.rb +0 -86
  1127. data/lib/pangea/resources/aws_gamelift_player_session/types.rb +0 -48
  1128. data/lib/pangea/resources/aws_gamelift_script/resource.rb +0 -99
  1129. data/lib/pangea/resources/aws_gamelift_script/types.rb +0 -52
  1130. data/lib/pangea/resources/aws_gamesparks_game/resource.rb +0 -82
  1131. data/lib/pangea/resources/aws_gamesparks_game/types.rb +0 -44
  1132. data/lib/pangea/resources/aws_glue_catalog_database/CLAUDE.md +0 -161
  1133. data/lib/pangea/resources/aws_glue_catalog_database/resource.rb +0 -108
  1134. data/lib/pangea/resources/aws_glue_catalog_database/types.rb +0 -154
  1135. data/lib/pangea/resources/aws_glue_catalog_database/types.rbs +0 -36
  1136. data/lib/pangea/resources/aws_glue_catalog_table/CLAUDE.md +0 -387
  1137. data/lib/pangea/resources/aws_glue_catalog_table/resource.rb +0 -180
  1138. data/lib/pangea/resources/aws_glue_catalog_table/types.rb +0 -284
  1139. data/lib/pangea/resources/aws_glue_catalog_table/types.rbs +0 -44
  1140. data/lib/pangea/resources/aws_glue_job/CLAUDE.md +0 -398
  1141. data/lib/pangea/resources/aws_glue_job/resource.rb +0 -147
  1142. data/lib/pangea/resources/aws_glue_job/types.rb +0 -284
  1143. data/lib/pangea/resources/aws_glue_job/types.rbs +0 -50
  1144. data/lib/pangea/resources/aws_glue_trigger/CLAUDE.md +0 -454
  1145. data/lib/pangea/resources/aws_glue_trigger/resource.rb +0 -158
  1146. data/lib/pangea/resources/aws_glue_trigger/types.rb +0 -331
  1147. data/lib/pangea/resources/aws_glue_trigger/types.rbs +0 -53
  1148. data/lib/pangea/resources/aws_ground_station.rb +0 -371
  1149. data/lib/pangea/resources/aws_guardduty_detector/resource.rb +0 -104
  1150. data/lib/pangea/resources/aws_guardduty_detector/types.rb +0 -92
  1151. data/lib/pangea/resources/aws_guardduty_detector.rbs +0 -35
  1152. data/lib/pangea/resources/aws_guardduty_member/resource.rb +0 -72
  1153. data/lib/pangea/resources/aws_guardduty_member/types.rb +0 -59
  1154. data/lib/pangea/resources/aws_guardduty_member.rbs +0 -34
  1155. data/lib/pangea/resources/aws_iam_group/CLAUDE.md +0 -351
  1156. data/lib/pangea/resources/aws_iam_group/resource.rb +0 -78
  1157. data/lib/pangea/resources/aws_iam_group/types.rb +0 -406
  1158. data/lib/pangea/resources/aws_iam_policy/CLAUDE.md +0 -278
  1159. data/lib/pangea/resources/aws_iam_policy/resource.rb +0 -86
  1160. data/lib/pangea/resources/aws_iam_policy/types.rb +0 -358
  1161. data/lib/pangea/resources/aws_iam_role/CLAUDE.md +0 -419
  1162. data/lib/pangea/resources/aws_iam_role/resource.rb +0 -98
  1163. data/lib/pangea/resources/aws_iam_role/types.rb +0 -224
  1164. data/lib/pangea/resources/aws_iam_role_policy_attachment/CLAUDE.md +0 -331
  1165. data/lib/pangea/resources/aws_iam_role_policy_attachment/resource.rb +0 -71
  1166. data/lib/pangea/resources/aws_iam_role_policy_attachment/types.rb +0 -267
  1167. data/lib/pangea/resources/aws_iam_user/CLAUDE.md +0 -312
  1168. data/lib/pangea/resources/aws_iam_user/resource.rb +0 -85
  1169. data/lib/pangea/resources/aws_iam_user/types.rb +0 -338
  1170. data/lib/pangea/resources/aws_inspector2_enabler/resource.rb +0 -66
  1171. data/lib/pangea/resources/aws_inspector2_enabler/types.rb +0 -86
  1172. data/lib/pangea/resources/aws_inspector2_enabler.rbs +0 -33
  1173. data/lib/pangea/resources/aws_instance/CLAUDE.md +0 -396
  1174. data/lib/pangea/resources/aws_instance/resource.rb +0 -123
  1175. data/lib/pangea/resources/aws_instance/types.rb +0 -150
  1176. data/lib/pangea/resources/aws_internet_gateway/CLAUDE.md +0 -157
  1177. data/lib/pangea/resources/aws_internet_gateway/resource.rb +0 -85
  1178. data/lib/pangea/resources/aws_internet_gateway/types.rb +0 -47
  1179. data/lib/pangea/resources/aws_iot_analytics_channel/CLAUDE.md +0 -3
  1180. data/lib/pangea/resources/aws_iot_analytics_channel/resource.rb +0 -90
  1181. data/lib/pangea/resources/aws_iot_analytics_channel/types.rb +0 -58
  1182. data/lib/pangea/resources/aws_iot_analytics_channel.rbs +0 -15
  1183. data/lib/pangea/resources/aws_iot_analytics_datastore/CLAUDE.md +0 -3
  1184. data/lib/pangea/resources/aws_iot_analytics_datastore/resource.rb +0 -109
  1185. data/lib/pangea/resources/aws_iot_analytics_datastore/types.rb +0 -61
  1186. data/lib/pangea/resources/aws_iot_analytics_datastore.rbs +0 -16
  1187. data/lib/pangea/resources/aws_iot_authorizer/resource.rb +0 -97
  1188. data/lib/pangea/resources/aws_iot_authorizer/types.rb +0 -80
  1189. data/lib/pangea/resources/aws_iot_billing_group/resource.rb +0 -93
  1190. data/lib/pangea/resources/aws_iot_billing_group/types.rb +0 -77
  1191. data/lib/pangea/resources/aws_iot_ca_certificate/resource.rb +0 -127
  1192. data/lib/pangea/resources/aws_iot_ca_certificate/types.rb +0 -102
  1193. data/lib/pangea/resources/aws_iot_certificate/CLAUDE.md +0 -361
  1194. data/lib/pangea/resources/aws_iot_certificate/resource.rb +0 -93
  1195. data/lib/pangea/resources/aws_iot_certificate/types.rb +0 -238
  1196. data/lib/pangea/resources/aws_iot_certificate.rbs +0 -31
  1197. data/lib/pangea/resources/aws_iot_device_defender_security_profile/CLAUDE.md +0 -3
  1198. data/lib/pangea/resources/aws_iot_device_defender_security_profile/resource.rb +0 -77
  1199. data/lib/pangea/resources/aws_iot_device_defender_security_profile/types.rb +0 -56
  1200. data/lib/pangea/resources/aws_iot_device_defender_security_profile.rbs +0 -14
  1201. data/lib/pangea/resources/aws_iot_domain_configuration/resource.rb +0 -123
  1202. data/lib/pangea/resources/aws_iot_domain_configuration/types.rb +0 -111
  1203. data/lib/pangea/resources/aws_iot_job_template/resource.rb +0 -134
  1204. data/lib/pangea/resources/aws_iot_job_template/types.rb +0 -122
  1205. data/lib/pangea/resources/aws_iot_policy/CLAUDE.md +0 -27
  1206. data/lib/pangea/resources/aws_iot_policy/resource.rb +0 -63
  1207. data/lib/pangea/resources/aws_iot_policy/types.rb +0 -136
  1208. data/lib/pangea/resources/aws_iot_policy.rbs +0 -18
  1209. data/lib/pangea/resources/aws_iot_policy_attachment/resource.rb +0 -98
  1210. data/lib/pangea/resources/aws_iot_policy_attachment/types.rb +0 -54
  1211. data/lib/pangea/resources/aws_iot_provisioning_template/resource.rb +0 -133
  1212. data/lib/pangea/resources/aws_iot_provisioning_template/types.rb +0 -89
  1213. data/lib/pangea/resources/aws_iot_role_alias/resource.rb +0 -98
  1214. data/lib/pangea/resources/aws_iot_role_alias/types.rb +0 -66
  1215. data/lib/pangea/resources/aws_iot_security_profile/CLAUDE.md +0 -3
  1216. data/lib/pangea/resources/aws_iot_security_profile/resource.rb +0 -89
  1217. data/lib/pangea/resources/aws_iot_security_profile/types.rb +0 -53
  1218. data/lib/pangea/resources/aws_iot_security_profile.rbs +0 -14
  1219. data/lib/pangea/resources/aws_iot_thing/CLAUDE.md +0 -397
  1220. data/lib/pangea/resources/aws_iot_thing/resource.rb +0 -87
  1221. data/lib/pangea/resources/aws_iot_thing/types.rb +0 -139
  1222. data/lib/pangea/resources/aws_iot_thing.rbs +0 -27
  1223. data/lib/pangea/resources/aws_iot_thing_group/resource.rb +0 -125
  1224. data/lib/pangea/resources/aws_iot_thing_group/types.rb +0 -100
  1225. data/lib/pangea/resources/aws_iot_thing_group_membership/resource.rb +0 -78
  1226. data/lib/pangea/resources/aws_iot_thing_group_membership/types.rb +0 -57
  1227. data/lib/pangea/resources/aws_iot_thing_principal_attachment/resource.rb +0 -91
  1228. data/lib/pangea/resources/aws_iot_thing_principal_attachment/types.rb +0 -54
  1229. data/lib/pangea/resources/aws_iot_thing_type/CLAUDE.md +0 -526
  1230. data/lib/pangea/resources/aws_iot_thing_type/resource.rb +0 -100
  1231. data/lib/pangea/resources/aws_iot_thing_type/types.rb +0 -242
  1232. data/lib/pangea/resources/aws_iot_thing_type.rbs +0 -31
  1233. data/lib/pangea/resources/aws_iot_topic_rule/CLAUDE.md +0 -11
  1234. data/lib/pangea/resources/aws_iot_topic_rule/resource.rb +0 -81
  1235. data/lib/pangea/resources/aws_iot_topic_rule/types.rb +0 -53
  1236. data/lib/pangea/resources/aws_iot_topic_rule.rbs +0 -13
  1237. data/lib/pangea/resources/aws_iot_topic_rule_destination/CLAUDE.md +0 -5
  1238. data/lib/pangea/resources/aws_iot_topic_rule_destination/resource.rb +0 -66
  1239. data/lib/pangea/resources/aws_iot_topic_rule_destination/types.rb +0 -46
  1240. data/lib/pangea/resources/aws_iot_topic_rule_destination.rbs +0 -13
  1241. data/lib/pangea/resources/aws_iot_wireless_destination/resource.rb +0 -82
  1242. data/lib/pangea/resources/aws_iot_wireless_destination/types.rb +0 -65
  1243. data/lib/pangea/resources/aws_iotanalytics_dataset/resource.rb +0 -213
  1244. data/lib/pangea/resources/aws_iotanalytics_dataset/types.rb +0 -220
  1245. data/lib/pangea/resources/aws_key_pair/CLAUDE.md +0 -357
  1246. data/lib/pangea/resources/aws_key_pair/resource.rb +0 -88
  1247. data/lib/pangea/resources/aws_key_pair/types.rb +0 -175
  1248. data/lib/pangea/resources/aws_kinesis_analytics_application/CLAUDE.md +0 -630
  1249. data/lib/pangea/resources/aws_kinesis_analytics_application/resource.rb +0 -309
  1250. data/lib/pangea/resources/aws_kinesis_analytics_application/types.rb +0 -319
  1251. data/lib/pangea/resources/aws_kinesis_analytics_application/types.rbs +0 -45
  1252. data/lib/pangea/resources/aws_kinesis_firehose_delivery_stream/CLAUDE.md +0 -532
  1253. data/lib/pangea/resources/aws_kinesis_firehose_delivery_stream/resource.rb +0 -288
  1254. data/lib/pangea/resources/aws_kinesis_firehose_delivery_stream/types.rb +0 -305
  1255. data/lib/pangea/resources/aws_kinesis_firehose_delivery_stream/types.rbs +0 -44
  1256. data/lib/pangea/resources/aws_kinesis_stream/CLAUDE.md +0 -255
  1257. data/lib/pangea/resources/aws_kinesis_stream/resource.rb +0 -106
  1258. data/lib/pangea/resources/aws_kinesis_stream/types.rb +0 -160
  1259. data/lib/pangea/resources/aws_kinesis_stream/types.rbs +0 -43
  1260. data/lib/pangea/resources/aws_kinesis_video_stream/CLAUDE.md +0 -595
  1261. data/lib/pangea/resources/aws_kinesis_video_stream/resource.rb +0 -76
  1262. data/lib/pangea/resources/aws_kinesis_video_stream/types.rb +0 -229
  1263. data/lib/pangea/resources/aws_kinesis_video_stream/types.rbs +0 -48
  1264. data/lib/pangea/resources/aws_kms_alias/resource.rb +0 -68
  1265. data/lib/pangea/resources/aws_kms_alias/types.rb +0 -131
  1266. data/lib/pangea/resources/aws_kms_key/resource.rb +0 -110
  1267. data/lib/pangea/resources/aws_kms_key/types.rb +0 -119
  1268. data/lib/pangea/resources/aws_lambda_event_source_mapping/CLAUDE.md +0 -316
  1269. data/lib/pangea/resources/aws_lambda_event_source_mapping/resource.rb +0 -155
  1270. data/lib/pangea/resources/aws_lambda_event_source_mapping/types.rb +0 -201
  1271. data/lib/pangea/resources/aws_lambda_function/CLAUDE.md +0 -255
  1272. data/lib/pangea/resources/aws_lambda_function/resource.rb +0 -210
  1273. data/lib/pangea/resources/aws_lambda_function/types.rb +0 -217
  1274. data/lib/pangea/resources/aws_lambda_function_url/resource.rb +0 -89
  1275. data/lib/pangea/resources/aws_lambda_function_url/types.rb +0 -103
  1276. data/lib/pangea/resources/aws_lambda_layer_version/CLAUDE.md +0 -322
  1277. data/lib/pangea/resources/aws_lambda_layer_version/resource.rb +0 -88
  1278. data/lib/pangea/resources/aws_lambda_layer_version/types.rb +0 -159
  1279. data/lib/pangea/resources/aws_lambda_permission/CLAUDE.md +0 -276
  1280. data/lib/pangea/resources/aws_lambda_permission/resource.rb +0 -76
  1281. data/lib/pangea/resources/aws_lambda_permission/types.rb +0 -117
  1282. data/lib/pangea/resources/aws_launch_configuration/resource.rb +0 -67
  1283. data/lib/pangea/resources/aws_launch_configuration/types.rb +0 -46
  1284. data/lib/pangea/resources/aws_launch_template/CLAUDE.md +0 -269
  1285. data/lib/pangea/resources/aws_launch_template/resource.rb +0 -198
  1286. data/lib/pangea/resources/aws_launch_template/types.rb +0 -211
  1287. data/lib/pangea/resources/aws_lb/CLAUDE.md +0 -411
  1288. data/lib/pangea/resources/aws_lb/resource.rb +0 -111
  1289. data/lib/pangea/resources/aws_lb/types.rb +0 -80
  1290. data/lib/pangea/resources/aws_lb_cookie_stickiness_policy/resource.rb +0 -67
  1291. data/lib/pangea/resources/aws_lb_cookie_stickiness_policy/types.rb +0 -46
  1292. data/lib/pangea/resources/aws_lb_listener/CLAUDE.md +0 -310
  1293. data/lib/pangea/resources/aws_lb_listener/resource.rb +0 -187
  1294. data/lib/pangea/resources/aws_lb_listener/types.rb +0 -125
  1295. data/lib/pangea/resources/aws_lb_listener/types.rbs +0 -23
  1296. data/lib/pangea/resources/aws_lb_listener_certificate/CLAUDE.md +0 -463
  1297. data/lib/pangea/resources/aws_lb_listener_certificate/resource.rb +0 -56
  1298. data/lib/pangea/resources/aws_lb_listener_certificate/types.rb +0 -54
  1299. data/lib/pangea/resources/aws_lb_listener_certificate/types.rbs +0 -17
  1300. data/lib/pangea/resources/aws_lb_listener_rule/CLAUDE.md +0 -502
  1301. data/lib/pangea/resources/aws_lb_listener_rule/resource.rb +0 -210
  1302. data/lib/pangea/resources/aws_lb_listener_rule/types.rb +0 -123
  1303. data/lib/pangea/resources/aws_lb_listener_rule/types.rbs +0 -20
  1304. data/lib/pangea/resources/aws_lb_ssl_negotiation_policy/resource.rb +0 -67
  1305. data/lib/pangea/resources/aws_lb_ssl_negotiation_policy/types.rb +0 -46
  1306. data/lib/pangea/resources/aws_lb_target_group/CLAUDE.md +0 -271
  1307. data/lib/pangea/resources/aws_lb_target_group/resource.rb +0 -159
  1308. data/lib/pangea/resources/aws_lb_target_group/types.rb +0 -201
  1309. data/lib/pangea/resources/aws_lb_target_group_attachment/CLAUDE.md +0 -560
  1310. data/lib/pangea/resources/aws_lb_target_group_attachment/resource.rb +0 -67
  1311. data/lib/pangea/resources/aws_lb_target_group_attachment/types.rb +0 -46
  1312. data/lib/pangea/resources/aws_lb_target_group_attachment/types.rbs +0 -21
  1313. data/lib/pangea/resources/aws_lb_trust_store/resource.rb +0 -67
  1314. data/lib/pangea/resources/aws_lb_trust_store/types.rb +0 -46
  1315. data/lib/pangea/resources/aws_lb_trust_store_revocation/resource.rb +0 -67
  1316. data/lib/pangea/resources/aws_lb_trust_store_revocation/types.rb +0 -46
  1317. data/lib/pangea/resources/aws_licensemanager_association/CLAUDE.md +0 -96
  1318. data/lib/pangea/resources/aws_licensemanager_association/resource.rb +0 -68
  1319. data/lib/pangea/resources/aws_licensemanager_association/types.rb +0 -49
  1320. data/lib/pangea/resources/aws_licensemanager_grant/CLAUDE.md +0 -96
  1321. data/lib/pangea/resources/aws_licensemanager_grant/resource.rb +0 -74
  1322. data/lib/pangea/resources/aws_licensemanager_grant/types.rb +0 -52
  1323. data/lib/pangea/resources/aws_licensemanager_grant_accepter/CLAUDE.md +0 -96
  1324. data/lib/pangea/resources/aws_licensemanager_grant_accepter/resource.rb +0 -74
  1325. data/lib/pangea/resources/aws_licensemanager_grant_accepter/types.rb +0 -48
  1326. data/lib/pangea/resources/aws_licensemanager_license_configuration/CLAUDE.md +0 -96
  1327. data/lib/pangea/resources/aws_licensemanager_license_configuration/resource.rb +0 -74
  1328. data/lib/pangea/resources/aws_licensemanager_license_configuration/types.rb +0 -53
  1329. data/lib/pangea/resources/aws_licensemanager_license_grant_accepter/CLAUDE.md +0 -96
  1330. data/lib/pangea/resources/aws_licensemanager_license_grant_accepter/resource.rb +0 -68
  1331. data/lib/pangea/resources/aws_licensemanager_license_grant_accepter/types.rb +0 -48
  1332. data/lib/pangea/resources/aws_licensemanager_report_generator/CLAUDE.md +0 -96
  1333. data/lib/pangea/resources/aws_licensemanager_report_generator/resource.rb +0 -73
  1334. data/lib/pangea/resources/aws_licensemanager_report_generator/types.rb +0 -53
  1335. data/lib/pangea/resources/aws_licensemanager_token/CLAUDE.md +0 -96
  1336. data/lib/pangea/resources/aws_licensemanager_token/resource.rb +0 -71
  1337. data/lib/pangea/resources/aws_licensemanager_token/types.rb +0 -50
  1338. data/lib/pangea/resources/aws_lightsail.rb +0 -524
  1339. data/lib/pangea/resources/aws_load_balancer_backend_server_policy/resource.rb +0 -67
  1340. data/lib/pangea/resources/aws_load_balancer_backend_server_policy/types.rb +0 -46
  1341. data/lib/pangea/resources/aws_load_balancer_listener_policy/resource.rb +0 -67
  1342. data/lib/pangea/resources/aws_load_balancer_listener_policy/types.rb +0 -46
  1343. data/lib/pangea/resources/aws_load_balancer_policy/resource.rb +0 -67
  1344. data/lib/pangea/resources/aws_load_balancer_policy/types.rb +0 -46
  1345. data/lib/pangea/resources/aws_local_zones.rb +0 -223
  1346. data/lib/pangea/resources/aws_managedblockchain_accessor/resource.rb +0 -86
  1347. data/lib/pangea/resources/aws_managedblockchain_accessor/types.rb +0 -249
  1348. data/lib/pangea/resources/aws_managedblockchain_ethereum_node/resource.rb +0 -97
  1349. data/lib/pangea/resources/aws_managedblockchain_ethereum_node/types.rb +0 -349
  1350. data/lib/pangea/resources/aws_managedblockchain_member/CLAUDE.md +0 -478
  1351. data/lib/pangea/resources/aws_managedblockchain_member/resource.rb +0 -127
  1352. data/lib/pangea/resources/aws_managedblockchain_member/types.rb +0 -225
  1353. data/lib/pangea/resources/aws_managedblockchain_network/CLAUDE.md +0 -487
  1354. data/lib/pangea/resources/aws_managedblockchain_network/resource.rb +0 -160
  1355. data/lib/pangea/resources/aws_managedblockchain_network/types.rb +0 -262
  1356. data/lib/pangea/resources/aws_managedblockchain_node/CLAUDE.md +0 -505
  1357. data/lib/pangea/resources/aws_managedblockchain_node/resource.rb +0 -129
  1358. data/lib/pangea/resources/aws_managedblockchain_node/types.rb +0 -252
  1359. data/lib/pangea/resources/aws_media_convert_queue/resource.rb +0 -74
  1360. data/lib/pangea/resources/aws_media_convert_queue/types.rb +0 -71
  1361. data/lib/pangea/resources/aws_media_live_channel/CLAUDE.md +0 -881
  1362. data/lib/pangea/resources/aws_media_live_channel/resource.rb +0 -594
  1363. data/lib/pangea/resources/aws_media_live_channel/types.rb +0 -1002
  1364. data/lib/pangea/resources/aws_media_live_input/CLAUDE.md +0 -729
  1365. data/lib/pangea/resources/aws_media_live_input/resource.rb +0 -169
  1366. data/lib/pangea/resources/aws_media_live_input/types.rb +0 -247
  1367. data/lib/pangea/resources/aws_media_package_channel/CLAUDE.md +0 -698
  1368. data/lib/pangea/resources/aws_media_package_channel/resource.rb +0 -74
  1369. data/lib/pangea/resources/aws_media_package_channel/types.rb +0 -107
  1370. data/lib/pangea/resources/aws_media_package_origin_endpoint/resource.rb +0 -190
  1371. data/lib/pangea/resources/aws_media_package_origin_endpoint/types.rb +0 -197
  1372. data/lib/pangea/resources/aws_media_store_container/resource.rb +0 -60
  1373. data/lib/pangea/resources/aws_media_store_container/types.rb +0 -55
  1374. data/lib/pangea/resources/aws_memorydb_acl/CLAUDE.md +0 -96
  1375. data/lib/pangea/resources/aws_memorydb_acl/resource.rb +0 -70
  1376. data/lib/pangea/resources/aws_memorydb_acl/types.rb +0 -49
  1377. data/lib/pangea/resources/aws_memorydb_cluster/CLAUDE.md +0 -96
  1378. data/lib/pangea/resources/aws_memorydb_cluster/resource.rb +0 -93
  1379. data/lib/pangea/resources/aws_memorydb_cluster/types.rb +0 -69
  1380. data/lib/pangea/resources/aws_memorydb_cluster_endpoint/CLAUDE.md +0 -96
  1381. data/lib/pangea/resources/aws_memorydb_cluster_endpoint/resource.rb +0 -69
  1382. data/lib/pangea/resources/aws_memorydb_cluster_endpoint/types.rb +0 -48
  1383. data/lib/pangea/resources/aws_memorydb_multi_region_cluster/CLAUDE.md +0 -96
  1384. data/lib/pangea/resources/aws_memorydb_multi_region_cluster/resource.rb +0 -75
  1385. data/lib/pangea/resources/aws_memorydb_multi_region_cluster/types.rb +0 -53
  1386. data/lib/pangea/resources/aws_memorydb_parameter_group/CLAUDE.md +0 -96
  1387. data/lib/pangea/resources/aws_memorydb_parameter_group/resource.rb +0 -71
  1388. data/lib/pangea/resources/aws_memorydb_parameter_group/types.rb +0 -51
  1389. data/lib/pangea/resources/aws_memorydb_snapshot/CLAUDE.md +0 -96
  1390. data/lib/pangea/resources/aws_memorydb_snapshot/resource.rb +0 -73
  1391. data/lib/pangea/resources/aws_memorydb_snapshot/types.rb +0 -51
  1392. data/lib/pangea/resources/aws_memorydb_subnet_group/CLAUDE.md +0 -96
  1393. data/lib/pangea/resources/aws_memorydb_subnet_group/resource.rb +0 -71
  1394. data/lib/pangea/resources/aws_memorydb_subnet_group/types.rb +0 -50
  1395. data/lib/pangea/resources/aws_memorydb_user/CLAUDE.md +0 -96
  1396. data/lib/pangea/resources/aws_memorydb_user/resource.rb +0 -71
  1397. data/lib/pangea/resources/aws_memorydb_user/types.rb +0 -50
  1398. data/lib/pangea/resources/aws_minimal.rb +0 -302
  1399. data/lib/pangea/resources/aws_mobile_analytics_app/CLAUDE.md +0 -262
  1400. data/lib/pangea/resources/aws_mobile_analytics_app/resource.rb +0 -77
  1401. data/lib/pangea/resources/aws_mobile_analytics_app/types.rb +0 -47
  1402. data/lib/pangea/resources/aws_mobile_analytics_app.rbs +0 -30
  1403. data/lib/pangea/resources/aws_mq_broker/resource.rb +0 -157
  1404. data/lib/pangea/resources/aws_mq_broker/types.rb +0 -181
  1405. data/lib/pangea/resources/aws_mq_broker.rbs +0 -130
  1406. data/lib/pangea/resources/aws_mq_configuration/resource.rb +0 -75
  1407. data/lib/pangea/resources/aws_mq_configuration/types.rb +0 -88
  1408. data/lib/pangea/resources/aws_mq_configuration.rbs +0 -36
  1409. data/lib/pangea/resources/aws_nat_gateway/CLAUDE.md +0 -209
  1410. data/lib/pangea/resources/aws_nat_gateway/resource.rb +0 -97
  1411. data/lib/pangea/resources/aws_nat_gateway/types.rb +0 -80
  1412. data/lib/pangea/resources/aws_neptune_cluster/CLAUDE.md +0 -96
  1413. data/lib/pangea/resources/aws_neptune_cluster/resource.rb +0 -98
  1414. data/lib/pangea/resources/aws_neptune_cluster/types.rb +0 -70
  1415. data/lib/pangea/resources/aws_neptune_cluster_endpoint/CLAUDE.md +0 -96
  1416. data/lib/pangea/resources/aws_neptune_cluster_endpoint/resource.rb +0 -71
  1417. data/lib/pangea/resources/aws_neptune_cluster_endpoint/types.rb +0 -50
  1418. data/lib/pangea/resources/aws_neptune_cluster_instance/CLAUDE.md +0 -96
  1419. data/lib/pangea/resources/aws_neptune_cluster_instance/resource.rb +0 -85
  1420. data/lib/pangea/resources/aws_neptune_cluster_instance/types.rb +0 -58
  1421. data/lib/pangea/resources/aws_neptune_cluster_parameter_group/CLAUDE.md +0 -96
  1422. data/lib/pangea/resources/aws_neptune_cluster_parameter_group/resource.rb +0 -71
  1423. data/lib/pangea/resources/aws_neptune_cluster_parameter_group/types.rb +0 -51
  1424. data/lib/pangea/resources/aws_neptune_cluster_snapshot/CLAUDE.md +0 -96
  1425. data/lib/pangea/resources/aws_neptune_cluster_snapshot/resource.rb +0 -78
  1426. data/lib/pangea/resources/aws_neptune_cluster_snapshot/types.rb +0 -49
  1427. data/lib/pangea/resources/aws_neptune_event_subscription/CLAUDE.md +0 -96
  1428. data/lib/pangea/resources/aws_neptune_event_subscription/resource.rb +0 -74
  1429. data/lib/pangea/resources/aws_neptune_event_subscription/types.rb +0 -53
  1430. data/lib/pangea/resources/aws_neptune_parameter_group/CLAUDE.md +0 -96
  1431. data/lib/pangea/resources/aws_neptune_parameter_group/resource.rb +0 -71
  1432. data/lib/pangea/resources/aws_neptune_parameter_group/types.rb +0 -51
  1433. data/lib/pangea/resources/aws_neptune_subnet_group/CLAUDE.md +0 -96
  1434. data/lib/pangea/resources/aws_neptune_subnet_group/resource.rb +0 -70
  1435. data/lib/pangea/resources/aws_neptune_subnet_group/types.rb +0 -50
  1436. data/lib/pangea/resources/aws_network_acl/CLAUDE.md +0 -96
  1437. data/lib/pangea/resources/aws_network_acl/resource.rb +0 -77
  1438. data/lib/pangea/resources/aws_network_acl/types.rb +0 -147
  1439. data/lib/pangea/resources/aws_network_acl_rule/CLAUDE.md +0 -297
  1440. data/lib/pangea/resources/aws_network_acl_rule/resource.rb +0 -92
  1441. data/lib/pangea/resources/aws_network_acl_rule/types.rb +0 -158
  1442. data/lib/pangea/resources/aws_network_interface/CLAUDE.md +0 -310
  1443. data/lib/pangea/resources/aws_network_interface/resource.rb +0 -121
  1444. data/lib/pangea/resources/aws_network_interface/types.rb +0 -108
  1445. data/lib/pangea/resources/aws_organizations_account/resource.rb +0 -69
  1446. data/lib/pangea/resources/aws_organizations_account/types.rb +0 -85
  1447. data/lib/pangea/resources/aws_organizations_account.rbs +0 -10
  1448. data/lib/pangea/resources/aws_organizations_delegated_administrator/resource.rb +0 -82
  1449. data/lib/pangea/resources/aws_organizations_organization/resource.rb +0 -60
  1450. data/lib/pangea/resources/aws_organizations_organization/types.rb +0 -77
  1451. data/lib/pangea/resources/aws_organizations_organization.rbs +0 -10
  1452. data/lib/pangea/resources/aws_organizations_resource_policy/resource.rb +0 -99
  1453. data/lib/pangea/resources/aws_outposts.rb +0 -351
  1454. data/lib/pangea/resources/aws_pinpoint_app/CLAUDE.md +0 -363
  1455. data/lib/pangea/resources/aws_pinpoint_app/resource.rb +0 -84
  1456. data/lib/pangea/resources/aws_pinpoint_app/types.rb +0 -91
  1457. data/lib/pangea/resources/aws_pinpoint_app.rbs +0 -55
  1458. data/lib/pangea/resources/aws_placement_group/resource.rb +0 -67
  1459. data/lib/pangea/resources/aws_placement_group/types.rb +0 -46
  1460. data/lib/pangea/resources/aws_proxy_protocol_policy/resource.rb +0 -67
  1461. data/lib/pangea/resources/aws_proxy_protocol_policy/types.rb +0 -46
  1462. data/lib/pangea/resources/aws_qldb_ledger/CLAUDE.md +0 -734
  1463. data/lib/pangea/resources/aws_qldb_ledger/resource.rb +0 -89
  1464. data/lib/pangea/resources/aws_qldb_ledger/types.rb +0 -173
  1465. data/lib/pangea/resources/aws_qldb_stream/CLAUDE.md +0 -845
  1466. data/lib/pangea/resources/aws_qldb_stream/resource.rb +0 -101
  1467. data/lib/pangea/resources/aws_qldb_stream/types.rb +0 -222
  1468. data/lib/pangea/resources/aws_ram_invitation_accepter/CLAUDE.md +0 -96
  1469. data/lib/pangea/resources/aws_ram_invitation_accepter/resource.rb +0 -72
  1470. data/lib/pangea/resources/aws_ram_invitation_accepter/types.rb +0 -48
  1471. data/lib/pangea/resources/aws_ram_managed_permission/CLAUDE.md +0 -96
  1472. data/lib/pangea/resources/aws_ram_managed_permission/resource.rb +0 -75
  1473. data/lib/pangea/resources/aws_ram_managed_permission/types.rb +0 -49
  1474. data/lib/pangea/resources/aws_ram_permission/CLAUDE.md +0 -96
  1475. data/lib/pangea/resources/aws_ram_permission/resource.rb +0 -75
  1476. data/lib/pangea/resources/aws_ram_permission/types.rb +0 -50
  1477. data/lib/pangea/resources/aws_ram_permission_association/CLAUDE.md +0 -96
  1478. data/lib/pangea/resources/aws_ram_permission_association/resource.rb +0 -69
  1479. data/lib/pangea/resources/aws_ram_permission_association/types.rb +0 -50
  1480. data/lib/pangea/resources/aws_ram_principal_association/CLAUDE.md +0 -96
  1481. data/lib/pangea/resources/aws_ram_principal_association/resource.rb +0 -68
  1482. data/lib/pangea/resources/aws_ram_principal_association/types.rb +0 -49
  1483. data/lib/pangea/resources/aws_ram_resource_association/CLAUDE.md +0 -96
  1484. data/lib/pangea/resources/aws_ram_resource_association/resource.rb +0 -68
  1485. data/lib/pangea/resources/aws_ram_resource_association/types.rb +0 -49
  1486. data/lib/pangea/resources/aws_ram_resource_share/CLAUDE.md +0 -96
  1487. data/lib/pangea/resources/aws_ram_resource_share/resource.rb +0 -71
  1488. data/lib/pangea/resources/aws_ram_resource_share/types.rb +0 -50
  1489. data/lib/pangea/resources/aws_ram_resource_share_accepter/CLAUDE.md +0 -96
  1490. data/lib/pangea/resources/aws_ram_resource_share_accepter/resource.rb +0 -71
  1491. data/lib/pangea/resources/aws_ram_resource_share_accepter/types.rb +0 -48
  1492. data/lib/pangea/resources/aws_ram_resource_share_invitation/CLAUDE.md +0 -96
  1493. data/lib/pangea/resources/aws_ram_resource_share_invitation/resource.rb +0 -73
  1494. data/lib/pangea/resources/aws_ram_resource_share_invitation/types.rb +0 -49
  1495. data/lib/pangea/resources/aws_ram_sharing_with_organization/CLAUDE.md +0 -96
  1496. data/lib/pangea/resources/aws_ram_sharing_with_organization/resource.rb +0 -67
  1497. data/lib/pangea/resources/aws_ram_sharing_with_organization/types.rb +0 -48
  1498. data/lib/pangea/resources/aws_rds_cluster/CLAUDE.md +0 -361
  1499. data/lib/pangea/resources/aws_rds_cluster/resource.rb +0 -189
  1500. data/lib/pangea/resources/aws_rds_cluster/types.rb +0 -464
  1501. data/lib/pangea/resources/aws_rds_cluster_endpoint/CLAUDE.md +0 -279
  1502. data/lib/pangea/resources/aws_rds_cluster_endpoint/resource.rb +0 -96
  1503. data/lib/pangea/resources/aws_rds_cluster_endpoint/types.rb +0 -254
  1504. data/lib/pangea/resources/aws_rds_cluster_endpoint/types.rbs +0 -59
  1505. data/lib/pangea/resources/aws_rds_cluster_instance/CLAUDE.md +0 -378
  1506. data/lib/pangea/resources/aws_rds_cluster_instance/resource.rb +0 -143
  1507. data/lib/pangea/resources/aws_rds_cluster_instance/types.rb +0 -437
  1508. data/lib/pangea/resources/aws_rds_cluster_parameter_group/CLAUDE.md +0 -344
  1509. data/lib/pangea/resources/aws_rds_cluster_parameter_group/resource.rb +0 -96
  1510. data/lib/pangea/resources/aws_rds_cluster_parameter_group/types.rb +0 -361
  1511. data/lib/pangea/resources/aws_rds_cluster_parameter_group/types.rbs +0 -65
  1512. data/lib/pangea/resources/aws_rds_global_cluster/CLAUDE.md +0 -362
  1513. data/lib/pangea/resources/aws_rds_global_cluster/resource.rb +0 -123
  1514. data/lib/pangea/resources/aws_rds_global_cluster/types.rb +0 -425
  1515. data/lib/pangea/resources/aws_rds_global_cluster/types.rbs +0 -84
  1516. data/lib/pangea/resources/aws_rds_proxy/resource.rb +0 -113
  1517. data/lib/pangea/resources/aws_rds_proxy/types.rb +0 -410
  1518. data/lib/pangea/resources/aws_rds_proxy_default_target_group/resource.rb +0 -72
  1519. data/lib/pangea/resources/aws_rds_proxy_default_target_group/types.rb +0 -121
  1520. data/lib/pangea/resources/aws_rds_proxy_target/resource.rb +0 -74
  1521. data/lib/pangea/resources/aws_rds_proxy_target/types.rb +0 -106
  1522. data/lib/pangea/resources/aws_redshift_cluster/CLAUDE.md +0 -358
  1523. data/lib/pangea/resources/aws_redshift_cluster/resource.rb +0 -151
  1524. data/lib/pangea/resources/aws_redshift_cluster/types.rb +0 -323
  1525. data/lib/pangea/resources/aws_redshift_cluster/types.rbs +0 -65
  1526. data/lib/pangea/resources/aws_redshift_cluster.rbs +0 -10
  1527. data/lib/pangea/resources/aws_redshift_parameter_group/CLAUDE.md +0 -352
  1528. data/lib/pangea/resources/aws_redshift_parameter_group/resource.rb +0 -87
  1529. data/lib/pangea/resources/aws_redshift_parameter_group/types.rb +0 -214
  1530. data/lib/pangea/resources/aws_redshift_parameter_group/types.rbs +0 -42
  1531. data/lib/pangea/resources/aws_redshift_parameter_group.rbs +0 -10
  1532. data/lib/pangea/resources/aws_redshift_snapshot_schedule/CLAUDE.md +0 -395
  1533. data/lib/pangea/resources/aws_redshift_snapshot_schedule/resource.rb +0 -81
  1534. data/lib/pangea/resources/aws_redshift_snapshot_schedule/types.rb +0 -229
  1535. data/lib/pangea/resources/aws_redshift_snapshot_schedule/types.rbs +0 -41
  1536. data/lib/pangea/resources/aws_redshift_snapshot_schedule.rbs +0 -10
  1537. data/lib/pangea/resources/aws_redshift_subnet_group/CLAUDE.md +0 -274
  1538. data/lib/pangea/resources/aws_redshift_subnet_group/resource.rb +0 -77
  1539. data/lib/pangea/resources/aws_redshift_subnet_group/types.rb +0 -142
  1540. data/lib/pangea/resources/aws_redshift_subnet_group/types.rbs +0 -33
  1541. data/lib/pangea/resources/aws_redshift_subnet_group.rbs +0 -10
  1542. data/lib/pangea/resources/aws_resource_explorer_index/resource.rb +0 -81
  1543. data/lib/pangea/resources/aws_resource_explorer_view/resource.rb +0 -126
  1544. data/lib/pangea/resources/aws_resourcegroups_group/resource.rb +0 -167
  1545. data/lib/pangea/resources/aws_resources.rb +0 -351
  1546. data/lib/pangea/resources/aws_resources_minimal.rb +0 -32
  1547. data/lib/pangea/resources/aws_route/CLAUDE.md +0 -96
  1548. data/lib/pangea/resources/aws_route/resource.rb +0 -83
  1549. data/lib/pangea/resources/aws_route/types.rb +0 -122
  1550. data/lib/pangea/resources/aws_route53_delegation_set/resource.rb +0 -73
  1551. data/lib/pangea/resources/aws_route53_delegation_set/types.rb +0 -133
  1552. data/lib/pangea/resources/aws_route53_delegation_set.rbs +0 -28
  1553. data/lib/pangea/resources/aws_route53_health_check/CLAUDE.md +0 -408
  1554. data/lib/pangea/resources/aws_route53_health_check/resource.rb +0 -132
  1555. data/lib/pangea/resources/aws_route53_health_check/types.rb +0 -387
  1556. data/lib/pangea/resources/aws_route53_query_log/resource.rb +0 -79
  1557. data/lib/pangea/resources/aws_route53_query_log/types.rb +0 -185
  1558. data/lib/pangea/resources/aws_route53_record/CLAUDE.md +0 -414
  1559. data/lib/pangea/resources/aws_route53_record/resource.rb +0 -138
  1560. data/lib/pangea/resources/aws_route53_record/types.rb +0 -408
  1561. data/lib/pangea/resources/aws_route53_zone/CLAUDE.md +0 -363
  1562. data/lib/pangea/resources/aws_route53_zone/resource.rb +0 -99
  1563. data/lib/pangea/resources/aws_route53_zone/types.rb +0 -260
  1564. data/lib/pangea/resources/aws_route_table/CLAUDE.md +0 -224
  1565. data/lib/pangea/resources/aws_route_table/resource.rb +0 -104
  1566. data/lib/pangea/resources/aws_route_table/types.rb +0 -107
  1567. data/lib/pangea/resources/aws_route_table_association/CLAUDE.md +0 -401
  1568. data/lib/pangea/resources/aws_route_table_association/resource.rb +0 -93
  1569. data/lib/pangea/resources/aws_route_table_association/types.rb +0 -94
  1570. data/lib/pangea/resources/aws_s3_access_point/CLAUDE.md +0 -211
  1571. data/lib/pangea/resources/aws_s3_access_point/resource.rb +0 -102
  1572. data/lib/pangea/resources/aws_s3_access_point/types.rb +0 -86
  1573. data/lib/pangea/resources/aws_s3_access_point_policy/resource.rb +0 -69
  1574. data/lib/pangea/resources/aws_s3_access_point_policy/types.rb +0 -65
  1575. data/lib/pangea/resources/aws_s3_bucket/CLAUDE.md +0 -140
  1576. data/lib/pangea/resources/aws_s3_bucket/resource.rb +0 -228
  1577. data/lib/pangea/resources/aws_s3_bucket/types.rb +0 -206
  1578. data/lib/pangea/resources/aws_s3_bucket_accelerate_configuration/resource.rb +0 -70
  1579. data/lib/pangea/resources/aws_s3_bucket_accelerate_configuration/types.rb +0 -65
  1580. data/lib/pangea/resources/aws_s3_bucket_analytics_configuration/resource.rb +0 -108
  1581. data/lib/pangea/resources/aws_s3_bucket_analytics_configuration/types.rb +0 -115
  1582. data/lib/pangea/resources/aws_s3_bucket_cors_configuration/CLAUDE.md +0 -262
  1583. data/lib/pangea/resources/aws_s3_bucket_cors_configuration/resource.rb +0 -97
  1584. data/lib/pangea/resources/aws_s3_bucket_cors_configuration/types.rb +0 -167
  1585. data/lib/pangea/resources/aws_s3_bucket_encryption/CLAUDE.md +0 -465
  1586. data/lib/pangea/resources/aws_s3_bucket_encryption/resource.rb +0 -78
  1587. data/lib/pangea/resources/aws_s3_bucket_encryption/types.rb +0 -114
  1588. data/lib/pangea/resources/aws_s3_bucket_inventory/CLAUDE.md +0 -430
  1589. data/lib/pangea/resources/aws_s3_bucket_inventory/resource.rb +0 -135
  1590. data/lib/pangea/resources/aws_s3_bucket_inventory/types.rb +0 -257
  1591. data/lib/pangea/resources/aws_s3_bucket_lifecycle_configuration/CLAUDE.md +0 -221
  1592. data/lib/pangea/resources/aws_s3_bucket_lifecycle_configuration/resource.rb +0 -158
  1593. data/lib/pangea/resources/aws_s3_bucket_lifecycle_configuration/types.rb +0 -214
  1594. data/lib/pangea/resources/aws_s3_bucket_notification/CLAUDE.md +0 -358
  1595. data/lib/pangea/resources/aws_s3_bucket_notification/resource.rb +0 -122
  1596. data/lib/pangea/resources/aws_s3_bucket_notification/types.rb +0 -224
  1597. data/lib/pangea/resources/aws_s3_bucket_object_lock_configuration/CLAUDE.md +0 -561
  1598. data/lib/pangea/resources/aws_s3_bucket_object_lock_configuration/resource.rb +0 -100
  1599. data/lib/pangea/resources/aws_s3_bucket_object_lock_configuration/types.rb +0 -241
  1600. data/lib/pangea/resources/aws_s3_bucket_policy/CLAUDE.md +0 -234
  1601. data/lib/pangea/resources/aws_s3_bucket_policy/resource.rb +0 -66
  1602. data/lib/pangea/resources/aws_s3_bucket_policy/types.rb +0 -93
  1603. data/lib/pangea/resources/aws_s3_bucket_public_access_block/CLAUDE.md +0 -528
  1604. data/lib/pangea/resources/aws_s3_bucket_public_access_block/resource.rb +0 -77
  1605. data/lib/pangea/resources/aws_s3_bucket_public_access_block/types.rb +0 -92
  1606. data/lib/pangea/resources/aws_s3_bucket_replication_configuration/CLAUDE.md +0 -628
  1607. data/lib/pangea/resources/aws_s3_bucket_replication_configuration/resource.rb +0 -200
  1608. data/lib/pangea/resources/aws_s3_bucket_replication_configuration/types.rb +0 -304
  1609. data/lib/pangea/resources/aws_s3_bucket_versioning/CLAUDE.md +0 -340
  1610. data/lib/pangea/resources/aws_s3_bucket_versioning/resource.rb +0 -72
  1611. data/lib/pangea/resources/aws_s3_bucket_versioning/types.rb +0 -77
  1612. data/lib/pangea/resources/aws_s3_bucket_website_configuration/CLAUDE.md +0 -355
  1613. data/lib/pangea/resources/aws_s3_bucket_website_configuration/resource.rb +0 -123
  1614. data/lib/pangea/resources/aws_s3_bucket_website_configuration/types.rb +0 -397
  1615. data/lib/pangea/resources/aws_s3_multi_region_access_point/resource.rb +0 -105
  1616. data/lib/pangea/resources/aws_s3_multi_region_access_point/types.rb +0 -101
  1617. data/lib/pangea/resources/aws_s3_object/CLAUDE.md +0 -535
  1618. data/lib/pangea/resources/aws_s3_object/resource.rb +0 -131
  1619. data/lib/pangea/resources/aws_s3_object/types.rb +0 -215
  1620. data/lib/pangea/resources/aws_s3_object_lambda_access_point/resource.rb +0 -97
  1621. data/lib/pangea/resources/aws_s3_object_lambda_access_point/types.rb +0 -106
  1622. data/lib/pangea/resources/aws_sagemaker_domain/CLAUDE.md +0 -253
  1623. data/lib/pangea/resources/aws_sagemaker_domain/resource.rb +0 -160
  1624. data/lib/pangea/resources/aws_sagemaker_domain/types.rb +0 -306
  1625. data/lib/pangea/resources/aws_sagemaker_domain.rbs +0 -39
  1626. data/lib/pangea/resources/aws_sagemaker_endpoint/resource.rb +0 -236
  1627. data/lib/pangea/resources/aws_sagemaker_endpoint/types.rb +0 -294
  1628. data/lib/pangea/resources/aws_sagemaker_endpoint_configuration/resource.rb +0 -232
  1629. data/lib/pangea/resources/aws_sagemaker_endpoint_configuration/types.rb +0 -359
  1630. data/lib/pangea/resources/aws_sagemaker_feature_group/resource.rb +0 -64
  1631. data/lib/pangea/resources/aws_sagemaker_feature_group/types.rb +0 -150
  1632. data/lib/pangea/resources/aws_sagemaker_model/resource.rb +0 -189
  1633. data/lib/pangea/resources/aws_sagemaker_model/types.rb +0 -330
  1634. data/lib/pangea/resources/aws_sagemaker_notebook_instance/resource.rb +0 -139
  1635. data/lib/pangea/resources/aws_sagemaker_notebook_instance/types.rb +0 -321
  1636. data/lib/pangea/resources/aws_sagemaker_notebook_instance.rbs +0 -52
  1637. data/lib/pangea/resources/aws_sagemaker_pipeline/resource.rb +0 -61
  1638. data/lib/pangea/resources/aws_sagemaker_pipeline/types.rb +0 -78
  1639. data/lib/pangea/resources/aws_sagemaker_processing_job/resource.rb +0 -61
  1640. data/lib/pangea/resources/aws_sagemaker_processing_job/types.rb +0 -140
  1641. data/lib/pangea/resources/aws_sagemaker_training_job/resource.rb +0 -69
  1642. data/lib/pangea/resources/aws_sagemaker_training_job/types.rb +0 -471
  1643. data/lib/pangea/resources/aws_sagemaker_user_profile/resource.rb +0 -198
  1644. data/lib/pangea/resources/aws_sagemaker_user_profile/types.rb +0 -330
  1645. data/lib/pangea/resources/aws_sagemaker_user_profile.rbs +0 -40
  1646. data/lib/pangea/resources/aws_secretsmanager_secret/CLAUDE.md +0 -528
  1647. data/lib/pangea/resources/aws_secretsmanager_secret/resource.rb +0 -111
  1648. data/lib/pangea/resources/aws_secretsmanager_secret/types.rb +0 -198
  1649. data/lib/pangea/resources/aws_secretsmanager_secret_version/resource.rb +0 -76
  1650. data/lib/pangea/resources/aws_secretsmanager_secret_version/types.rb +0 -99
  1651. data/lib/pangea/resources/aws_security_group/resource.rb +0 -78
  1652. data/lib/pangea/resources/aws_security_group/types.rb +0 -110
  1653. data/lib/pangea/resources/aws_securityhub_account/resource.rb +0 -74
  1654. data/lib/pangea/resources/aws_securityhub_account/types.rb +0 -61
  1655. data/lib/pangea/resources/aws_securityhub_account.rbs +0 -33
  1656. data/lib/pangea/resources/aws_securitylake_data_lake.rbs +0 -29
  1657. data/lib/pangea/resources/aws_ses_configuration_set/resource.rb +0 -70
  1658. data/lib/pangea/resources/aws_ses_configuration_set/types.rb +0 -75
  1659. data/lib/pangea/resources/aws_ses_configuration_set.rbs +0 -35
  1660. data/lib/pangea/resources/aws_ses_domain_identity/resource.rb +0 -57
  1661. data/lib/pangea/resources/aws_ses_domain_identity/types.rb +0 -61
  1662. data/lib/pangea/resources/aws_ses_domain_identity.rbs +0 -24
  1663. data/lib/pangea/resources/aws_ses_email_identity/resource.rb +0 -56
  1664. data/lib/pangea/resources/aws_ses_email_identity/types.rb +0 -73
  1665. data/lib/pangea/resources/aws_ses_email_identity.rbs +0 -24
  1666. data/lib/pangea/resources/aws_sfn_activity/CLAUDE.md +0 -571
  1667. data/lib/pangea/resources/aws_sfn_activity/resource.rb +0 -61
  1668. data/lib/pangea/resources/aws_sfn_activity/types.rb +0 -124
  1669. data/lib/pangea/resources/aws_sfn_state_machine/CLAUDE.md +0 -464
  1670. data/lib/pangea/resources/aws_sfn_state_machine/resource.rb +0 -92
  1671. data/lib/pangea/resources/aws_sfn_state_machine/types.rb +0 -347
  1672. data/lib/pangea/resources/aws_snow_family.rb +0 -401
  1673. data/lib/pangea/resources/aws_sns_subscription/CLAUDE.md +0 -289
  1674. data/lib/pangea/resources/aws_sns_subscription/resource.rb +0 -99
  1675. data/lib/pangea/resources/aws_sns_subscription/types.rb +0 -218
  1676. data/lib/pangea/resources/aws_sns_topic/CLAUDE.md +0 -249
  1677. data/lib/pangea/resources/aws_sns_topic/resource.rb +0 -126
  1678. data/lib/pangea/resources/aws_sns_topic/types.rb +0 -193
  1679. data/lib/pangea/resources/aws_sqs_queue/CLAUDE.md +0 -190
  1680. data/lib/pangea/resources/aws_sqs_queue/resource.rb +0 -114
  1681. data/lib/pangea/resources/aws_sqs_queue/types.rb +0 -169
  1682. data/lib/pangea/resources/aws_sqs_queue_policy/CLAUDE.md +0 -227
  1683. data/lib/pangea/resources/aws_sqs_queue_policy/resource.rb +0 -64
  1684. data/lib/pangea/resources/aws_sqs_queue_policy/types.rb +0 -115
  1685. data/lib/pangea/resources/aws_ssm_document/CLAUDE.md +0 -410
  1686. data/lib/pangea/resources/aws_ssm_document/resource.rb +0 -144
  1687. data/lib/pangea/resources/aws_ssm_document/types.rb +0 -417
  1688. data/lib/pangea/resources/aws_ssm_document/types.rbs +0 -49
  1689. data/lib/pangea/resources/aws_ssm_maintenance_window/CLAUDE.md +0 -412
  1690. data/lib/pangea/resources/aws_ssm_maintenance_window/resource.rb +0 -120
  1691. data/lib/pangea/resources/aws_ssm_maintenance_window/types.rb +0 -374
  1692. data/lib/pangea/resources/aws_ssm_maintenance_window/types.rbs +0 -49
  1693. data/lib/pangea/resources/aws_ssm_parameter/CLAUDE.md +0 -355
  1694. data/lib/pangea/resources/aws_ssm_parameter/resource.rb +0 -116
  1695. data/lib/pangea/resources/aws_ssm_parameter/types.rb +0 -287
  1696. data/lib/pangea/resources/aws_ssm_parameter/types.rbs +0 -47
  1697. data/lib/pangea/resources/aws_ssm_patch_baseline/CLAUDE.md +0 -509
  1698. data/lib/pangea/resources/aws_ssm_patch_baseline/resource.rb +0 -149
  1699. data/lib/pangea/resources/aws_ssm_patch_baseline/types.rb +0 -440
  1700. data/lib/pangea/resources/aws_ssm_patch_baseline/types.rbs +0 -51
  1701. data/lib/pangea/resources/aws_subnet/CLAUDE.md +0 -301
  1702. data/lib/pangea/resources/aws_subnet/resource.rb +0 -78
  1703. data/lib/pangea/resources/aws_subnet/types.rb +0 -67
  1704. data/lib/pangea/resources/aws_sumerian_project/resource.rb +0 -85
  1705. data/lib/pangea/resources/aws_sumerian_project/types.rb +0 -46
  1706. data/lib/pangea/resources/aws_support_app_slack_channel_configuration/resource.rb +0 -114
  1707. data/lib/pangea/resources/aws_support_app_slack_workspace_configuration/resource.rb +0 -73
  1708. data/lib/pangea/resources/aws_timestream_access_policy/CLAUDE.md +0 -96
  1709. data/lib/pangea/resources/aws_timestream_access_policy/resource.rb +0 -69
  1710. data/lib/pangea/resources/aws_timestream_access_policy/types.rb +0 -50
  1711. data/lib/pangea/resources/aws_timestream_batch_load_task/CLAUDE.md +0 -96
  1712. data/lib/pangea/resources/aws_timestream_batch_load_task/resource.rb +0 -77
  1713. data/lib/pangea/resources/aws_timestream_batch_load_task/types.rb +0 -54
  1714. data/lib/pangea/resources/aws_timestream_database/CLAUDE.md +0 -96
  1715. data/lib/pangea/resources/aws_timestream_database/resource.rb +0 -71
  1716. data/lib/pangea/resources/aws_timestream_database/types.rb +0 -49
  1717. data/lib/pangea/resources/aws_timestream_influx_db_instance/CLAUDE.md +0 -96
  1718. data/lib/pangea/resources/aws_timestream_influx_db_instance/resource.rb +0 -85
  1719. data/lib/pangea/resources/aws_timestream_influx_db_instance/types.rb +0 -61
  1720. data/lib/pangea/resources/aws_timestream_scheduled_query/CLAUDE.md +0 -96
  1721. data/lib/pangea/resources/aws_timestream_scheduled_query/resource.rb +0 -77
  1722. data/lib/pangea/resources/aws_timestream_scheduled_query/types.rb +0 -56
  1723. data/lib/pangea/resources/aws_timestream_table/CLAUDE.md +0 -96
  1724. data/lib/pangea/resources/aws_timestream_table/resource.rb +0 -73
  1725. data/lib/pangea/resources/aws_timestream_table/types.rb +0 -52
  1726. data/lib/pangea/resources/aws_timestream_table_retention_properties/CLAUDE.md +0 -96
  1727. data/lib/pangea/resources/aws_timestream_table_retention_properties/resource.rb +0 -70
  1728. data/lib/pangea/resources/aws_timestream_table_retention_properties/types.rb +0 -51
  1729. data/lib/pangea/resources/aws_volume_attachment/CLAUDE.md +0 -326
  1730. data/lib/pangea/resources/aws_volume_attachment/resource.rb +0 -77
  1731. data/lib/pangea/resources/aws_volume_attachment/types.rb +0 -176
  1732. data/lib/pangea/resources/aws_vpc/CLAUDE.md +0 -184
  1733. data/lib/pangea/resources/aws_vpc/resource.rb +0 -80
  1734. data/lib/pangea/resources/aws_vpc/types.rb +0 -94
  1735. data/lib/pangea/resources/aws_vpc_dhcp_options_association/resource.rb +0 -67
  1736. data/lib/pangea/resources/aws_vpc_dhcp_options_association/types.rb +0 -46
  1737. data/lib/pangea/resources/aws_vpc_endpoint/CLAUDE.md +0 -483
  1738. data/lib/pangea/resources/aws_vpc_endpoint/resource.rb +0 -126
  1739. data/lib/pangea/resources/aws_vpc_endpoint/types.rb +0 -132
  1740. data/lib/pangea/resources/aws_vpc_endpoint_connection_accepter/resource.rb +0 -67
  1741. data/lib/pangea/resources/aws_vpc_endpoint_connection_accepter/types.rb +0 -46
  1742. data/lib/pangea/resources/aws_vpc_endpoint_connection_notification/resource.rb +0 -73
  1743. data/lib/pangea/resources/aws_vpc_endpoint_connection_notification/types.rb +0 -50
  1744. data/lib/pangea/resources/aws_vpc_endpoint_route_table_association/resource.rb +0 -67
  1745. data/lib/pangea/resources/aws_vpc_endpoint_route_table_association/types.rb +0 -46
  1746. data/lib/pangea/resources/aws_vpc_endpoint_service/CLAUDE.md +0 -313
  1747. data/lib/pangea/resources/aws_vpc_endpoint_service/resource.rb +0 -127
  1748. data/lib/pangea/resources/aws_vpc_endpoint_service/types.rb +0 -144
  1749. data/lib/pangea/resources/aws_vpc_endpoint_service_allowed_principal/resource.rb +0 -67
  1750. data/lib/pangea/resources/aws_vpc_endpoint_service_allowed_principal/types.rb +0 -46
  1751. data/lib/pangea/resources/aws_vpc_endpoint_subnet_association/resource.rb +0 -67
  1752. data/lib/pangea/resources/aws_vpc_endpoint_subnet_association/types.rb +0 -46
  1753. data/lib/pangea/resources/aws_vpc_network_performance_metric_subscription/resource.rb +0 -67
  1754. data/lib/pangea/resources/aws_vpc_network_performance_metric_subscription/types.rb +0 -46
  1755. data/lib/pangea/resources/aws_vpc_peering_connection/CLAUDE.md +0 -361
  1756. data/lib/pangea/resources/aws_vpc_peering_connection/resource.rb +0 -118
  1757. data/lib/pangea/resources/aws_vpc_peering_connection/types.rb +0 -115
  1758. data/lib/pangea/resources/aws_vpc_peering_connection_accepter/CLAUDE.md +0 -248
  1759. data/lib/pangea/resources/aws_vpc_peering_connection_accepter/resource.rb +0 -67
  1760. data/lib/pangea/resources/aws_vpc_peering_connection_accepter/types.rb +0 -46
  1761. data/lib/pangea/resources/aws_vpc_peering_connection_options/resource.rb +0 -67
  1762. data/lib/pangea/resources/aws_vpc_peering_connection_options/types.rb +0 -46
  1763. data/lib/pangea/resources/aws_vpc_security_group_egress_rule/resource.rb +0 -67
  1764. data/lib/pangea/resources/aws_vpc_security_group_egress_rule/types.rb +0 -46
  1765. data/lib/pangea/resources/aws_vpc_security_group_ingress_rule/resource.rb +0 -67
  1766. data/lib/pangea/resources/aws_vpc_security_group_ingress_rule/types.rb +0 -46
  1767. data/lib/pangea/resources/aws_vpn_connection/CLAUDE.md +0 -420
  1768. data/lib/pangea/resources/aws_vpn_connection/resource.rb +0 -119
  1769. data/lib/pangea/resources/aws_vpn_connection/types.rb +0 -127
  1770. data/lib/pangea/resources/aws_vpn_gateway/CLAUDE.md +0 -411
  1771. data/lib/pangea/resources/aws_vpn_gateway/resource.rb +0 -92
  1772. data/lib/pangea/resources/aws_vpn_gateway/types.rb +0 -87
  1773. data/lib/pangea/resources/aws_wafv2_ip_set/resource.rb +0 -83
  1774. data/lib/pangea/resources/aws_wafv2_ip_set/types.rb +0 -141
  1775. data/lib/pangea/resources/aws_wafv2_ip_set.rbs +0 -36
  1776. data/lib/pangea/resources/aws_wafv2_regex_pattern_set/resource.rb +0 -89
  1777. data/lib/pangea/resources/aws_wafv2_regex_pattern_set/types.rb +0 -274
  1778. data/lib/pangea/resources/aws_wafv2_rule_group/resource.rb +0 -427
  1779. data/lib/pangea/resources/aws_wafv2_rule_group/types.rb +0 -270
  1780. data/lib/pangea/resources/aws_wafv2_rule_group.rbs +0 -44
  1781. data/lib/pangea/resources/aws_wafv2_web_acl/CLAUDE.md +0 -788
  1782. data/lib/pangea/resources/aws_wafv2_web_acl/resource.rb +0 -499
  1783. data/lib/pangea/resources/aws_wafv2_web_acl/types.rb +0 -544
  1784. data/lib/pangea/resources/aws_wafv2_web_acl.rbs +0 -309
  1785. data/lib/pangea/resources/aws_wavelength.rb +0 -323
  1786. data/lib/pangea/resources/aws_workspaces_bundle/CLAUDE.md +0 -412
  1787. data/lib/pangea/resources/aws_workspaces_bundle/resource.rb +0 -100
  1788. data/lib/pangea/resources/aws_workspaces_bundle/types.rb +0 -217
  1789. data/lib/pangea/resources/aws_workspaces_directory/CLAUDE.md +0 -365
  1790. data/lib/pangea/resources/aws_workspaces_directory/resource.rb +0 -133
  1791. data/lib/pangea/resources/aws_workspaces_directory/types.rb +0 -237
  1792. data/lib/pangea/resources/aws_workspaces_ip_group/CLAUDE.md +0 -421
  1793. data/lib/pangea/resources/aws_workspaces_ip_group/resource.rb +0 -93
  1794. data/lib/pangea/resources/aws_workspaces_ip_group/types.rb +0 -149
  1795. data/lib/pangea/resources/aws_workspaces_workspace/CLAUDE.md +0 -322
  1796. data/lib/pangea/resources/aws_workspaces_workspace/resource.rb +0 -108
  1797. data/lib/pangea/resources/aws_workspaces_workspace/types.rb +0 -184
  1798. data/lib/pangea/resources/aws_xray_encryption_config/resource.rb +0 -80
  1799. data/lib/pangea/resources/aws_xray_group/resource.rb +0 -113
  1800. data/lib/pangea/resources/aws_xray_sampling_rule/resource.rb +0 -146
  1801. data/lib/pangea/resources/base.rb +0 -81
  1802. data/lib/pangea/resources/composition.rb +0 -534
  1803. data/lib/pangea/resources/edge_computing_guide.md +0 -613
  1804. data/lib/pangea/resources/event_driven_example.rb +0 -288
  1805. data/lib/pangea/resources/helpers.rb +0 -54
  1806. data/lib/pangea/resources/reference.rb +0 -280
  1807. data/lib/pangea/resources/templates/resource_template.rb.erb +0 -56
  1808. data/lib/pangea/resources/types.rb +0 -1231
  1809. data/lib/pangea/resources.rb +0 -32
  1810. data/lib/pangea/types/aws_types.rb +0 -65
  1811. data/lib/pangea/types/base_types.rb +0 -51
  1812. data/lib/pangea/types/computed_types.rb +0 -23
  1813. data/lib/pangea/types/registry.rb +0 -68
  1814. data/lib/pangea/types.rb +0 -164
  1815. data/lib/pangea/ui.rb +0 -44
  1816. data/lib/pangea/utilities/analysis/README.md +0 -11
  1817. data/lib/pangea/utilities/cli/README.md +0 -11
  1818. data/lib/pangea/utilities/cli/command.rb +0 -98
  1819. data/lib/pangea/utilities/cli/commands/cost_command.rb +0 -117
  1820. data/lib/pangea/utilities/cli/commands/drift_command.rb +0 -127
  1821. data/lib/pangea/utilities/cli/commands/state_command.rb +0 -119
  1822. data/lib/pangea/utilities/cost/README.md +0 -12
  1823. data/lib/pangea/utilities/cost/calculator.rb +0 -174
  1824. data/lib/pangea/utilities/cost/resource_pricing.rb +0 -102
  1825. data/lib/pangea/utilities/cost.rb +0 -29
  1826. data/lib/pangea/utilities/drift/README.md +0 -12
  1827. data/lib/pangea/utilities/drift/detector.rb +0 -122
  1828. data/lib/pangea/utilities/drift/report.rb +0 -100
  1829. data/lib/pangea/utilities/drift.rb +0 -29
  1830. data/lib/pangea/utilities/migration/README.md +0 -11
  1831. data/lib/pangea/utilities/monitoring/README.md +0 -11
  1832. data/lib/pangea/utilities/remote_state/README.md +0 -12
  1833. data/lib/pangea/utilities/remote_state/dependency_manager.rb +0 -99
  1834. data/lib/pangea/utilities/remote_state/dsl_extensions.rb +0 -109
  1835. data/lib/pangea/utilities/remote_state/output_registry.rb +0 -119
  1836. data/lib/pangea/utilities/remote_state/reference.rb +0 -77
  1837. data/lib/pangea/utilities/remote_state.rb +0 -28
  1838. data/lib/pangea/utilities/validation/README.md +0 -11
  1839. data/lib/pangea/utilities/visualization/README.md +0 -12
  1840. data/lib/pangea/utilities/visualization/graph.rb +0 -112
  1841. data/lib/pangea/utilities/visualization/mermaid_exporter.rb +0 -149
  1842. data/lib/pangea/utilities/visualization.rb +0 -28
  1843. data/lib/pangea/utilities.rb +0 -39
  1844. data/lib/pangea/validation.rb +0 -100
  1845. data/pangea.yaml.example +0 -87
  1846. data/pangea.yml.example +0 -76
  1847. data/pangea_test.yml +0 -19
  1848. data/rbs_collection.yaml +0 -37
  1849. data/release.sh +0 -32
  1850. data/scripts/add_copyright_headers.rb +0 -65
  1851. data/scripts/analyze_resource_structure.rb +0 -127
  1852. data/scripts/audit_vpc_resources.rb +0 -36
  1853. data/scripts/discover_resources.rb +0 -53
  1854. data/scripts/find_untested_resources.rb +0 -115
  1855. data/scripts/generate_vpc_tests.rb +0 -21
  1856. data/scripts/prioritize_resources.rb +0 -72
  1857. data/scripts/synthesis_coverage_report.json +0 -3723
  1858. data/scripts/synthesis_coverage_report.rb +0 -284
  1859. data/scripts/synthesis_coverage_summary.rb +0 -233
  1860. data/scripts/synthesis_enhancement_tasks.json +0 -74
  1861. data/scripts/verify_implementation.rb +0 -146
  1862. data/scripts/verify_utilities.rb +0 -185
  1863. data/shell.nix +0 -13
  1864. data/sig/pangea/architectures.rbs +0 -260
  1865. data/sig/pangea/entities/namespace.rbs +0 -37
  1866. data/sig/pangea/resources/aws.rbs +0 -254
  1867. data/sig/pangea/resources/aws_acm_certificate.rbs +0 -23
  1868. data/sig/pangea/resources/aws_acm_certificate_validation.rbs +0 -20
  1869. data/sig/pangea/resources/aws_api_gateway_deployment.rbs +0 -49
  1870. data/sig/pangea/resources/aws_api_gateway_method.rbs +0 -51
  1871. data/sig/pangea/resources/aws_api_gateway_resource.rbs +0 -33
  1872. data/sig/pangea/resources/aws_api_gateway_rest_api.rbs +0 -60
  1873. data/sig/pangea/resources/aws_api_gateway_stage.rbs +0 -89
  1874. data/sig/pangea/resources/aws_appstream_fleet.rbs +0 -58
  1875. data/sig/pangea/resources/aws_batch_compute_environment.rbs +0 -54
  1876. data/sig/pangea/resources/aws_batch_job_definition.rbs +0 -69
  1877. data/sig/pangea/resources/aws_batch_job_queue.rbs +0 -65
  1878. data/sig/pangea/resources/aws_braket_device.rbs +0 -114
  1879. data/sig/pangea/resources/aws_braket_quantum_task.rbs +0 -32
  1880. data/sig/pangea/resources/aws_budgets_budget.rbs +0 -130
  1881. data/sig/pangea/resources/aws_budgets_budget_action.rbs +0 -95
  1882. data/sig/pangea/resources/aws_cloudfront_cache_policy.rbs +0 -18
  1883. data/sig/pangea/resources/aws_cloudfront_distribution.rbs +0 -124
  1884. data/sig/pangea/resources/aws_cloudfront_origin_access_control.rbs +0 -27
  1885. data/sig/pangea/resources/aws_cloudfront_origin_request_policy.rbs +0 -17
  1886. data/sig/pangea/resources/aws_cloudwatch_composite_alarm.rbs +0 -34
  1887. data/sig/pangea/resources/aws_cloudwatch_dashboard.rbs +0 -69
  1888. data/sig/pangea/resources/aws_cloudwatch_event_rule.rbs +0 -34
  1889. data/sig/pangea/resources/aws_cloudwatch_event_target.rbs +0 -80
  1890. data/sig/pangea/resources/aws_cloudwatch_log_destination.rbs +0 -26
  1891. data/sig/pangea/resources/aws_cloudwatch_log_destination_policy.rbs +0 -27
  1892. data/sig/pangea/resources/aws_cloudwatch_log_group.rbs +0 -28
  1893. data/sig/pangea/resources/aws_cloudwatch_log_metric_filter.rbs +0 -43
  1894. data/sig/pangea/resources/aws_cloudwatch_log_stream.rbs +0 -25
  1895. data/sig/pangea/resources/aws_cloudwatch_log_subscription_filter.rbs +0 -28
  1896. data/sig/pangea/resources/aws_codeartifact_domain.rbs +0 -29
  1897. data/sig/pangea/resources/aws_codeartifact_repository.rbs +0 -46
  1898. data/sig/pangea/resources/aws_codestar_connection.rbs +0 -36
  1899. data/sig/pangea/resources/aws_cognito_identity_pool.rbs +0 -56
  1900. data/sig/pangea/resources/aws_cognito_identity_provider.rbs +0 -46
  1901. data/sig/pangea/resources/aws_cognito_user.rbs +0 -36
  1902. data/sig/pangea/resources/aws_cognito_user_group.rbs +0 -34
  1903. data/sig/pangea/resources/aws_cognito_user_pool.rbs +0 -176
  1904. data/sig/pangea/resources/aws_cognito_user_pool_client.rbs +0 -75
  1905. data/sig/pangea/resources/aws_cognito_user_pool_domain.rbs +0 -46
  1906. data/sig/pangea/resources/aws_datasync_on_snow_location.rbs +0 -12
  1907. data/sig/pangea/resources/aws_datasync_on_snow_task.rbs +0 -12
  1908. data/sig/pangea/resources/aws_datasync_snow_ball_edge.rbs +0 -12
  1909. data/sig/pangea/resources/aws_db_parameter_group.rbs +0 -81
  1910. data/sig/pangea/resources/aws_db_subnet_group.rbs +0 -42
  1911. data/sig/pangea/resources/aws_ec2_carrier_gateway.rbs +0 -12
  1912. data/sig/pangea/resources/aws_ec2_local_gateway.rbs +0 -12
  1913. data/sig/pangea/resources/aws_ec2_local_gateway_route.rbs +0 -12
  1914. data/sig/pangea/resources/aws_ec2_local_gateway_route_table.rbs +0 -12
  1915. data/sig/pangea/resources/aws_ec2_local_gateway_route_table_vpc_association.rbs +0 -12
  1916. data/sig/pangea/resources/aws_ec2_local_gateway_virtual_interface_group_association.rbs +0 -12
  1917. data/sig/pangea/resources/aws_ecr_lifecycle_policy.rbs +0 -28
  1918. data/sig/pangea/resources/aws_ecr_replication_configuration.rbs +0 -42
  1919. data/sig/pangea/resources/aws_ecr_repository.rbs +0 -36
  1920. data/sig/pangea/resources/aws_ecr_repository_policy.rbs +0 -27
  1921. data/sig/pangea/resources/aws_ecs_cluster.rbs +0 -86
  1922. data/sig/pangea/resources/aws_ecs_cluster_capacity_providers.rbs +0 -59
  1923. data/sig/pangea/resources/aws_ecs_service.rbs +0 -238
  1924. data/sig/pangea/resources/aws_ecs_task_definition.rbs +0 -334
  1925. data/sig/pangea/resources/aws_efs_access_point.rbs +0 -33
  1926. data/sig/pangea/resources/aws_efs_file_system.rbs +0 -34
  1927. data/sig/pangea/resources/aws_efs_mount_target.rbs +0 -29
  1928. data/sig/pangea/resources/aws_eks_addon.rbs +0 -50
  1929. data/sig/pangea/resources/aws_eks_cluster.rbs +0 -79
  1930. data/sig/pangea/resources/aws_eks_fargate_profile.rbs +0 -43
  1931. data/sig/pangea/resources/aws_eks_node_group.rbs +0 -106
  1932. data/sig/pangea/resources/aws_elasticache_cluster.rbs +0 -39
  1933. data/sig/pangea/resources/aws_elasticache_parameter_group.rbs +0 -18
  1934. data/sig/pangea/resources/aws_elasticache_subnet_group.rbs +0 -17
  1935. data/sig/pangea/resources/aws_elemental_data_plane_channel.rbs +0 -18
  1936. data/sig/pangea/resources/aws_emrcontainers_virtual_cluster.rbs +0 -39
  1937. data/sig/pangea/resources/aws_frauddetector_detector.rbs +0 -76
  1938. data/sig/pangea/resources/aws_groundstation_antenna_downlink_config.rbs +0 -12
  1939. data/sig/pangea/resources/aws_groundstation_antenna_uplink_config.rbs +0 -12
  1940. data/sig/pangea/resources/aws_groundstation_config.rbs +0 -12
  1941. data/sig/pangea/resources/aws_groundstation_contact.rbs +0 -12
  1942. data/sig/pangea/resources/aws_groundstation_dataflow_endpoint_group.rbs +0 -12
  1943. data/sig/pangea/resources/aws_groundstation_mission_profile.rbs +0 -12
  1944. data/sig/pangea/resources/aws_groundstation_tracking_config.rbs +0 -12
  1945. data/sig/pangea/resources/aws_healthlake_fhir_datastore.rbs +0 -80
  1946. data/sig/pangea/resources/aws_iam_group.rbs +0 -71
  1947. data/sig/pangea/resources/aws_iam_policy.rbs +0 -62
  1948. data/sig/pangea/resources/aws_iam_role_policy_attachment.rbs +0 -88
  1949. data/sig/pangea/resources/aws_iam_user.rbs +0 -56
  1950. data/sig/pangea/resources/aws_kms_alias.rbs +0 -16
  1951. data/sig/pangea/resources/aws_kms_key.rbs +0 -23
  1952. data/sig/pangea/resources/aws_lambda_event_source_mapping.rbs +0 -116
  1953. data/sig/pangea/resources/aws_lambda_function.rbs +0 -137
  1954. data/sig/pangea/resources/aws_lambda_layer_version.rbs +0 -48
  1955. data/sig/pangea/resources/aws_lambda_permission.rbs +0 -44
  1956. data/sig/pangea/resources/aws_lightsail_bucket.rbs +0 -12
  1957. data/sig/pangea/resources/aws_lightsail_certificate.rbs +0 -12
  1958. data/sig/pangea/resources/aws_lightsail_database.rbs +0 -12
  1959. data/sig/pangea/resources/aws_lightsail_disk.rbs +0 -12
  1960. data/sig/pangea/resources/aws_lightsail_disk_attachment.rbs +0 -12
  1961. data/sig/pangea/resources/aws_lightsail_domain.rbs +0 -12
  1962. data/sig/pangea/resources/aws_lightsail_instance.rbs +0 -12
  1963. data/sig/pangea/resources/aws_lightsail_key_pair.rbs +0 -12
  1964. data/sig/pangea/resources/aws_lightsail_load_balancer.rbs +0 -12
  1965. data/sig/pangea/resources/aws_lightsail_load_balancer_attachment.rbs +0 -12
  1966. data/sig/pangea/resources/aws_lightsail_static_ip.rbs +0 -12
  1967. data/sig/pangea/resources/aws_lightsail_static_ip_attachment.rbs +0 -12
  1968. data/sig/pangea/resources/aws_lookoutequipment_dataset.rbs +0 -73
  1969. data/sig/pangea/resources/aws_managedblockchain_member.rbs +0 -73
  1970. data/sig/pangea/resources/aws_managedblockchain_network.rbs +0 -102
  1971. data/sig/pangea/resources/aws_managedblockchain_node.rbs +0 -71
  1972. data/sig/pangea/resources/aws_media_convert_queue.rbs +0 -20
  1973. data/sig/pangea/resources/aws_media_live_channel.rbs +0 -67
  1974. data/sig/pangea/resources/aws_media_live_input.rbs +0 -68
  1975. data/sig/pangea/resources/aws_media_package_channel.rbs +0 -35
  1976. data/sig/pangea/resources/aws_media_package_origin_endpoint.rbs +0 -29
  1977. data/sig/pangea/resources/aws_media_store_container.rbs +0 -13
  1978. data/sig/pangea/resources/aws_outposts_asset.rbs +0 -12
  1979. data/sig/pangea/resources/aws_outposts_capacity_task.rbs +0 -12
  1980. data/sig/pangea/resources/aws_outposts_connection.rbs +0 -12
  1981. data/sig/pangea/resources/aws_outposts_order.rbs +0 -12
  1982. data/sig/pangea/resources/aws_outposts_outpost.rbs +0 -12
  1983. data/sig/pangea/resources/aws_outposts_outpost_instance_type.rbs +0 -12
  1984. data/sig/pangea/resources/aws_outposts_site.rbs +0 -12
  1985. data/sig/pangea/resources/aws_outposts_supported_hardware_type.rbs +0 -12
  1986. data/sig/pangea/resources/aws_qldb_ledger.rbs +0 -37
  1987. data/sig/pangea/resources/aws_qldb_stream.rbs +0 -53
  1988. data/sig/pangea/resources/aws_rds_cluster.rbs +0 -193
  1989. data/sig/pangea/resources/aws_rds_cluster_instance.rbs +0 -128
  1990. data/sig/pangea/resources/aws_route53_health_check.rbs +0 -34
  1991. data/sig/pangea/resources/aws_route53_record.rbs +0 -63
  1992. data/sig/pangea/resources/aws_route53_zone.rbs +0 -26
  1993. data/sig/pangea/resources/aws_s3_bucket_cors_configuration.rbs +0 -42
  1994. data/sig/pangea/resources/aws_s3_bucket_inventory.rbs +0 -78
  1995. data/sig/pangea/resources/aws_s3_bucket_lifecycle_configuration.rbs +0 -94
  1996. data/sig/pangea/resources/aws_s3_bucket_notification.rbs +0 -65
  1997. data/sig/pangea/resources/aws_s3_bucket_object_lock_configuration.rbs +0 -51
  1998. data/sig/pangea/resources/aws_s3_bucket_replication_configuration.rbs +0 -107
  1999. data/sig/pangea/resources/aws_s3_bucket_website_configuration.rbs +0 -74
  2000. data/sig/pangea/resources/aws_sagemaker_feature_group.rbs +0 -58
  2001. data/sig/pangea/resources/aws_secretsmanager_secret.rbs +0 -29
  2002. data/sig/pangea/resources/aws_secretsmanager_secret_version.rbs +0 -21
  2003. data/sig/pangea/resources/aws_sfn_activity.rbs +0 -36
  2004. data/sig/pangea/resources/aws_sfn_state_machine.rbs +0 -54
  2005. data/sig/pangea/resources/aws_snowball_cluster.rbs +0 -12
  2006. data/sig/pangea/resources/aws_snowball_job.rbs +0 -12
  2007. data/sig/pangea/resources/aws_snowcone_device.rbs +0 -12
  2008. data/sig/pangea/resources/aws_snowcone_job.rbs +0 -12
  2009. data/sig/pangea/resources/aws_snowmobile_job.rbs +0 -12
  2010. data/sig/pangea/resources/aws_sns_subscription.rbs +0 -49
  2011. data/sig/pangea/resources/aws_sns_topic.rbs +0 -78
  2012. data/sig/pangea/resources/aws_sqs_queue.rbs +0 -67
  2013. data/sig/pangea/resources/aws_sqs_queue_policy.rbs +0 -29
  2014. data/sig/pangea/resources/aws_wavelength_application_deployment.rbs +0 -12
  2015. data/sig/pangea/resources/aws_wavelength_deployment.rbs +0 -12
  2016. data/sig/pangea/resources/aws_wavelength_edge_location_mapping.rbs +0 -12
  2017. data/sig/pangea/resources/aws_wavelength_network_interface.rbs +0 -12
  2018. data/sig/pangea/resources/aws_wavelength_workload.rbs +0 -12
  2019. data/sig/pangea/resources/aws_workspaces_bundle.rbs +0 -50
  2020. data/sig/pangea/resources/aws_workspaces_directory.rbs +0 -63
  2021. data/sig/pangea/resources/aws_workspaces_ip_group.rbs +0 -41
  2022. data/sig/pangea/resources/aws_workspaces_workspace.rbs +0 -40
  2023. data/sig/pangea/structures/namespace.rbs +0 -28
  2024. data/sig/pangea/structures/project.rbs +0 -20
  2025. data/sig/pangea/types.rbs +0 -76
  2026. data/sig/pangea.rbs +0 -13
  2027. data/test_infrastructure/infrastructure.rb +0 -510
  2028. data/test_infrastructure/main.tf.json +0 -15
  2029. data/test_infrastructure/multi_template_infrastructure.rb +0 -125
  2030. data/test_infrastructure/pangea.yml +0 -35
  2031. data/test_infrastructure/simple_infrastructure.rb +0 -82
  2032. data/test_infrastructure/test_multi_workspaces.rb +0 -90
  2033. data/test_infrastructure/test_template_workspaces.rb +0 -62
  2034. data/test_infrastructure/workspace_compute.tf.json +0 -46
  2035. data/test_infrastructure/workspace_local_resources.tf.json +0 -41
  2036. data/test_infrastructure/workspace_networking.tf.json +0 -32
  2037. data/test_infrastructure/workspace_storage.tf.json +0 -34
  2038. data/tools/README.md +0 -245
  2039. data/tools/analyze_terraform_docs.rb +0 -367
  2040. data/tools/batch_generate_resources.rb +0 -304
  2041. data/tools/complete_resource_data.rb +0 -492
  2042. data/tools/database_batch.yaml +0 -62
  2043. data/tools/database_resource_data.rb +0 -454
  2044. data/tools/enhance_database_batch.rb +0 -69
  2045. data/tools/enhance_remaining_batch.rb +0 -61
  2046. data/tools/generate_resource.rb +0 -530
  2047. data/tools/priority_resources.yaml +0 -95
  2048. data/tools/resource_enhancer.rb +0 -531
  2049. data/tools/simple_validation.rb +0 -231
  2050. data/tools/update_aws_loader.rb +0 -150
  2051. data/tools/validate_database_resources.rb +0 -444
@@ -1,2877 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright 2025 The Pangea Authors
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
-
17
- require 'pangea/components/base'
18
- require 'pangea/components/siem_security_platform/types'
19
-
20
- module Pangea
21
- module Components
22
- module SiemSecurityPlatform
23
- # SIEM Security Platform Component
24
- # Implements comprehensive security information and event management
25
- def siem_security_platform(name, attributes = {})
26
- # Validate attributes
27
- attrs = Attributes.new(attributes)
28
-
29
- # Component resources
30
- resources = {
31
- opensearch_domain: nil,
32
- firehose_streams: {},
33
- lambda_functions: {},
34
- cloudwatch_logs: {},
35
- s3_buckets: {},
36
- sns_topics: {},
37
- sqs_queues: {},
38
- event_rules: {},
39
- step_functions: {},
40
- iam_roles: {},
41
- security_groups: {},
42
- kms_keys: {},
43
- secrets: {},
44
- alarms: {}
45
- }
46
-
47
- # Create KMS key for encryption
48
- kms_key_name = component_resource_name(name, :kms_key)
49
- resources[:kms_keys][:main] = aws_kms_key(kms_key_name, {
50
- description: "SIEM encryption key for #{name}",
51
- key_policy: generate_kms_policy(name),
52
- tags: component_tags('siem_security_platform', name, attrs.tags)
53
- })
54
-
55
- aws_kms_alias(:"#{kms_key_name}_alias", {
56
- name: "alias/siem-#{name}",
57
- target_key_id: resources[:kms_keys][:main].id
58
- })
59
-
60
- # Create security group for OpenSearch
61
- sg_name = component_resource_name(name, :opensearch_sg)
62
- resources[:security_groups][:opensearch] = aws_security_group(sg_name, {
63
- name: "siem-opensearch-#{name}",
64
- description: "Security group for SIEM OpenSearch domain",
65
- vpc_id: attrs.vpc_ref,
66
- tags: component_tags('siem_security_platform', name, attrs.tags)
67
- })
68
-
69
- # Allow HTTPS access
70
- aws_vpc_security_group_ingress_rule(:"#{sg_name}_https", {
71
- security_group_id: resources[:security_groups][:opensearch].id,
72
- description: "Allow HTTPS for OpenSearch",
73
- from_port: 443,
74
- to_port: 443,
75
- ip_protocol: 'tcp',
76
- cidr_ipv4: '10.0.0.0/8'
77
- })
78
-
79
- # Create OpenSearch domain
80
- domain_name = attrs.opensearch_config[:domain_name]
81
- resources[:opensearch_domain] = aws_opensearch_domain(:"#{name}_opensearch", {
82
- domain_name: domain_name,
83
- engine_version: attrs.opensearch_config[:engine_version],
84
-
85
- cluster_config: {
86
- instance_type: attrs.opensearch_config[:instance_type],
87
- instance_count: attrs.opensearch_config[:instance_count],
88
- dedicated_master_enabled: attrs.opensearch_config[:dedicated_master_enabled],
89
- dedicated_master_type: attrs.opensearch_config[:dedicated_master_type],
90
- dedicated_master_count: attrs.opensearch_config[:dedicated_master_count],
91
- zone_awareness_enabled: attrs.opensearch_config[:zone_awareness_enabled],
92
- zone_awareness_config: attrs.opensearch_config[:zone_awareness_enabled] ? {
93
- availability_zone_count: attrs.opensearch_config[:availability_zone_count]
94
- } : nil
95
- },
96
-
97
- ebs_options: {
98
- ebs_enabled: attrs.opensearch_config[:ebs_enabled],
99
- volume_type: attrs.opensearch_config[:volume_type],
100
- volume_size: attrs.opensearch_config[:volume_size],
101
- iops: attrs.opensearch_config[:iops],
102
- throughput: attrs.opensearch_config[:throughput]
103
- },
104
-
105
- vpc_options: {
106
- subnet_ids: attrs.subnet_refs.take(attrs.opensearch_config[:availability_zone_count] || 3),
107
- security_group_ids: [resources[:security_groups][:opensearch].id]
108
- },
109
-
110
- encrypt_at_rest: attrs.security_config[:enable_encryption_at_rest] ? {
111
- enabled: true,
112
- kms_key_id: resources[:kms_keys][:main].id
113
- } : nil,
114
-
115
- node_to_node_encryption: {
116
- enabled: attrs.security_config[:enable_encryption_in_transit]
117
- },
118
-
119
- advanced_security_options: attrs.security_config[:enable_fine_grained_access] ? {
120
- enabled: true,
121
- internal_user_database_enabled: false,
122
- master_user_options: {
123
- master_user_arn: attrs.security_config[:master_user_arn]
124
- }
125
- } : nil,
126
-
127
- log_publishing_options: {
128
- ES_APPLICATION_LOGS: {
129
- enabled: true,
130
- cloudwatch_log_group_arn: create_log_group(name, 'es-application', attrs, resources)
131
- },
132
- SEARCH_SLOW_LOGS: attrs.security_config[:enable_slow_logs] ? {
133
- enabled: true,
134
- cloudwatch_log_group_arn: create_log_group(name, 'es-slow', attrs, resources)
135
- } : nil,
136
- AUDIT_LOGS: attrs.security_config[:enable_audit_logs] ? {
137
- enabled: true,
138
- cloudwatch_log_group_arn: create_log_group(name, 'es-audit', attrs, resources)
139
- } : nil
140
- },
141
-
142
- tags: component_tags('siem_security_platform', name, attrs.tags)
143
- })
144
-
145
- # Create S3 bucket for Firehose backup
146
- backup_bucket_name = component_resource_name(name, :backup_bucket)
147
- resources[:s3_buckets][:backup] = create_secure_bucket(
148
- backup_bucket_name,
149
- "siem-backup-#{name}",
150
- attrs,
151
- resources
152
- )
153
-
154
- # Create Firehose delivery streams for each log source
155
- attrs.log_sources.each do |source|
156
- create_firehose_stream(name, source, attrs, resources)
157
- end
158
-
159
- # Create Lambda functions for data processing
160
- create_processing_lambdas(name, attrs, resources)
161
-
162
- # Create correlation engine
163
- create_correlation_engine(name, attrs, resources)
164
-
165
- # Create threat detection components
166
- create_threat_detection(name, attrs, resources)
167
-
168
- # Create incident response automation
169
- create_incident_response(name, attrs, resources)
170
-
171
- # Create monitoring and alerting
172
- create_monitoring(name, attrs, resources)
173
-
174
- # Create dashboards
175
- create_dashboards(name, attrs, resources)
176
-
177
- # Set up integrations
178
- attrs.integrations.each do |integration|
179
- create_integration(name, integration, attrs, resources)
180
- end
181
-
182
- # Component outputs
183
- outputs = {
184
- opensearch_domain_endpoint: resources[:opensearch_domain].endpoint,
185
- opensearch_domain_arn: resources[:opensearch_domain].arn,
186
- opensearch_dashboard_url: "https://#{resources[:opensearch_domain].endpoint}/_dashboards/",
187
- firehose_streams: resources[:firehose_streams].transform_values { |stream| stream.arn },
188
- correlation_engine_arn: resources[:step_functions][:correlation_engine]&.arn,
189
- incident_response_arn: resources[:step_functions][:incident_response]&.arn,
190
- security_score: calculate_siem_security_score(attrs),
191
- compliance_status: generate_siem_compliance_status(attrs)
192
- }
193
-
194
- # Create component reference
195
- create_component_reference(
196
- 'siem_security_platform',
197
- name,
198
- attrs.to_h,
199
- resources,
200
- outputs
201
- )
202
- end
203
-
204
- private
205
-
206
- def generate_kms_policy(name)
207
- JSON.pretty_generate({
208
- Version: "2012-10-17",
209
- Statement: [
210
- {
211
- Sid: "Enable IAM User Permissions",
212
- Effect: "Allow",
213
- Principal: {
214
- AWS: "arn:aws:iam::#{aws_account_id}:root"
215
- },
216
- Action: "kms:*",
217
- Resource: "*"
218
- },
219
- {
220
- Sid: "Allow use of the key for SIEM services",
221
- Effect: "Allow",
222
- Principal: {
223
- Service: [
224
- "es.amazonaws.com",
225
- "firehose.amazonaws.com",
226
- "lambda.amazonaws.com",
227
- "logs.amazonaws.com"
228
- ]
229
- },
230
- Action: [
231
- "kms:Decrypt",
232
- "kms:GenerateDataKey"
233
- ],
234
- Resource: "*"
235
- }
236
- ]
237
- })
238
- end
239
-
240
- def create_log_group(name, type, attrs, resources)
241
- log_group_name = component_resource_name(name, :log_group, type)
242
- log_group = aws_cloudwatch_log_group(log_group_name, {
243
- name: "/aws/siem/#{name}/#{type}",
244
- retention_in_days: attrs.incident_response[:retention_days],
245
- kms_key_id: resources[:kms_keys][:main].arn,
246
- tags: component_tags('siem_security_platform', name, attrs.tags)
247
- })
248
-
249
- resources[:cloudwatch_logs][type] = log_group
250
- log_group.arn
251
- end
252
-
253
- def create_secure_bucket(bucket_name, bucket_id, attrs, resources)
254
- bucket = aws_s3_bucket(bucket_name, {
255
- bucket: bucket_id,
256
- tags: component_tags('siem_security_platform', name, attrs.tags)
257
- })
258
-
259
- # Enable versioning
260
- aws_s3_bucket_versioning(:"#{bucket_name}_versioning", {
261
- bucket: bucket.id,
262
- versioning_configuration: {
263
- status: "Enabled"
264
- }
265
- })
266
-
267
- # Enable encryption
268
- aws_s3_bucket_server_side_encryption_configuration(:"#{bucket_name}_encryption", {
269
- bucket: bucket.id,
270
- rule: {
271
- apply_server_side_encryption_by_default: {
272
- sse_algorithm: "aws:kms",
273
- kms_master_key_id: resources[:kms_keys][:main].id
274
- },
275
- bucket_key_enabled: true
276
- }
277
- })
278
-
279
- # Block public access
280
- aws_s3_bucket_public_access_block(:"#{bucket_name}_pab", {
281
- bucket: bucket.id,
282
- block_public_acls: true,
283
- block_public_policy: true,
284
- ignore_public_acls: true,
285
- restrict_public_buckets: true
286
- })
287
-
288
- # Add lifecycle rules
289
- aws_s3_bucket_lifecycle_configuration(:"#{bucket_name}_lifecycle", {
290
- bucket: bucket.id,
291
- rule: [
292
- {
293
- id: "transition-to-glacier",
294
- status: "Enabled",
295
- transition: [
296
- {
297
- days: 90,
298
- storage_class: "GLACIER"
299
- }
300
- ],
301
- expiration: {
302
- days: attrs.compliance_config[:audit_trail_retention]
303
- }
304
- }
305
- ]
306
- })
307
-
308
- bucket
309
- end
310
-
311
- def create_firehose_stream(name, source, attrs, resources)
312
- stream_name = component_resource_name(name, :firehose, source[:name])
313
-
314
- # Create IAM role for Firehose
315
- role_name = component_resource_name(name, :firehose_role, source[:name])
316
- resources[:iam_roles][:"firehose_#{source[:name]}"] = create_firehose_role(
317
- role_name,
318
- attrs,
319
- resources
320
- )
321
-
322
- # Create processing Lambda if transformation is needed
323
- processor_arn = nil
324
- if attrs.firehose_config[:enable_data_transformation] || source[:transformation]
325
- processor_arn = create_stream_processor(name, source, attrs, resources)
326
- end
327
-
328
- resources[:firehose_streams][source[:name]] = aws_kinesis_firehose_delivery_stream(stream_name, {
329
- name: "siem-#{name}-#{source[:name]}",
330
- destination: "opensearch",
331
-
332
- opensearch_configuration: {
333
- domain_arn: resources[:opensearch_domain].arn,
334
- index_name: "siem-#{source[:type]}",
335
- index_rotation_period: "OneDay",
336
- type_name: "_doc",
337
- role_arn: resources[:iam_roles][:"firehose_#{source[:name]}"].arn,
338
-
339
- buffering_hints: {
340
- interval_in_seconds: attrs.firehose_config[:buffer_interval],
341
- size_in_mbs: attrs.firehose_config[:buffer_size]
342
- },
343
-
344
- cloudwatch_logging_options: {
345
- enabled: true,
346
- log_group_name: "/aws/kinesisfirehose/siem-#{name}",
347
- log_stream_name: source[:name]
348
- },
349
-
350
- processing_configuration: processor_arn ? {
351
- enabled: true,
352
- processors: [{
353
- type: "Lambda",
354
- parameters: [{
355
- parameter_name: "LambdaArn",
356
- parameter_value: processor_arn
357
- }]
358
- }]
359
- } : nil,
360
-
361
- s3_configuration: {
362
- bucket_arn: resources[:s3_buckets][:backup].arn,
363
- prefix: "#{source[:type]}/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/",
364
- error_output_prefix: "#{attrs.firehose_config[:error_output_prefix]}#{source[:type]}/",
365
- compression_format: attrs.firehose_config[:compression_format],
366
- role_arn: resources[:iam_roles][:"firehose_#{source[:name]}"].arn
367
- },
368
-
369
- vpc_config: {
370
- subnet_ids: attrs.subnet_refs,
371
- security_group_ids: [resources[:security_groups][:opensearch].id],
372
- role_arn: resources[:iam_roles][:"firehose_#{source[:name]}"].arn
373
- }
374
- },
375
-
376
- tags: component_tags('siem_security_platform', name, attrs.tags.merge(
377
- LogSource: source[:name]
378
- ))
379
- })
380
-
381
- # Configure log source subscription
382
- configure_log_source_subscription(name, source, attrs, resources)
383
- end
384
-
385
- def create_firehose_role(role_name, attrs, resources)
386
- role = aws_iam_role(role_name, {
387
- name: role_name.to_s,
388
- assume_role_policy: JSON.pretty_generate({
389
- Version: "2012-10-17",
390
- Statement: [{
391
- Action: "sts:AssumeRole",
392
- Effect: "Allow",
393
- Principal: {
394
- Service: "firehose.amazonaws.com"
395
- }
396
- }]
397
- }),
398
- tags: component_tags('siem_security_platform', name, attrs.tags)
399
- })
400
-
401
- # Create and attach policy
402
- policy_name = :"#{role_name}_policy"
403
- policy = aws_iam_role_policy(policy_name, {
404
- role: role.id,
405
- policy: JSON.pretty_generate({
406
- Version: "2012-10-17",
407
- Statement: [
408
- {
409
- Effect: "Allow",
410
- Action: [
411
- "es:ESHttpPost",
412
- "es:ESHttpPut"
413
- ],
414
- Resource: [
415
- resources[:opensearch_domain].arn,
416
- "#{resources[:opensearch_domain].arn}/*"
417
- ]
418
- },
419
- {
420
- Effect: "Allow",
421
- Action: [
422
- "s3:GetObject",
423
- "s3:PutObject"
424
- ],
425
- Resource: "#{resources[:s3_buckets][:backup].arn}/*"
426
- },
427
- {
428
- Effect: "Allow",
429
- Action: [
430
- "kms:Decrypt",
431
- "kms:GenerateDataKey"
432
- ],
433
- Resource: resources[:kms_keys][:main].arn
434
- },
435
- {
436
- Effect: "Allow",
437
- Action: [
438
- "logs:CreateLogGroup",
439
- "logs:CreateLogStream",
440
- "logs:PutLogEvents"
441
- ],
442
- Resource: "*"
443
- },
444
- {
445
- Effect: "Allow",
446
- Action: [
447
- "lambda:InvokeFunction"
448
- ],
449
- Resource: "arn:aws:lambda:*:*:function:siem-*"
450
- }
451
- ]
452
- })
453
- })
454
-
455
- role
456
- end
457
-
458
- def create_stream_processor(name, source, attrs, resources)
459
- processor_name = component_resource_name(name, :processor, source[:name])
460
-
461
- # Create Lambda function
462
- lambda_function = aws_lambda_function(processor_name, {
463
- function_name: "siem-processor-#{name}-#{source[:name]}",
464
- runtime: "python3.11",
465
- handler: "index.lambda_handler",
466
- role: create_lambda_execution_role(name, "processor-#{source[:name]}", attrs, resources),
467
- timeout: 300,
468
- memory_size: 512,
469
-
470
- environment: {
471
- variables: {
472
- LOG_SOURCE_TYPE: source[:type],
473
- LOG_FORMAT: source[:format],
474
- ENABLE_ENRICHMENT: source[:enrichment].to_s,
475
- THREAT_INTEL_TABLE: resources[:dynamodb_tables]&.dig(:threat_intel)&.name || ""
476
- }
477
- },
478
-
479
- code: {
480
- zip_file: generate_processor_code(source)
481
- },
482
-
483
- tags: component_tags('siem_security_platform', name, attrs.tags)
484
- })
485
-
486
- resources[:lambda_functions][:"processor_#{source[:name]}"] = lambda_function
487
- lambda_function.arn
488
- end
489
-
490
- def generate_processor_code(source)
491
- <<~PYTHON
492
- import json
493
- import base64
494
- import os
495
- import boto3
496
- from datetime import datetime
497
- import re
498
- import ipaddress
499
-
500
- def lambda_handler(event, context):
501
- output_records = []
502
-
503
- for record in event['records']:
504
- # Decode the data
505
- payload = base64.b64decode(record['data']).decode('utf-8')
506
-
507
- try:
508
- # Parse based on format
509
- parsed_data = parse_log_data(payload, os.environ['LOG_FORMAT'])
510
-
511
- # Add metadata
512
- parsed_data['@timestamp'] = datetime.utcnow().isoformat()
513
- parsed_data['log_source'] = os.environ['LOG_SOURCE_TYPE']
514
- parsed_data['processing_timestamp'] = datetime.utcnow().isoformat()
515
-
516
- # Enrich data if enabled
517
- if os.environ.get('ENABLE_ENRICHMENT', 'false').lower() == 'true':
518
- parsed_data = enrich_data(parsed_data)
519
-
520
- # Normalize fields
521
- parsed_data = normalize_fields(parsed_data)
522
-
523
- # Convert back to JSON
524
- output_data = json.dumps(parsed_data) + '\\n'
525
-
526
- output_records.append({
527
- 'recordId': record['recordId'],
528
- 'result': 'Ok',
529
- 'data': base64.b64encode(output_data.encode('utf-8')).decode('utf-8')
530
- })
531
-
532
- except Exception as e:
533
- # Send failed records to error output
534
- output_records.append({
535
- 'recordId': record['recordId'],
536
- 'result': 'ProcessingFailed',
537
- 'data': record['data']
538
- })
539
-
540
- return {'records': output_records}
541
-
542
- def parse_log_data(data, format_type):
543
- if format_type == 'json':
544
- return json.loads(data)
545
- elif format_type == 'csv':
546
- # Implement CSV parsing
547
- return parse_csv(data)
548
- elif format_type == 'syslog':
549
- # Implement syslog parsing
550
- return parse_syslog(data)
551
- else:
552
- return {'raw_data': data}
553
-
554
- def enrich_data(data):
555
- # Add GeoIP enrichment
556
- if 'source_ip' in data:
557
- data['source_geo'] = lookup_geoip(data['source_ip'])
558
-
559
- # Add threat intelligence enrichment
560
- if 'source_ip' in data or 'domain' in data:
561
- data['threat_intel'] = check_threat_intel(data)
562
-
563
- # Add user context
564
- if 'user_id' in data:
565
- data['user_context'] = get_user_context(data['user_id'])
566
-
567
- return data
568
-
569
- def normalize_fields(data):
570
- # Normalize common field names
571
- field_mappings = {
572
- 'src_ip': 'source_ip',
573
- 'dst_ip': 'destination_ip',
574
- 'src_port': 'source_port',
575
- 'dst_port': 'destination_port',
576
- 'username': 'user_name',
577
- 'userid': 'user_id'
578
- }
579
-
580
- for old_field, new_field in field_mappings.items():
581
- if old_field in data:
582
- data[new_field] = data.pop(old_field)
583
-
584
- return data
585
-
586
- def parse_csv(data):
587
- # Implement CSV parsing logic
588
- return {'raw': data}
589
-
590
- def parse_syslog(data):
591
- # Implement syslog parsing logic
592
- return {'raw': data}
593
-
594
- def lookup_geoip(ip):
595
- # Implement GeoIP lookup
596
- return {'country': 'US', 'city': 'Unknown'}
597
-
598
- def check_threat_intel(data):
599
- # Implement threat intelligence lookup
600
- return {'reputation': 'clean', 'score': 0}
601
-
602
- def get_user_context(user_id):
603
- # Implement user context lookup
604
- return {'department': 'Unknown', 'risk_score': 0}
605
- PYTHON
606
- end
607
-
608
- def create_lambda_execution_role(name, function_type, attrs, resources)
609
- role_name = component_resource_name(name, :lambda_role, function_type)
610
- role = aws_iam_role(role_name, {
611
- name: role_name.to_s,
612
- assume_role_policy: JSON.pretty_generate({
613
- Version: "2012-10-17",
614
- Statement: [{
615
- Action: "sts:AssumeRole",
616
- Effect: "Allow",
617
- Principal: {
618
- Service: "lambda.amazonaws.com"
619
- }
620
- }]
621
- }),
622
- tags: component_tags('siem_security_platform', name, attrs.tags)
623
- })
624
-
625
- # Attach basic execution policy
626
- aws_iam_role_policy_attachment(:"#{role_name}_basic", {
627
- role: role.name,
628
- policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
629
- })
630
-
631
- # Attach VPC execution policy if needed
632
- aws_iam_role_policy_attachment(:"#{role_name}_vpc", {
633
- role: role.name,
634
- policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
635
- })
636
-
637
- # Create custom policy for SIEM operations
638
- custom_policy = aws_iam_role_policy(:"#{role_name}_custom", {
639
- role: role.id,
640
- policy: JSON.pretty_generate({
641
- Version: "2012-10-17",
642
- Statement: [
643
- {
644
- Effect: "Allow",
645
- Action: [
646
- "es:ESHttpPost",
647
- "es:ESHttpGet"
648
- ],
649
- Resource: "#{resources[:opensearch_domain].arn}/*"
650
- },
651
- {
652
- Effect: "Allow",
653
- Action: [
654
- "dynamodb:GetItem",
655
- "dynamodb:Query",
656
- "dynamodb:Scan"
657
- ],
658
- Resource: "arn:aws:dynamodb:*:*:table/siem-*"
659
- },
660
- {
661
- Effect: "Allow",
662
- Action: [
663
- "kms:Decrypt"
664
- ],
665
- Resource: resources[:kms_keys][:main].arn
666
- },
667
- {
668
- Effect: "Allow",
669
- Action: [
670
- "sns:Publish"
671
- ],
672
- Resource: "arn:aws:sns:*:*:siem-*"
673
- }
674
- ]
675
- })
676
- })
677
-
678
- resources[:iam_roles][function_type.to_sym] = role
679
- role.arn
680
- end
681
-
682
- def configure_log_source_subscription(name, source, attrs, resources)
683
- case source[:type]
684
- when 'cloudwatch'
685
- if source[:log_group_name]
686
- # Create subscription filter
687
- aws_cloudwatch_log_subscription_filter(:"#{name}_#{source[:name]}_subscription", {
688
- name: "siem-#{name}-#{source[:name]}",
689
- log_group_name: source[:log_group_name],
690
- filter_pattern: "",
691
- destination_arn: resources[:firehose_streams][source[:name]].arn,
692
- role_arn: create_logs_role(name, source[:name], attrs, resources)
693
- })
694
- end
695
- when 's3_access'
696
- # Configure S3 bucket logging
697
- if source[:s3_bucket]
698
- aws_s3_bucket_logging(:"#{name}_#{source[:name]}_logging", {
699
- bucket: source[:s3_bucket],
700
- target_bucket: resources[:s3_buckets][:backup].id,
701
- target_prefix: "s3-access-logs/#{source[:s3_bucket]}/"
702
- })
703
- end
704
- end
705
- end
706
-
707
- def create_logs_role(name, source_name, attrs, resources)
708
- role_name = component_resource_name(name, :logs_role, source_name)
709
- role = aws_iam_role(role_name, {
710
- name: role_name.to_s,
711
- assume_role_policy: JSON.pretty_generate({
712
- Version: "2012-10-17",
713
- Statement: [{
714
- Action: "sts:AssumeRole",
715
- Effect: "Allow",
716
- Principal: {
717
- Service: "logs.amazonaws.com"
718
- }
719
- }]
720
- }),
721
- tags: component_tags('siem_security_platform', name, attrs.tags)
722
- })
723
-
724
- aws_iam_role_policy(:"#{role_name}_policy", {
725
- role: role.id,
726
- policy: JSON.pretty_generate({
727
- Version: "2012-10-17",
728
- Statement: [{
729
- Effect: "Allow",
730
- Action: [
731
- "firehose:PutRecord",
732
- "firehose:PutRecordBatch"
733
- ],
734
- Resource: resources[:firehose_streams][source_name].arn
735
- }]
736
- })
737
- })
738
-
739
- role.arn
740
- end
741
-
742
- def create_processing_lambdas(name, attrs, resources)
743
- # Create Lambda for correlation engine
744
- correlation_lambda = component_resource_name(name, :correlation_lambda)
745
- resources[:lambda_functions][:correlation] = aws_lambda_function(correlation_lambda, {
746
- function_name: "siem-correlation-#{name}",
747
- runtime: "python3.11",
748
- handler: "index.lambda_handler",
749
- role: create_lambda_execution_role(name, "correlation", attrs, resources),
750
- timeout: 900,
751
- memory_size: 3008,
752
-
753
- environment: {
754
- variables: {
755
- OPENSEARCH_ENDPOINT: resources[:opensearch_domain].endpoint,
756
- CORRELATION_RULES: JSON.generate(attrs.correlation_rules),
757
- SNS_TOPIC_ARN: create_alert_topic(name, attrs, resources)
758
- }
759
- },
760
-
761
- code: {
762
- zip_file: generate_correlation_engine_code()
763
- },
764
-
765
- tags: component_tags('siem_security_platform', name, attrs.tags)
766
- })
767
-
768
- # Create Lambda for threat detection
769
- if attrs.threat_detection[:enable_ml_detection]
770
- ml_lambda = component_resource_name(name, :ml_detection_lambda)
771
- resources[:lambda_functions][:ml_detection] = aws_lambda_function(ml_lambda, {
772
- function_name: "siem-ml-detection-#{name}",
773
- runtime: "python3.11",
774
- handler: "index.lambda_handler",
775
- role: create_lambda_execution_role(name, "ml-detection", attrs, resources),
776
- timeout: 900,
777
- memory_size: 3008,
778
-
779
- environment: {
780
- variables: {
781
- OPENSEARCH_ENDPOINT: resources[:opensearch_domain].endpoint,
782
- ANOMALY_DETECTORS: JSON.generate(attrs.threat_detection[:anomaly_detectors]),
783
- ENABLE_BEHAVIOR_ANALYTICS: attrs.threat_detection[:enable_behavior_analytics].to_s
784
- }
785
- },
786
-
787
- code: {
788
- zip_file: generate_ml_detection_code()
789
- },
790
-
791
- tags: component_tags('siem_security_platform', name, attrs.tags)
792
- })
793
- end
794
- end
795
-
796
- def generate_correlation_engine_code
797
- <<~PYTHON
798
- import json
799
- import boto3
800
- import os
801
- from opensearchpy import OpenSearch
802
- from datetime import datetime, timedelta
803
- import re
804
-
805
- def lambda_handler(event, context):
806
- # Initialize OpenSearch client
807
- es = OpenSearch(
808
- hosts=[{'host': os.environ['OPENSEARCH_ENDPOINT'], 'port': 443}],
809
- http_auth=get_auth(),
810
- use_ssl=True,
811
- verify_certs=True
812
- )
813
-
814
- # Load correlation rules
815
- rules = json.loads(os.environ['CORRELATION_RULES'])
816
-
817
- # Process each rule
818
- alerts = []
819
- for rule in rules:
820
- if rule.get('enabled', True):
821
- matches = evaluate_rule(es, rule)
822
- if matches:
823
- alert = create_alert(rule, matches)
824
- alerts.append(alert)
825
- send_alert(alert)
826
-
827
- return {
828
- 'statusCode': 200,
829
- 'body': json.dumps({
830
- 'processed_rules': len(rules),
831
- 'alerts_generated': len(alerts)
832
- })
833
- }
834
-
835
- def evaluate_rule(es, rule):
836
- # Build query based on rule type
837
- if rule['rule_type'] == 'threshold':
838
- return evaluate_threshold_rule(es, rule)
839
- elif rule['rule_type'] == 'pattern':
840
- return evaluate_pattern_rule(es, rule)
841
- elif rule['rule_type'] == 'anomaly':
842
- return evaluate_anomaly_rule(es, rule)
843
- elif rule['rule_type'] == 'sequence':
844
- return evaluate_sequence_rule(es, rule)
845
- elif rule['rule_type'] == 'statistical':
846
- return evaluate_statistical_rule(es, rule)
847
-
848
- return []
849
-
850
- def evaluate_threshold_rule(es, rule):
851
- # Implement threshold-based detection
852
- time_window = rule.get('time_window', 300)
853
- query = build_query_from_conditions(rule['conditions'], time_window)
854
-
855
- response = es.search(
856
- index='siem-*',
857
- body=query,
858
- size=0
859
- )
860
-
861
- doc_count = response['hits']['total']['value']
862
- threshold = rule.get('threshold', 10)
863
-
864
- if doc_count >= threshold:
865
- return [{
866
- 'count': doc_count,
867
- 'threshold': threshold,
868
- 'time_window': time_window
869
- }]
870
-
871
- return []
872
-
873
- def evaluate_pattern_rule(es, rule):
874
- # Implement pattern-based detection
875
- query = build_pattern_query(rule['conditions'])
876
-
877
- response = es.search(
878
- index='siem-*',
879
- body=query,
880
- size=100
881
- )
882
-
883
- return response['hits']['hits']
884
-
885
- def evaluate_anomaly_rule(es, rule):
886
- # Implement anomaly detection using ML
887
- # This would typically use OpenSearch ML features
888
- return []
889
-
890
- def evaluate_sequence_rule(es, rule):
891
- # Implement sequence-based detection
892
- # Look for specific sequences of events
893
- return []
894
-
895
- def evaluate_statistical_rule(es, rule):
896
- # Implement statistical anomaly detection
897
- # Calculate baselines and detect deviations
898
- return []
899
-
900
- def build_query_from_conditions(conditions, time_window):
901
- must_clauses = []
902
-
903
- for condition in conditions:
904
- if 'field' in condition and 'value' in condition:
905
- must_clauses.append({
906
- 'match': {
907
- condition['field']: condition['value']
908
- }
909
- })
910
-
911
- return {
912
- 'query': {
913
- 'bool': {
914
- 'must': must_clauses,
915
- 'filter': {
916
- 'range': {
917
- '@timestamp': {
918
- 'gte': f'now-{time_window}s'
919
- }
920
- }
921
- }
922
- }
923
- }
924
- }
925
-
926
- def build_pattern_query(conditions):
927
- # Build complex pattern queries
928
- return build_query_from_conditions(conditions, 3600)
929
-
930
- def create_alert(rule, matches):
931
- return {
932
- 'rule_name': rule['name'],
933
- 'severity': rule['severity'],
934
- 'description': rule['description'],
935
- 'matches': len(matches),
936
- 'timestamp': datetime.utcnow().isoformat(),
937
- 'actions': rule['actions']
938
- }
939
-
940
- def send_alert(alert):
941
- sns = boto3.client('sns')
942
-
943
- message = {
944
- 'default': json.dumps(alert),
945
- 'email': format_email_alert(alert),
946
- 'sms': format_sms_alert(alert)
947
- }
948
-
949
- sns.publish(
950
- TopicArn=os.environ['SNS_TOPIC_ARN'],
951
- Message=json.dumps(message),
952
- MessageStructure='json',
953
- Subject=f"SIEM Alert: {alert['rule_name']} - {alert['severity'].upper()}"
954
- )
955
-
956
- def format_email_alert(alert):
957
- return f"""
958
- Security Alert: {alert['rule_name']}
959
-
960
- Severity: {alert['severity'].upper()}
961
- Time: {alert['timestamp']}
962
-
963
- Description: {alert['description']}
964
-
965
- Number of matches: {alert['matches']}
966
-
967
- Required Actions: {', '.join(alert['actions'])}
968
- """
969
-
970
- def format_sms_alert(alert):
971
- return f"SIEM Alert: {alert['rule_name']} ({alert['severity']}) - {alert['matches']} matches detected"
972
-
973
- def get_auth():
974
- # Implement authentication for OpenSearch
975
- # This could use IAM roles or stored credentials
976
- return None
977
- PYTHON
978
- end
979
-
980
- def generate_ml_detection_code
981
- <<~PYTHON
982
- import json
983
- import boto3
984
- import os
985
- import numpy as np
986
- from opensearchpy import OpenSearch
987
- from datetime import datetime, timedelta
988
- from sklearn.ensemble import IsolationForest
989
- from sklearn.preprocessing import StandardScaler
990
-
991
- def lambda_handler(event, context):
992
- # Initialize OpenSearch client
993
- es = OpenSearch(
994
- hosts=[{'host': os.environ['OPENSEARCH_ENDPOINT'], 'port': 443}],
995
- http_auth=get_auth(),
996
- use_ssl=True,
997
- verify_certs=True
998
- )
999
-
1000
- # Load anomaly detectors configuration
1001
- detectors = json.loads(os.environ['ANOMALY_DETECTORS'])
1002
-
1003
- results = []
1004
- for detector in detectors:
1005
- anomalies = run_anomaly_detection(es, detector)
1006
- if anomalies:
1007
- results.extend(anomalies)
1008
-
1009
- # Run behavior analytics if enabled
1010
- if os.environ.get('ENABLE_BEHAVIOR_ANALYTICS', 'false').lower() == 'true':
1011
- behavior_anomalies = run_behavior_analytics(es)
1012
- results.extend(behavior_anomalies)
1013
-
1014
- return {
1015
- 'statusCode': 200,
1016
- 'body': json.dumps({
1017
- 'anomalies_detected': len(results),
1018
- 'results': results
1019
- })
1020
- }
1021
-
1022
- def run_anomaly_detection(es, detector):
1023
- # Fetch data for analysis
1024
- data = fetch_detector_data(es, detector)
1025
-
1026
- if not data:
1027
- return []
1028
-
1029
- # Prepare features
1030
- features = prepare_features(data, detector)
1031
-
1032
- # Run anomaly detection based on type
1033
- if detector['type'] == 'statistical':
1034
- return detect_statistical_anomalies(features, detector)
1035
- elif detector['type'] == 'machine_learning':
1036
- return detect_ml_anomalies(features, detector)
1037
- elif detector['type'] == 'pattern_based':
1038
- return detect_pattern_anomalies(data, detector)
1039
-
1040
- return []
1041
-
1042
- def fetch_detector_data(es, detector):
1043
- # Fetch relevant data based on detector configuration
1044
- baseline_period = detector.get('baseline_period', 7)
1045
-
1046
- query = {
1047
- 'query': {
1048
- 'range': {
1049
- '@timestamp': {
1050
- 'gte': f'now-{baseline_period}d'
1051
- }
1052
- }
1053
- },
1054
- 'size': 10000,
1055
- 'sort': [{'@timestamp': 'desc'}]
1056
- }
1057
-
1058
- response = es.search(index='siem-*', body=query)
1059
- return [hit['_source'] for hit in response['hits']['hits']]
1060
-
1061
- def prepare_features(data, detector):
1062
- # Extract numerical features for ML analysis
1063
- features = []
1064
-
1065
- for record in data:
1066
- feature_vector = []
1067
-
1068
- # Extract relevant features based on detector config
1069
- if 'response_time' in record:
1070
- feature_vector.append(float(record['response_time']))
1071
- if 'bytes_transferred' in record:
1072
- feature_vector.append(float(record['bytes_transferred']))
1073
- if 'error_count' in record:
1074
- feature_vector.append(float(record['error_count']))
1075
-
1076
- if feature_vector:
1077
- features.append(feature_vector)
1078
-
1079
- return np.array(features) if features else np.array([])
1080
-
1081
- def detect_statistical_anomalies(features, detector):
1082
- if len(features) == 0:
1083
- return []
1084
-
1085
- # Calculate statistics
1086
- mean = np.mean(features, axis=0)
1087
- std = np.std(features, axis=0)
1088
-
1089
- # Detect outliers
1090
- anomalies = []
1091
- sensitivity_factor = {
1092
- 'low': 3,
1093
- 'medium': 2,
1094
- 'high': 1
1095
- }.get(detector.get('sensitivity', 'medium'), 2)
1096
-
1097
- for i, feature in enumerate(features):
1098
- z_scores = np.abs((feature - mean) / (std + 1e-10))
1099
- if np.any(z_scores > sensitivity_factor):
1100
- anomalies.append({
1101
- 'type': 'statistical_anomaly',
1102
- 'detector': detector['name'],
1103
- 'index': i,
1104
- 'z_scores': z_scores.tolist(),
1105
- 'severity': calculate_severity(z_scores, sensitivity_factor)
1106
- })
1107
-
1108
- return anomalies
1109
-
1110
- def detect_ml_anomalies(features, detector):
1111
- if len(features) < 10:
1112
- return []
1113
-
1114
- # Normalize features
1115
- scaler = StandardScaler()
1116
- features_normalized = scaler.fit_transform(features)
1117
-
1118
- # Train Isolation Forest
1119
- contamination = {
1120
- 'low': 0.01,
1121
- 'medium': 0.05,
1122
- 'high': 0.1
1123
- }.get(detector.get('sensitivity', 'medium'), 0.05)
1124
-
1125
- model = IsolationForest(
1126
- contamination=contamination,
1127
- random_state=42
1128
- )
1129
-
1130
- predictions = model.fit_predict(features_normalized)
1131
-
1132
- # Identify anomalies
1133
- anomalies = []
1134
- for i, pred in enumerate(predictions):
1135
- if pred == -1:
1136
- anomalies.append({
1137
- 'type': 'ml_anomaly',
1138
- 'detector': detector['name'],
1139
- 'index': i,
1140
- 'anomaly_score': model.score_samples([features_normalized[i]])[0],
1141
- 'severity': 'high' if model.score_samples([features_normalized[i]])[0] < -0.5 else 'medium'
1142
- })
1143
-
1144
- return anomalies
1145
-
1146
- def detect_pattern_anomalies(data, detector):
1147
- # Implement pattern-based anomaly detection
1148
- # Look for unusual patterns in categorical data
1149
- anomalies = []
1150
-
1151
- # Example: Detect unusual user behavior patterns
1152
- user_activities = {}
1153
- for record in data:
1154
- if 'user_id' in record and 'action' in record:
1155
- user_id = record['user_id']
1156
- if user_id not in user_activities:
1157
- user_activities[user_id] = []
1158
- user_activities[user_id].append(record['action'])
1159
-
1160
- # Detect anomalous activity sequences
1161
- for user_id, activities in user_activities.items():
1162
- if is_anomalous_sequence(activities):
1163
- anomalies.append({
1164
- 'type': 'pattern_anomaly',
1165
- 'detector': detector['name'],
1166
- 'user_id': user_id,
1167
- 'pattern': activities[-10:], # Last 10 activities
1168
- 'severity': 'high'
1169
- })
1170
-
1171
- return anomalies
1172
-
1173
- def run_behavior_analytics(es):
1174
- # Implement User and Entity Behavior Analytics (UEBA)
1175
- anomalies = []
1176
-
1177
- # Analyze user behavior
1178
- user_anomalies = analyze_user_behavior(es)
1179
- anomalies.extend(user_anomalies)
1180
-
1181
- # Analyze entity behavior
1182
- entity_anomalies = analyze_entity_behavior(es)
1183
- anomalies.extend(entity_anomalies)
1184
-
1185
- return anomalies
1186
-
1187
- def analyze_user_behavior(es):
1188
- # Implement user behavior analysis
1189
- # Look for unusual login times, locations, access patterns
1190
- return []
1191
-
1192
- def analyze_entity_behavior(es):
1193
- # Implement entity behavior analysis
1194
- # Look for unusual system behavior, process execution, network connections
1195
- return []
1196
-
1197
- def is_anomalous_sequence(activities):
1198
- # Implement sequence anomaly detection logic
1199
- # This is a simplified example
1200
- suspicious_sequences = [
1201
- ['login', 'privilege_escalation', 'data_export'],
1202
- ['failed_login', 'failed_login', 'failed_login', 'successful_login'],
1203
- ['access_sensitive_data', 'download_large_file', 'delete_logs']
1204
- ]
1205
-
1206
- for suspicious in suspicious_sequences:
1207
- if all(activity in activities for activity in suspicious):
1208
- return True
1209
-
1210
- return False
1211
-
1212
- def calculate_severity(z_scores, threshold):
1213
- max_z = np.max(z_scores)
1214
- if max_z > threshold * 2:
1215
- return 'critical'
1216
- elif max_z > threshold * 1.5:
1217
- return 'high'
1218
- elif max_z > threshold:
1219
- return 'medium'
1220
- else:
1221
- return 'low'
1222
-
1223
- def get_auth():
1224
- # Implement authentication
1225
- return None
1226
- PYTHON
1227
- end
1228
-
1229
- def create_alert_topic(name, attrs, resources)
1230
- topic_name = component_resource_name(name, :alert_topic)
1231
- topic = aws_sns_topic(topic_name, {
1232
- name: "siem-alerts-#{name}",
1233
- kms_master_key_id: resources[:kms_keys][:main].id,
1234
- tags: component_tags('siem_security_platform', name, attrs.tags)
1235
- })
1236
-
1237
- resources[:sns_topics][:alerts] = topic
1238
- topic.arn
1239
- end
1240
-
1241
- def create_correlation_engine(name, attrs, resources)
1242
- # Create Step Functions state machine for correlation workflow
1243
- state_machine_name = component_resource_name(name, :correlation_engine)
1244
-
1245
- resources[:step_functions][:correlation_engine] = aws_sfn_state_machine(state_machine_name, {
1246
- name: "siem-correlation-engine-#{name}",
1247
- role_arn: create_step_functions_role(name, "correlation", attrs, resources),
1248
-
1249
- definition: JSON.pretty_generate({
1250
- Comment: "SIEM Correlation Engine",
1251
- StartAt: "CollectEvents",
1252
- States: {
1253
- CollectEvents: {
1254
- Type: "Task",
1255
- Resource: resources[:lambda_functions][:correlation].arn,
1256
- Next: "EvaluateRules"
1257
- },
1258
- EvaluateRules: {
1259
- Type: "Parallel",
1260
- Branches: attrs.correlation_rules.map do |rule|
1261
- {
1262
- StartAt: "Evaluate#{rule[:name].gsub(/\s+/, '')}",
1263
- States: {
1264
- "Evaluate#{rule[:name].gsub(/\s+/, '')}" => {
1265
- Type: "Task",
1266
- Resource: resources[:lambda_functions][:correlation].arn,
1267
- Parameters: {
1268
- "rule.$" => rule.to_json,
1269
- "events.$" => "$"
1270
- },
1271
- End: true
1272
- }
1273
- }
1274
- }
1275
- end,
1276
- Next: "ProcessAlerts"
1277
- },
1278
- ProcessAlerts: {
1279
- Type: "Task",
1280
- Resource: "arn:aws:states:::lambda:invoke",
1281
- Parameters: {
1282
- FunctionName: resources[:lambda_functions][:correlation].arn,
1283
- Payload: {
1284
- "action" => "process_alerts",
1285
- "results.$" => "$"
1286
- }
1287
- },
1288
- End: true
1289
- }
1290
- }
1291
- }),
1292
-
1293
- tags: component_tags('siem_security_platform', name, attrs.tags)
1294
- })
1295
- end
1296
-
1297
- def create_step_functions_role(name, purpose, attrs, resources)
1298
- role_name = component_resource_name(name, :sfn_role, purpose)
1299
- role = aws_iam_role(role_name, {
1300
- name: role_name.to_s,
1301
- assume_role_policy: JSON.pretty_generate({
1302
- Version: "2012-10-17",
1303
- Statement: [{
1304
- Action: "sts:AssumeRole",
1305
- Effect: "Allow",
1306
- Principal: {
1307
- Service: "states.amazonaws.com"
1308
- }
1309
- }]
1310
- }),
1311
- tags: component_tags('siem_security_platform', name, attrs.tags)
1312
- })
1313
-
1314
- aws_iam_role_policy(:"#{role_name}_policy", {
1315
- role: role.id,
1316
- policy: JSON.pretty_generate({
1317
- Version: "2012-10-17",
1318
- Statement: [
1319
- {
1320
- Effect: "Allow",
1321
- Action: [
1322
- "lambda:InvokeFunction"
1323
- ],
1324
- Resource: "arn:aws:lambda:*:*:function:siem-*"
1325
- },
1326
- {
1327
- Effect: "Allow",
1328
- Action: [
1329
- "xray:PutTraceSegments",
1330
- "xray:PutTelemetryRecords"
1331
- ],
1332
- Resource: "*"
1333
- }
1334
- ]
1335
- })
1336
- })
1337
-
1338
- role.arn
1339
- end
1340
-
1341
- def create_threat_detection(name, attrs, resources)
1342
- # Create DynamoDB table for threat intelligence
1343
- if attrs.threat_detection[:threat_intel_feeds] && !attrs.threat_detection[:threat_intel_feeds].empty?
1344
- table_name = component_resource_name(name, :threat_intel_table)
1345
- resources[:dynamodb_tables] ||= {}
1346
- resources[:dynamodb_tables][:threat_intel] = aws_dynamodb_table(table_name, {
1347
- name: "siem-threat-intel-#{name}",
1348
- billing_mode: "PAY_PER_REQUEST",
1349
-
1350
- attribute: [
1351
- {
1352
- name: "indicator",
1353
- type: "S"
1354
- },
1355
- {
1356
- name: "indicator_type",
1357
- type: "S"
1358
- }
1359
- ],
1360
-
1361
- hash_key: "indicator",
1362
- range_key: "indicator_type",
1363
-
1364
- global_secondary_index: [
1365
- {
1366
- name: "TypeIndex",
1367
- hash_key: "indicator_type",
1368
- projection_type: "ALL"
1369
- }
1370
- ],
1371
-
1372
- point_in_time_recovery: {
1373
- enabled: true
1374
- },
1375
-
1376
- server_side_encryption: {
1377
- enabled: true,
1378
- kms_key_id: resources[:kms_keys][:main].id
1379
- },
1380
-
1381
- tags: component_tags('siem_security_platform', name, attrs.tags)
1382
- })
1383
-
1384
- # Create Lambda for threat intel updates
1385
- threat_intel_lambda = component_resource_name(name, :threat_intel_updater)
1386
- resources[:lambda_functions][:threat_intel_updater] = aws_lambda_function(threat_intel_lambda, {
1387
- function_name: "siem-threat-intel-updater-#{name}",
1388
- runtime: "python3.11",
1389
- handler: "index.lambda_handler",
1390
- role: create_lambda_execution_role(name, "threat-intel-updater", attrs, resources),
1391
- timeout: 900,
1392
- memory_size: 1024,
1393
-
1394
- environment: {
1395
- variables: {
1396
- THREAT_INTEL_TABLE: resources[:dynamodb_tables][:threat_intel].name,
1397
- THREAT_FEEDS: JSON.generate(attrs.threat_detection[:threat_intel_feeds])
1398
- }
1399
- },
1400
-
1401
- code: {
1402
- zip_file: generate_threat_intel_updater_code()
1403
- },
1404
-
1405
- tags: component_tags('siem_security_platform', name, attrs.tags)
1406
- })
1407
-
1408
- # Schedule threat intel updates
1409
- attrs.threat_detection[:threat_intel_feeds].each do |feed|
1410
- rule_name = component_resource_name(name, :threat_intel_rule, feed[:name])
1411
- rule = aws_cloudwatch_event_rule(rule_name, {
1412
- name: "siem-threat-intel-#{name}-#{feed[:name]}",
1413
- description: "Update threat intelligence feed: #{feed[:name]}",
1414
- schedule_expression: "rate(#{feed[:update_frequency] / 60} minutes)",
1415
- tags: component_tags('siem_security_platform', name, attrs.tags)
1416
- })
1417
-
1418
- aws_cloudwatch_event_target(:"#{rule_name}_target", {
1419
- rule: rule.name,
1420
- arn: resources[:lambda_functions][:threat_intel_updater].arn,
1421
- input: JSON.generate({ feed: feed })
1422
- })
1423
-
1424
- resources[:event_rules][:"threat_intel_#{feed[:name]}"] = rule
1425
- end
1426
- end
1427
- end
1428
-
1429
- def generate_threat_intel_updater_code
1430
- <<~PYTHON
1431
- import json
1432
- import boto3
1433
- import os
1434
- import requests
1435
- from datetime import datetime
1436
-
1437
- dynamodb = boto3.resource('dynamodb')
1438
-
1439
- def lambda_handler(event, context):
1440
- table = dynamodb.Table(os.environ['THREAT_INTEL_TABLE'])
1441
- feed = event.get('feed', {})
1442
-
1443
- # Fetch threat intelligence data
1444
- indicators = fetch_threat_feed(feed)
1445
-
1446
- # Update DynamoDB table
1447
- with table.batch_writer() as batch:
1448
- for indicator in indicators:
1449
- batch.put_item(Item={
1450
- 'indicator': indicator['value'],
1451
- 'indicator_type': indicator['type'],
1452
- 'severity': indicator.get('severity', 'medium'),
1453
- 'source': feed['name'],
1454
- 'last_seen': datetime.utcnow().isoformat(),
1455
- 'metadata': indicator.get('metadata', {})
1456
- })
1457
-
1458
- return {
1459
- 'statusCode': 200,
1460
- 'body': json.dumps({
1461
- 'feed': feed['name'],
1462
- 'indicators_updated': len(indicators)
1463
- })
1464
- }
1465
-
1466
- def fetch_threat_feed(feed):
1467
- indicators = []
1468
-
1469
- if feed['type'] == 'ip_reputation':
1470
- indicators.extend(fetch_ip_reputation(feed))
1471
- elif feed['type'] == 'domain_reputation':
1472
- indicators.extend(fetch_domain_reputation(feed))
1473
- elif feed['type'] == 'file_hash':
1474
- indicators.extend(fetch_file_hashes(feed))
1475
- elif feed['type'] == 'indicators':
1476
- indicators.extend(fetch_generic_indicators(feed))
1477
-
1478
- return indicators
1479
-
1480
- def fetch_ip_reputation(feed):
1481
- # Implement IP reputation feed fetching
1482
- # This is a placeholder - real implementation would fetch from actual feeds
1483
- return [
1484
- {'value': '192.168.1.100', 'type': 'ip', 'severity': 'high'},
1485
- {'value': '10.0.0.50', 'type': 'ip', 'severity': 'medium'}
1486
- ]
1487
-
1488
- def fetch_domain_reputation(feed):
1489
- # Implement domain reputation feed fetching
1490
- return [
1491
- {'value': 'malicious.com', 'type': 'domain', 'severity': 'critical'},
1492
- {'value': 'suspicious.net', 'type': 'domain', 'severity': 'high'}
1493
- ]
1494
-
1495
- def fetch_file_hashes(feed):
1496
- # Implement file hash feed fetching
1497
- return [
1498
- {'value': 'd41d8cd98f00b204e9800998ecf8427e', 'type': 'md5', 'severity': 'high'},
1499
- {'value': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'type': 'sha256', 'severity': 'critical'}
1500
- ]
1501
-
1502
- def fetch_generic_indicators(feed):
1503
- # Implement generic indicator fetching
1504
- if feed.get('source_url'):
1505
- try:
1506
- response = requests.get(feed['source_url'], timeout=30)
1507
- if response.status_code == 200:
1508
- # Parse response based on format
1509
- return parse_indicators(response.text, feed)
1510
- except Exception as e:
1511
- print(f"Error fetching feed {feed['name']}: {str(e)}")
1512
-
1513
- return []
1514
-
1515
- def parse_indicators(data, feed):
1516
- # Parse indicators from raw data
1517
- indicators = []
1518
-
1519
- # Simple line-based parsing example
1520
- for line in data.split('\\n'):
1521
- line = line.strip()
1522
- if line and not line.startswith('#'):
1523
- indicators.append({
1524
- 'value': line,
1525
- 'type': 'unknown',
1526
- 'severity': 'medium'
1527
- })
1528
-
1529
- return indicators
1530
- PYTHON
1531
- end
1532
-
1533
- def create_incident_response(name, attrs, resources)
1534
- return unless attrs.incident_response[:enable_automated_response]
1535
-
1536
- # Create Step Functions for incident response workflows
1537
- state_machine_name = component_resource_name(name, :incident_response)
1538
-
1539
- resources[:step_functions][:incident_response] = aws_sfn_state_machine(state_machine_name, {
1540
- name: "siem-incident-response-#{name}",
1541
- role_arn: create_step_functions_role(name, "incident-response", attrs, resources),
1542
-
1543
- definition: JSON.pretty_generate({
1544
- Comment: "SIEM Incident Response Workflow",
1545
- StartAt: "ClassifyIncident",
1546
- States: {
1547
- ClassifyIncident: {
1548
- Type: "Task",
1549
- Resource: "arn:aws:states:::lambda:invoke",
1550
- Parameters: {
1551
- FunctionName: create_incident_classifier(name, attrs, resources),
1552
- Payload: {
1553
- "incident.$" => "$"
1554
- }
1555
- },
1556
- Next: "DetermineSeverity"
1557
- },
1558
- DetermineSeverity: {
1559
- Type: "Choice",
1560
- Choices: [
1561
- {
1562
- Variable: "$.severity",
1563
- StringEquals: "critical",
1564
- Next: "CriticalResponse"
1565
- },
1566
- {
1567
- Variable: "$.severity",
1568
- StringEquals: "high",
1569
- Next: "HighResponse"
1570
- },
1571
- {
1572
- Variable: "$.severity",
1573
- StringEquals: "medium",
1574
- Next: "MediumResponse"
1575
- }
1576
- ],
1577
- Default: "LowResponse"
1578
- },
1579
- CriticalResponse: {
1580
- Type: "Parallel",
1581
- Branches: [
1582
- {
1583
- StartAt: "IsolateResource",
1584
- States: {
1585
- IsolateResource: {
1586
- Type: "Task",
1587
- Resource: "arn:aws:states:::lambda:invoke",
1588
- Parameters: {
1589
- FunctionName: create_isolation_lambda(name, attrs, resources),
1590
- Payload: {
1591
- "action" => "isolate",
1592
- "resource.$" => "$.affected_resource"
1593
- }
1594
- },
1595
- End: true
1596
- }
1597
- }
1598
- },
1599
- {
1600
- StartAt: "NotifySOC",
1601
- States: {
1602
- NotifySOC: {
1603
- Type: "Task",
1604
- Resource: "arn:aws:states:::sns:publish",
1605
- Parameters: {
1606
- TopicArn: resources[:sns_topics][:alerts].arn,
1607
- Message: {
1608
- "incident.$" => "$",
1609
- "priority" => "CRITICAL"
1610
- }
1611
- },
1612
- End: true
1613
- }
1614
- }
1615
- },
1616
- {
1617
- StartAt: "CollectForensics",
1618
- States: {
1619
- CollectForensics: {
1620
- Type: "Task",
1621
- Resource: "arn:aws:states:::lambda:invoke",
1622
- Parameters: {
1623
- FunctionName: create_forensics_lambda(name, attrs, resources),
1624
- Payload: {
1625
- "action" => "collect",
1626
- "incident.$" => "$"
1627
- }
1628
- },
1629
- End: true
1630
- }
1631
- }
1632
- }
1633
- ],
1634
- Next: "CreateIncidentTicket"
1635
- },
1636
- HighResponse: {
1637
- Type: "Task",
1638
- Resource: "arn:aws:states:::lambda:invoke",
1639
- Parameters: {
1640
- FunctionName: create_response_lambda(name, attrs, resources),
1641
- Payload: {
1642
- "severity" => "high",
1643
- "incident.$" => "$"
1644
- }
1645
- },
1646
- Next: "CreateIncidentTicket"
1647
- },
1648
- MediumResponse: {
1649
- Type: "Task",
1650
- Resource: "arn:aws:states:::lambda:invoke",
1651
- Parameters: {
1652
- FunctionName: create_response_lambda(name, attrs, resources),
1653
- Payload: {
1654
- "severity" => "medium",
1655
- "incident.$" => "$"
1656
- }
1657
- },
1658
- Next: "CreateIncidentTicket"
1659
- },
1660
- LowResponse: {
1661
- Type: "Task",
1662
- Resource: "arn:aws:states:::lambda:invoke",
1663
- Parameters: {
1664
- FunctionName: create_response_lambda(name, attrs, resources),
1665
- Payload: {
1666
- "severity" => "low",
1667
- "incident.$" => "$"
1668
- }
1669
- },
1670
- Next: "CreateIncidentTicket"
1671
- },
1672
- CreateIncidentTicket: {
1673
- Type: "Task",
1674
- Resource: "arn:aws:states:::lambda:invoke",
1675
- Parameters: {
1676
- FunctionName: create_ticketing_lambda(name, attrs, resources),
1677
- Payload: {
1678
- "action" => "create_ticket",
1679
- "incident.$" => "$"
1680
- }
1681
- },
1682
- End: true
1683
- }
1684
- }
1685
- }),
1686
-
1687
- tags: component_tags('siem_security_platform', name, attrs.tags)
1688
- })
1689
-
1690
- # Create playbook executions for configured playbooks
1691
- attrs.incident_response[:playbooks].each do |playbook|
1692
- create_playbook_execution(name, playbook, attrs, resources)
1693
- end
1694
- end
1695
-
1696
- def create_incident_classifier(name, attrs, resources)
1697
- lambda_name = component_resource_name(name, :incident_classifier)
1698
- lambda = aws_lambda_function(lambda_name, {
1699
- function_name: "siem-incident-classifier-#{name}",
1700
- runtime: "python3.11",
1701
- handler: "index.lambda_handler",
1702
- role: create_lambda_execution_role(name, "incident-classifier", attrs, resources),
1703
- timeout: 60,
1704
-
1705
- code: {
1706
- zip_file: <<~PYTHON
1707
- import json
1708
-
1709
- def lambda_handler(event, context):
1710
- incident = event.get('incident', {})
1711
-
1712
- # Classify incident based on rules
1713
- severity = classify_severity(incident)
1714
- category = classify_category(incident)
1715
-
1716
- return {
1717
- 'statusCode': 200,
1718
- 'severity': severity,
1719
- 'category': category,
1720
- 'incident': incident
1721
- }
1722
-
1723
- def classify_severity(incident):
1724
- # Implement severity classification logic
1725
- indicators = incident.get('indicators', [])
1726
-
1727
- if any(ind.get('severity') == 'critical' for ind in indicators):
1728
- return 'critical'
1729
- elif any(ind.get('severity') == 'high' for ind in indicators):
1730
- return 'high'
1731
- elif len(indicators) > 10:
1732
- return 'high'
1733
- elif len(indicators) > 5:
1734
- return 'medium'
1735
- else:
1736
- return 'low'
1737
-
1738
- def classify_category(incident):
1739
- # Implement category classification
1740
- event_types = incident.get('event_types', [])
1741
-
1742
- if 'malware' in event_types:
1743
- return 'malware'
1744
- elif 'unauthorized_access' in event_types:
1745
- return 'unauthorized_access'
1746
- elif 'data_exfiltration' in event_types:
1747
- return 'data_breach'
1748
- else:
1749
- return 'unknown'
1750
- PYTHON
1751
- },
1752
-
1753
- tags: component_tags('siem_security_platform', name, attrs.tags)
1754
- })
1755
-
1756
- resources[:lambda_functions][:incident_classifier] = lambda
1757
- lambda.arn
1758
- end
1759
-
1760
- def create_isolation_lambda(name, attrs, resources)
1761
- lambda_name = component_resource_name(name, :isolation_lambda)
1762
- lambda = aws_lambda_function(lambda_name, {
1763
- function_name: "siem-isolation-#{name}",
1764
- runtime: "python3.11",
1765
- handler: "index.lambda_handler",
1766
- role: create_isolation_role(name, attrs, resources),
1767
- timeout: 300,
1768
-
1769
- code: {
1770
- zip_file: <<~PYTHON
1771
- import json
1772
- import boto3
1773
-
1774
- ec2 = boto3.client('ec2')
1775
-
1776
- def lambda_handler(event, context):
1777
- action = event.get('action')
1778
- resource = event.get('resource', {})
1779
-
1780
- if action == 'isolate':
1781
- result = isolate_resource(resource)
1782
- elif action == 'restore':
1783
- result = restore_resource(resource)
1784
- else:
1785
- result = {'error': 'Unknown action'}
1786
-
1787
- return {
1788
- 'statusCode': 200,
1789
- 'body': json.dumps(result)
1790
- }
1791
-
1792
- def isolate_resource(resource):
1793
- resource_type = resource.get('type')
1794
- resource_id = resource.get('id')
1795
-
1796
- if resource_type == 'ec2_instance':
1797
- return isolate_ec2_instance(resource_id)
1798
- elif resource_type == 'security_group':
1799
- return isolate_security_group(resource_id)
1800
- else:
1801
- return {'error': 'Unsupported resource type'}
1802
-
1803
- def isolate_ec2_instance(instance_id):
1804
- # Create isolation security group
1805
- isolation_sg = ec2.create_security_group(
1806
- GroupName=f'isolation-{instance_id}',
1807
- Description='Isolation security group for incident response'
1808
- )
1809
-
1810
- # Remove all ingress rules
1811
- ec2.revoke_security_group_ingress(
1812
- GroupId=isolation_sg['GroupId'],
1813
- IpPermissions=[{
1814
- 'IpProtocol': '-1',
1815
- 'FromPort': -1,
1816
- 'ToPort': -1,
1817
- 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]
1818
- }]
1819
- )
1820
-
1821
- # Apply isolation security group
1822
- ec2.modify_instance_attribute(
1823
- InstanceId=instance_id,
1824
- Groups=[isolation_sg['GroupId']]
1825
- )
1826
-
1827
- return {
1828
- 'action': 'isolated',
1829
- 'instance_id': instance_id,
1830
- 'isolation_sg': isolation_sg['GroupId']
1831
- }
1832
-
1833
- def restore_resource(resource):
1834
- # Implement restoration logic
1835
- return {'action': 'restored', 'resource': resource}
1836
-
1837
- def isolate_security_group(sg_id):
1838
- # Implement security group isolation
1839
- return {'action': 'isolated', 'security_group_id': sg_id}
1840
- PYTHON
1841
- },
1842
-
1843
- tags: component_tags('siem_security_platform', name, attrs.tags)
1844
- })
1845
-
1846
- resources[:lambda_functions][:isolation] = lambda
1847
- lambda.arn
1848
- end
1849
-
1850
- def create_isolation_role(name, attrs, resources)
1851
- role_name = component_resource_name(name, :isolation_role)
1852
- role = aws_iam_role(role_name, {
1853
- name: role_name.to_s,
1854
- assume_role_policy: JSON.pretty_generate({
1855
- Version: "2012-10-17",
1856
- Statement: [{
1857
- Action: "sts:AssumeRole",
1858
- Effect: "Allow",
1859
- Principal: {
1860
- Service: "lambda.amazonaws.com"
1861
- }
1862
- }]
1863
- }),
1864
- tags: component_tags('siem_security_platform', name, attrs.tags)
1865
- })
1866
-
1867
- # Attach policies
1868
- aws_iam_role_policy_attachment(:"#{role_name}_basic", {
1869
- role: role.name,
1870
- policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
1871
- })
1872
-
1873
- # Custom policy for isolation actions
1874
- aws_iam_role_policy(:"#{role_name}_isolation", {
1875
- role: role.id,
1876
- policy: JSON.pretty_generate({
1877
- Version: "2012-10-17",
1878
- Statement: [
1879
- {
1880
- Effect: "Allow",
1881
- Action: [
1882
- "ec2:CreateSecurityGroup",
1883
- "ec2:AuthorizeSecurityGroupIngress",
1884
- "ec2:AuthorizeSecurityGroupEgress",
1885
- "ec2:RevokeSecurityGroupIngress",
1886
- "ec2:RevokeSecurityGroupEgress",
1887
- "ec2:ModifyInstanceAttribute",
1888
- "ec2:DescribeInstances",
1889
- "ec2:DescribeSecurityGroups",
1890
- "ec2:CreateSnapshot",
1891
- "ec2:CreateImage"
1892
- ],
1893
- Resource: "*"
1894
- }
1895
- ]
1896
- })
1897
- })
1898
-
1899
- role.arn
1900
- end
1901
-
1902
- def create_forensics_lambda(name, attrs, resources)
1903
- lambda_name = component_resource_name(name, :forensics_lambda)
1904
- lambda = aws_lambda_function(lambda_name, {
1905
- function_name: "siem-forensics-#{name}",
1906
- runtime: "python3.11",
1907
- handler: "index.lambda_handler",
1908
- role: create_forensics_role(name, attrs, resources),
1909
- timeout: 900,
1910
- memory_size: 3008,
1911
-
1912
- environment: {
1913
- variables: {
1914
- FORENSICS_BUCKET: create_forensics_bucket(name, attrs, resources)
1915
- }
1916
- },
1917
-
1918
- code: {
1919
- zip_file: <<~PYTHON
1920
- import json
1921
- import boto3
1922
- import os
1923
- from datetime import datetime
1924
-
1925
- ec2 = boto3.client('ec2')
1926
- s3 = boto3.client('s3')
1927
- ssm = boto3.client('ssm')
1928
-
1929
- def lambda_handler(event, context):
1930
- action = event.get('action')
1931
- incident = event.get('incident', {})
1932
-
1933
- if action == 'collect':
1934
- result = collect_forensics(incident)
1935
- else:
1936
- result = {'error': 'Unknown action'}
1937
-
1938
- return {
1939
- 'statusCode': 200,
1940
- 'body': json.dumps(result)
1941
- }
1942
-
1943
- def collect_forensics(incident):
1944
- forensics_data = {
1945
- 'incident_id': incident.get('id'),
1946
- 'timestamp': datetime.utcnow().isoformat(),
1947
- 'affected_resources': []
1948
- }
1949
-
1950
- for resource in incident.get('affected_resources', []):
1951
- if resource['type'] == 'ec2_instance':
1952
- forensics = collect_ec2_forensics(resource['id'])
1953
- forensics_data['affected_resources'].append(forensics)
1954
-
1955
- # Store forensics data
1956
- store_forensics_data(forensics_data)
1957
-
1958
- return forensics_data
1959
-
1960
- def collect_ec2_forensics(instance_id):
1961
- forensics = {
1962
- 'instance_id': instance_id,
1963
- 'type': 'ec2_instance',
1964
- 'collected_at': datetime.utcnow().isoformat()
1965
- }
1966
-
1967
- # Create memory dump
1968
- memory_dump = create_memory_dump(instance_id)
1969
- if memory_dump:
1970
- forensics['memory_dump'] = memory_dump
1971
-
1972
- # Create disk snapshot
1973
- snapshot = create_disk_snapshot(instance_id)
1974
- if snapshot:
1975
- forensics['disk_snapshot'] = snapshot
1976
-
1977
- # Collect system information
1978
- system_info = collect_system_info(instance_id)
1979
- if system_info:
1980
- forensics['system_info'] = system_info
1981
-
1982
- # Collect network connections
1983
- network_info = collect_network_info(instance_id)
1984
- if network_info:
1985
- forensics['network_info'] = network_info
1986
-
1987
- return forensics
1988
-
1989
- def create_memory_dump(instance_id):
1990
- # Use SSM to run memory dump command
1991
- try:
1992
- response = ssm.send_command(
1993
- InstanceIds=[instance_id],
1994
- DocumentName='AWS-RunShellScript',
1995
- Parameters={
1996
- 'commands': [
1997
- 'sudo dd if=/dev/mem of=/tmp/memory.dump',
1998
- 'aws s3 cp /tmp/memory.dump s3://{}/forensics/{}/memory.dump'.format(
1999
- os.environ['FORENSICS_BUCKET'],
2000
- instance_id
2001
- )
2002
- ]
2003
- }
2004
- )
2005
- return {
2006
- 'command_id': response['Command']['CommandId'],
2007
- 's3_location': 's3://{}/forensics/{}/memory.dump'.format(
2008
- os.environ['FORENSICS_BUCKET'],
2009
- instance_id
2010
- )
2011
- }
2012
- except Exception as e:
2013
- print(f"Error creating memory dump: {str(e)}")
2014
- return None
2015
-
2016
- def create_disk_snapshot(instance_id):
2017
- try:
2018
- # Get instance volumes
2019
- instance = ec2.describe_instances(InstanceIds=[instance_id])
2020
- volumes = []
2021
-
2022
- for reservation in instance['Reservations']:
2023
- for instance in reservation['Instances']:
2024
- for bdm in instance.get('BlockDeviceMappings', []):
2025
- if 'Ebs' in bdm:
2026
- volume_id = bdm['Ebs']['VolumeId']
2027
-
2028
- # Create snapshot
2029
- snapshot = ec2.create_snapshot(
2030
- VolumeId=volume_id,
2031
- Description=f'Forensics snapshot for incident - {instance_id}'
2032
- )
2033
-
2034
- volumes.append({
2035
- 'volume_id': volume_id,
2036
- 'snapshot_id': snapshot['SnapshotId']
2037
- })
2038
-
2039
- return volumes
2040
- except Exception as e:
2041
- print(f"Error creating snapshot: {str(e)}")
2042
- return None
2043
-
2044
- def collect_system_info(instance_id):
2045
- # Collect system information via SSM
2046
- commands = [
2047
- 'uname -a',
2048
- 'ps aux',
2049
- 'netstat -tulpn',
2050
- 'last -50',
2051
- 'w',
2052
- 'history'
2053
- ]
2054
-
2055
- try:
2056
- response = ssm.send_command(
2057
- InstanceIds=[instance_id],
2058
- DocumentName='AWS-RunShellScript',
2059
- Parameters={'commands': commands}
2060
- )
2061
- return {'command_id': response['Command']['CommandId']}
2062
- except Exception as e:
2063
- print(f"Error collecting system info: {str(e)}")
2064
- return None
2065
-
2066
- def collect_network_info(instance_id):
2067
- # Collect network flow information
2068
- try:
2069
- # Get VPC Flow Logs
2070
- # This is simplified - real implementation would query flow logs
2071
- return {
2072
- 'flow_logs': 'collected',
2073
- 'connections': 'analyzed'
2074
- }
2075
- except Exception as e:
2076
- print(f"Error collecting network info: {str(e)}")
2077
- return None
2078
-
2079
- def store_forensics_data(data):
2080
- # Store forensics data in S3
2081
- key = 'forensics/{}/data.json'.format(data['incident_id'])
2082
-
2083
- s3.put_object(
2084
- Bucket=os.environ['FORENSICS_BUCKET'],
2085
- Key=key,
2086
- Body=json.dumps(data, indent=2),
2087
- ServerSideEncryption='aws:kms'
2088
- )
2089
- PYTHON
2090
- },
2091
-
2092
- tags: component_tags('siem_security_platform', name, attrs.tags)
2093
- })
2094
-
2095
- resources[:lambda_functions][:forensics] = lambda
2096
- lambda.arn
2097
- end
2098
-
2099
- def create_forensics_role(name, attrs, resources)
2100
- role_name = component_resource_name(name, :forensics_role)
2101
- role = aws_iam_role(role_name, {
2102
- name: role_name.to_s,
2103
- assume_role_policy: JSON.pretty_generate({
2104
- Version: "2012-10-17",
2105
- Statement: [{
2106
- Action: "sts:AssumeRole",
2107
- Effect: "Allow",
2108
- Principal: {
2109
- Service: "lambda.amazonaws.com"
2110
- }
2111
- }]
2112
- }),
2113
- tags: component_tags('siem_security_platform', name, attrs.tags)
2114
- })
2115
-
2116
- # Attach policies
2117
- aws_iam_role_policy_attachment(:"#{role_name}_basic", {
2118
- role: role.name,
2119
- policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2120
- })
2121
-
2122
- # Custom policy for forensics collection
2123
- aws_iam_role_policy(:"#{role_name}_forensics", {
2124
- role: role.id,
2125
- policy: JSON.pretty_generate({
2126
- Version: "2012-10-17",
2127
- Statement: [
2128
- {
2129
- Effect: "Allow",
2130
- Action: [
2131
- "ec2:CreateSnapshot",
2132
- "ec2:DescribeInstances",
2133
- "ec2:DescribeVolumes",
2134
- "ec2:DescribeSnapshots",
2135
- "ssm:SendCommand",
2136
- "ssm:GetCommandInvocation",
2137
- "s3:PutObject",
2138
- "s3:GetObject",
2139
- "kms:Decrypt",
2140
- "kms:GenerateDataKey"
2141
- ],
2142
- Resource: "*"
2143
- }
2144
- ]
2145
- })
2146
- })
2147
-
2148
- role.arn
2149
- end
2150
-
2151
- def create_forensics_bucket(name, attrs, resources)
2152
- bucket_name = component_resource_name(name, :forensics_bucket)
2153
- bucket = create_secure_bucket(
2154
- bucket_name,
2155
- "siem-forensics-#{name}",
2156
- attrs,
2157
- resources
2158
- )
2159
-
2160
- resources[:s3_buckets][:forensics] = bucket
2161
- bucket.id
2162
- end
2163
-
2164
- def create_response_lambda(name, attrs, resources)
2165
- lambda_name = component_resource_name(name, :response_lambda)
2166
- lambda = aws_lambda_function(lambda_name, {
2167
- function_name: "siem-response-#{name}",
2168
- runtime: "python3.11",
2169
- handler: "index.lambda_handler",
2170
- role: create_lambda_execution_role(name, "response", attrs, resources),
2171
- timeout: 300,
2172
-
2173
- code: {
2174
- zip_file: <<~PYTHON
2175
- import json
2176
-
2177
- def lambda_handler(event, context):
2178
- severity = event.get('severity')
2179
- incident = event.get('incident', {})
2180
-
2181
- # Execute response based on severity
2182
- if severity == 'high':
2183
- response = execute_high_severity_response(incident)
2184
- elif severity == 'medium':
2185
- response = execute_medium_severity_response(incident)
2186
- else:
2187
- response = execute_low_severity_response(incident)
2188
-
2189
- return {
2190
- 'statusCode': 200,
2191
- 'body': json.dumps(response)
2192
- }
2193
-
2194
- def execute_high_severity_response(incident):
2195
- # Implement high severity response
2196
- return {
2197
- 'actions_taken': [
2198
- 'blocked_suspicious_ips',
2199
- 'disabled_compromised_accounts',
2200
- 'initiated_forensics_collection'
2201
- ]
2202
- }
2203
-
2204
- def execute_medium_severity_response(incident):
2205
- # Implement medium severity response
2206
- return {
2207
- 'actions_taken': [
2208
- 'increased_monitoring',
2209
- 'notified_security_team'
2210
- ]
2211
- }
2212
-
2213
- def execute_low_severity_response(incident):
2214
- # Implement low severity response
2215
- return {
2216
- 'actions_taken': [
2217
- 'logged_incident',
2218
- 'updated_metrics'
2219
- ]
2220
- }
2221
- PYTHON
2222
- },
2223
-
2224
- tags: component_tags('siem_security_platform', name, attrs.tags)
2225
- })
2226
-
2227
- resources[:lambda_functions][:response] = lambda
2228
- lambda.arn
2229
- end
2230
-
2231
- def create_ticketing_lambda(name, attrs, resources)
2232
- lambda_name = component_resource_name(name, :ticketing_lambda)
2233
- lambda = aws_lambda_function(lambda_name, {
2234
- function_name: "siem-ticketing-#{name}",
2235
- runtime: "python3.11",
2236
- handler: "index.lambda_handler",
2237
- role: create_lambda_execution_role(name, "ticketing", attrs, resources),
2238
- timeout: 60,
2239
-
2240
- environment: {
2241
- variables: {
2242
- INTEGRATIONS: JSON.generate(attrs.integrations.select { |i| i[:type] == 'ticketing' })
2243
- }
2244
- },
2245
-
2246
- code: {
2247
- zip_file: <<~PYTHON
2248
- import json
2249
- import os
2250
- import requests
2251
- from datetime import datetime
2252
-
2253
- def lambda_handler(event, context):
2254
- action = event.get('action')
2255
- incident = event.get('incident', {})
2256
-
2257
- if action == 'create_ticket':
2258
- ticket = create_incident_ticket(incident)
2259
- else:
2260
- ticket = {'error': 'Unknown action'}
2261
-
2262
- return {
2263
- 'statusCode': 200,
2264
- 'body': json.dumps(ticket)
2265
- }
2266
-
2267
- def create_incident_ticket(incident):
2268
- integrations = json.loads(os.environ.get('INTEGRATIONS', '[]'))
2269
-
2270
- ticket = {
2271
- 'title': f"Security Incident: {incident.get('name', 'Unknown')}",
2272
- 'description': format_incident_description(incident),
2273
- 'severity': incident.get('severity', 'medium'),
2274
- 'created_at': datetime.utcnow().isoformat(),
2275
- 'incident_id': incident.get('id')
2276
- }
2277
-
2278
- # Send to configured ticketing systems
2279
- for integration in integrations:
2280
- if integration.get('enabled', True):
2281
- send_to_ticketing_system(ticket, integration)
2282
-
2283
- return ticket
2284
-
2285
- def format_incident_description(incident):
2286
- description = f"""
2287
- Incident ID: {incident.get('id')}
2288
- Severity: {incident.get('severity', 'unknown').upper()}
2289
- Time: {incident.get('timestamp')}
2290
-
2291
- Description: {incident.get('description', 'No description provided')}
2292
-
2293
- Affected Resources:
2294
- """
2295
-
2296
- for resource in incident.get('affected_resources', []):
2297
- description += f"\\n- {resource.get('type')}: {resource.get('id')}"
2298
-
2299
- description += f"\\n\\nIndicators: {len(incident.get('indicators', []))}"
2300
- description += f"\\nActions Taken: {', '.join(incident.get('actions_taken', []))}"
2301
-
2302
- return description
2303
-
2304
- def send_to_ticketing_system(ticket, integration):
2305
- # Implement integration with ticketing systems
2306
- # This is a placeholder - real implementation would use actual APIs
2307
- endpoint = integration.get('endpoint')
2308
-
2309
- if endpoint:
2310
- try:
2311
- response = requests.post(
2312
- endpoint,
2313
- json=ticket,
2314
- headers={'Authorization': f"Bearer {get_api_key(integration)}"},
2315
- timeout=30
2316
- )
2317
- return response.json()
2318
- except Exception as e:
2319
- print(f"Error sending to ticketing system: {str(e)}")
2320
-
2321
- return None
2322
-
2323
- def get_api_key(integration):
2324
- # Retrieve API key from Secrets Manager
2325
- # This is simplified - real implementation would use boto3
2326
- return "placeholder-api-key"
2327
- PYTHON
2328
- },
2329
-
2330
- tags: component_tags('siem_security_platform', name, attrs.tags)
2331
- })
2332
-
2333
- resources[:lambda_functions][:ticketing] = lambda
2334
- lambda.arn
2335
- end
2336
-
2337
- def create_playbook_execution(name, playbook, attrs, resources)
2338
- # Create Lambda for playbook execution
2339
- playbook_lambda_name = component_resource_name(name, :playbook, playbook[:name])
2340
-
2341
- resources[:lambda_functions][:"playbook_#{playbook[:name]}"] = aws_lambda_function(playbook_lambda_name, {
2342
- function_name: "siem-playbook-#{name}-#{playbook[:name]}",
2343
- runtime: "python3.11",
2344
- handler: "index.lambda_handler",
2345
- role: create_lambda_execution_role(name, "playbook-#{playbook[:name]}", attrs, resources),
2346
- timeout: 900,
2347
-
2348
- environment: {
2349
- variables: {
2350
- PLAYBOOK_NAME: playbook[:name],
2351
- PLAYBOOK_STEPS: JSON.generate(playbook[:steps])
2352
- }
2353
- },
2354
-
2355
- code: {
2356
- zip_file: generate_playbook_code(playbook)
2357
- },
2358
-
2359
- tags: component_tags('siem_security_platform', name, attrs.tags)
2360
- })
2361
- end
2362
-
2363
- def generate_playbook_code(playbook)
2364
- <<~PYTHON
2365
- import json
2366
- import os
2367
- import boto3
2368
-
2369
- def lambda_handler(event, context):
2370
- playbook_name = os.environ['PLAYBOOK_NAME']
2371
- steps = json.loads(os.environ['PLAYBOOK_STEPS'])
2372
-
2373
- results = []
2374
- for step in steps:
2375
- result = execute_step(step, event)
2376
- results.append(result)
2377
-
2378
- # Stop if step fails and is marked as critical
2379
- if not result['success'] and step.get('critical', False):
2380
- break
2381
-
2382
- return {
2383
- 'statusCode': 200,
2384
- 'body': json.dumps({
2385
- 'playbook': playbook_name,
2386
- 'results': results
2387
- })
2388
- }
2389
-
2390
- def execute_step(step, context):
2391
- step_type = step.get('type')
2392
-
2393
- if step_type == 'notify':
2394
- return notify_step(step, context)
2395
- elif step_type == 'isolate':
2396
- return isolate_step(step, context)
2397
- elif step_type == 'block':
2398
- return block_step(step, context)
2399
- elif step_type == 'collect':
2400
- return collect_step(step, context)
2401
- elif step_type == 'analyze':
2402
- return analyze_step(step, context)
2403
- else:
2404
- return {'success': False, 'error': 'Unknown step type'}
2405
-
2406
- def notify_step(step, context):
2407
- # Implement notification logic
2408
- return {'success': True, 'action': 'notified', 'details': step}
2409
-
2410
- def isolate_step(step, context):
2411
- # Implement isolation logic
2412
- return {'success': True, 'action': 'isolated', 'details': step}
2413
-
2414
- def block_step(step, context):
2415
- # Implement blocking logic
2416
- return {'success': True, 'action': 'blocked', 'details': step}
2417
-
2418
- def collect_step(step, context):
2419
- # Implement collection logic
2420
- return {'success': True, 'action': 'collected', 'details': step}
2421
-
2422
- def analyze_step(step, context):
2423
- # Implement analysis logic
2424
- return {'success': True, 'action': 'analyzed', 'details': step}
2425
- PYTHON
2426
- end
2427
-
2428
- def create_monitoring(name, attrs, resources)
2429
- # Create CloudWatch dashboard
2430
- dashboard_name = component_resource_name(name, :dashboard)
2431
-
2432
- dashboard_body = {
2433
- widgets: [
2434
- {
2435
- type: "metric",
2436
- properties: {
2437
- metrics: [
2438
- ["AWS/ES", "ClusterUsedSpace", { stat: "Average" }],
2439
- [".", "ClusterIndexWritesBlocked", { stat: "Sum" }],
2440
- [".", "ClusterStatus.green", { stat: "Average" }]
2441
- ],
2442
- period: 300,
2443
- stat: "Average",
2444
- region: aws_region,
2445
- title: "OpenSearch Cluster Health"
2446
- }
2447
- },
2448
- {
2449
- type: "metric",
2450
- properties: {
2451
- metrics: [
2452
- ["AWS/Kinesis/Firehose", "IncomingRecords", { stat: "Sum" }],
2453
- [".", "DeliveryToElasticsearch.Success", { stat: "Sum" }],
2454
- [".", "DeliveryToElasticsearch.DataFreshness", { stat: "Average" }]
2455
- ],
2456
- period: 300,
2457
- stat: "Sum",
2458
- region: aws_region,
2459
- title: "Data Ingestion Metrics"
2460
- }
2461
- }
2462
- ]
2463
- }
2464
-
2465
- aws_cloudwatch_dashboard(dashboard_name, {
2466
- dashboard_name: "siem-#{name}",
2467
- dashboard_body: JSON.pretty_generate(dashboard_body)
2468
- })
2469
-
2470
- # Create alarms for critical metrics
2471
- create_siem_alarms(name, attrs, resources)
2472
- end
2473
-
2474
- def create_siem_alarms(name, attrs, resources)
2475
- # OpenSearch cluster health alarm
2476
- cluster_health_alarm = component_resource_name(name, :cluster_health_alarm)
2477
- resources[:alarms][:cluster_health] = aws_cloudwatch_metric_alarm(cluster_health_alarm, {
2478
- alarm_name: "siem-cluster-health-#{name}",
2479
- alarm_description: "Alert when OpenSearch cluster is not green",
2480
- metric_name: "ClusterStatus.green",
2481
- namespace: "AWS/ES",
2482
- statistic: "Average",
2483
- period: 300,
2484
- evaluation_periods: 2,
2485
- threshold: 1,
2486
- comparison_operator: "LessThanThreshold",
2487
- dimensions: {
2488
- DomainName: resources[:opensearch_domain].domain_name
2489
- },
2490
- alarm_actions: [resources[:sns_topics][:alerts].arn],
2491
- tags: component_tags('siem_security_platform', name, attrs.tags)
2492
- })
2493
-
2494
- # Data freshness alarm
2495
- data_freshness_alarm = component_resource_name(name, :data_freshness_alarm)
2496
- resources[:alarms][:data_freshness] = aws_cloudwatch_metric_alarm(data_freshness_alarm, {
2497
- alarm_name: "siem-data-freshness-#{name}",
2498
- alarm_description: "Alert when data ingestion is delayed",
2499
- metric_name: "DeliveryToElasticsearch.DataFreshness",
2500
- namespace: "AWS/Kinesis/Firehose",
2501
- statistic: "Average",
2502
- period: 300,
2503
- evaluation_periods: 2,
2504
- threshold: 900, # 15 minutes
2505
- comparison_operator: "GreaterThanThreshold",
2506
- alarm_actions: [resources[:sns_topics][:alerts].arn],
2507
- tags: component_tags('siem_security_platform', name, attrs.tags)
2508
- })
2509
-
2510
- # High severity incident alarm
2511
- if attrs.monitoring_config[:create_alarms]
2512
- incident_alarm = component_resource_name(name, :high_severity_alarm)
2513
- resources[:alarms][:high_severity] = aws_cloudwatch_metric_alarm(incident_alarm, {
2514
- alarm_name: "siem-high-severity-incidents-#{name}",
2515
- alarm_description: "Alert on high severity security incidents",
2516
- metric_name: "HighSeverityIncidents",
2517
- namespace: "Custom/SIEM",
2518
- statistic: "Sum",
2519
- period: 300,
2520
- evaluation_periods: 1,
2521
- threshold: 1,
2522
- comparison_operator: "GreaterThanOrEqualToThreshold",
2523
- alarm_actions: [resources[:sns_topics][:alerts].arn],
2524
- tags: component_tags('siem_security_platform', name, attrs.tags)
2525
- })
2526
- end
2527
- end
2528
-
2529
- def create_dashboards(name, attrs, resources)
2530
- # Create OpenSearch dashboards via API
2531
- # This would typically be done after OpenSearch is deployed
2532
- # For now, we'll create a Lambda to configure dashboards
2533
-
2534
- dashboard_config_lambda = component_resource_name(name, :dashboard_config)
2535
- resources[:lambda_functions][:dashboard_config] = aws_lambda_function(dashboard_config_lambda, {
2536
- function_name: "siem-dashboard-config-#{name}",
2537
- runtime: "python3.11",
2538
- handler: "index.lambda_handler",
2539
- role: create_lambda_execution_role(name, "dashboard-config", attrs, resources),
2540
- timeout: 300,
2541
-
2542
- environment: {
2543
- variables: {
2544
- OPENSEARCH_ENDPOINT: resources[:opensearch_domain].endpoint,
2545
- DASHBOARDS: JSON.generate(attrs.dashboards)
2546
- }
2547
- },
2548
-
2549
- code: {
2550
- zip_file: generate_dashboard_config_code()
2551
- },
2552
-
2553
- tags: component_tags('siem_security_platform', name, attrs.tags)
2554
- })
2555
-
2556
- # Invoke Lambda to configure dashboards
2557
- aws_lambda_invocation(:"#{dashboard_config_lambda}_invoke", {
2558
- function_name: resources[:lambda_functions][:dashboard_config].function_name,
2559
- input: JSON.generate({ action: "configure_dashboards" })
2560
- })
2561
- end
2562
-
2563
- def generate_dashboard_config_code
2564
- <<~PYTHON
2565
- import json
2566
- import os
2567
- from opensearchpy import OpenSearch
2568
-
2569
- def lambda_handler(event, context):
2570
- es = OpenSearch(
2571
- hosts=[{'host': os.environ['OPENSEARCH_ENDPOINT'], 'port': 443}],
2572
- http_auth=get_auth(),
2573
- use_ssl=True,
2574
- verify_certs=True
2575
- )
2576
-
2577
- dashboards = json.loads(os.environ['DASHBOARDS'])
2578
-
2579
- for dashboard in dashboards:
2580
- create_dashboard(es, dashboard)
2581
-
2582
- return {
2583
- 'statusCode': 200,
2584
- 'body': json.dumps({
2585
- 'dashboards_created': len(dashboards)
2586
- })
2587
- }
2588
-
2589
- def create_dashboard(es, dashboard):
2590
- dashboard_type = dashboard['type']
2591
-
2592
- if dashboard_type == 'security_overview':
2593
- create_security_overview_dashboard(es, dashboard)
2594
- elif dashboard_type == 'threat_hunting':
2595
- create_threat_hunting_dashboard(es, dashboard)
2596
- elif dashboard_type == 'compliance':
2597
- create_compliance_dashboard(es, dashboard)
2598
- elif dashboard_type == 'incident_response':
2599
- create_incident_response_dashboard(es, dashboard)
2600
-
2601
- def create_security_overview_dashboard(es, config):
2602
- # Create security overview visualizations and dashboard
2603
- visualizations = [
2604
- create_events_timeline(es),
2605
- create_severity_distribution(es),
2606
- create_top_threats(es),
2607
- create_geographic_map(es)
2608
- ]
2609
-
2610
- # Create dashboard with visualizations
2611
- dashboard_body = {
2612
- 'title': config['name'],
2613
- 'panels': format_panels(visualizations),
2614
- 'refresh_interval': config.get('refresh_interval', 300)
2615
- }
2616
-
2617
- # Save dashboard
2618
- es.index(
2619
- index='.kibana',
2620
- doc_type='dashboard',
2621
- id=f"dashboard-{config['name'].replace(' ', '-').lower()}",
2622
- body=dashboard_body
2623
- )
2624
-
2625
- def create_threat_hunting_dashboard(es, config):
2626
- # Implement threat hunting dashboard
2627
- pass
2628
-
2629
- def create_compliance_dashboard(es, config):
2630
- # Implement compliance dashboard
2631
- pass
2632
-
2633
- def create_incident_response_dashboard(es, config):
2634
- # Implement incident response dashboard
2635
- pass
2636
-
2637
- def create_events_timeline(es):
2638
- # Create timeline visualization
2639
- return {
2640
- 'title': 'Security Events Timeline',
2641
- 'type': 'line',
2642
- 'query': {
2643
- 'match_all': {}
2644
- }
2645
- }
2646
-
2647
- def create_severity_distribution(es):
2648
- # Create severity distribution visualization
2649
- return {
2650
- 'title': 'Severity Distribution',
2651
- 'type': 'pie',
2652
- 'query': {
2653
- 'terms': {
2654
- 'field': 'severity.keyword'
2655
- }
2656
- }
2657
- }
2658
-
2659
- def create_top_threats(es):
2660
- # Create top threats visualization
2661
- return {
2662
- 'title': 'Top Threats',
2663
- 'type': 'horizontal_bar',
2664
- 'query': {
2665
- 'terms': {
2666
- 'field': 'threat_name.keyword',
2667
- 'size': 10
2668
- }
2669
- }
2670
- }
2671
-
2672
- def create_geographic_map(es):
2673
- # Create geographic threat map
2674
- return {
2675
- 'title': 'Threat Geographic Distribution',
2676
- 'type': 'map',
2677
- 'query': {
2678
- 'exists': {
2679
- 'field': 'source_geo.location'
2680
- }
2681
- }
2682
- }
2683
-
2684
- def format_panels(visualizations):
2685
- # Format visualizations as dashboard panels
2686
- panels = []
2687
- for i, viz in enumerate(visualizations):
2688
- panels.append({
2689
- 'visualization': viz,
2690
- 'gridData': {
2691
- 'x': (i % 2) * 24,
2692
- 'y': (i // 2) * 12,
2693
- 'w': 24,
2694
- 'h': 12
2695
- }
2696
- })
2697
- return panels
2698
-
2699
- def get_auth():
2700
- # Implement authentication
2701
- return None
2702
- PYTHON
2703
- end
2704
-
2705
- def create_integration(name, integration, attrs, resources)
2706
- # Create integration based on type
2707
- case integration[:type]
2708
- when 'soar'
2709
- create_soar_integration(name, integration, attrs, resources)
2710
- when 'threat_intel'
2711
- create_threat_intel_integration(name, integration, attrs, resources)
2712
- when 'notification'
2713
- create_notification_integration(name, integration, attrs, resources)
2714
- end
2715
- end
2716
-
2717
- def create_soar_integration(name, integration, attrs, resources)
2718
- # Create Lambda for SOAR integration
2719
- lambda_name = component_resource_name(name, :soar_integration, integration[:name])
2720
-
2721
- resources[:lambda_functions][:"soar_#{integration[:name]}"] = aws_lambda_function(lambda_name, {
2722
- function_name: "siem-soar-#{name}-#{integration[:name]}",
2723
- runtime: "python3.11",
2724
- handler: "index.lambda_handler",
2725
- role: create_lambda_execution_role(name, "soar-#{integration[:name]}", attrs, resources),
2726
- timeout: 300,
2727
-
2728
- environment: {
2729
- variables: {
2730
- SOAR_ENDPOINT: integration[:endpoint] || "",
2731
- SOAR_API_KEY_SECRET: integration[:api_key_secret_arn] || ""
2732
- }
2733
- },
2734
-
2735
- code: {
2736
- zip_file: <<~PYTHON
2737
- import json
2738
- import boto3
2739
- import os
2740
- import requests
2741
-
2742
- def lambda_handler(event, context):
2743
- # Send incident to SOAR platform
2744
- incident = event.get('incident', {})
2745
-
2746
- soar_payload = {
2747
- 'name': incident.get('name'),
2748
- 'severity': incident.get('severity'),
2749
- 'description': incident.get('description'),
2750
- 'artifacts': incident.get('indicators', []),
2751
- 'actions': incident.get('recommended_actions', [])
2752
- }
2753
-
2754
- # Send to SOAR
2755
- response = send_to_soar(soar_payload)
2756
-
2757
- return {
2758
- 'statusCode': 200,
2759
- 'body': json.dumps(response)
2760
- }
2761
-
2762
- def send_to_soar(payload):
2763
- endpoint = os.environ.get('SOAR_ENDPOINT')
2764
- api_key = get_api_key()
2765
-
2766
- if endpoint and api_key:
2767
- try:
2768
- response = requests.post(
2769
- f"{endpoint}/api/incidents",
2770
- json=payload,
2771
- headers={'Authorization': f'Bearer {api_key}'},
2772
- timeout=30
2773
- )
2774
- return response.json()
2775
- except Exception as e:
2776
- return {'error': str(e)}
2777
-
2778
- return {'error': 'Missing configuration'}
2779
-
2780
- def get_api_key():
2781
- secret_arn = os.environ.get('SOAR_API_KEY_SECRET')
2782
- if secret_arn:
2783
- client = boto3.client('secretsmanager')
2784
- response = client.get_secret_value(SecretId=secret_arn)
2785
- return json.loads(response['SecretString']).get('api_key')
2786
- return None
2787
- PYTHON
2788
- },
2789
-
2790
- tags: component_tags('siem_security_platform', name, attrs.tags)
2791
- })
2792
- end
2793
-
2794
- def create_threat_intel_integration(name, integration, attrs, resources)
2795
- # Already handled in create_threat_detection
2796
- end
2797
-
2798
- def create_notification_integration(name, integration, attrs, resources)
2799
- # Create SNS topic for notifications if not exists
2800
- topic_name = component_resource_name(name, :notification, integration[:name])
2801
- resources[:sns_topics][integration[:name].to_sym] = aws_sns_topic(topic_name, {
2802
- name: "siem-notify-#{name}-#{integration[:name]}",
2803
- kms_master_key_id: resources[:kms_keys][:main].id,
2804
- tags: component_tags('siem_security_platform', name, attrs.tags)
2805
- })
2806
-
2807
- # Subscribe endpoint if provided
2808
- if integration[:endpoint]
2809
- aws_sns_topic_subscription(:"#{topic_name}_subscription", {
2810
- topic_arn: resources[:sns_topics][integration[:name].to_sym].arn,
2811
- protocol: integration[:endpoint].start_with?('http') ? 'https' : 'email',
2812
- endpoint: integration[:endpoint]
2813
- })
2814
- end
2815
- end
2816
-
2817
- def calculate_siem_security_score(attrs)
2818
- score = 100
2819
-
2820
- # Deduct points for missing features
2821
- score -= 5 unless attrs.threat_detection[:enable_ml_detection]
2822
- score -= 5 unless attrs.threat_detection[:enable_behavior_analytics]
2823
- score -= 5 unless attrs.incident_response[:enable_automated_response]
2824
- score -= 5 unless attrs.compliance_config[:enable_compliance_reporting]
2825
- score -= 5 unless attrs.security_config[:enable_encryption_at_rest]
2826
- score -= 5 unless attrs.security_config[:enable_fine_grained_access]
2827
- score -= 10 unless attrs.threat_detection[:threat_intel_feeds].any?
2828
-
2829
- # Add points for advanced features
2830
- score += 5 if attrs.analytics_config[:enable_ueba]
2831
- score += 5 if attrs.incident_response[:enable_forensics_collection]
2832
- score += 5 if attrs.scaling_config[:enable_auto_scaling]
2833
-
2834
- [score, 100].min
2835
- end
2836
-
2837
- def generate_siem_compliance_status(attrs)
2838
- status = {}
2839
-
2840
- attrs.compliance_config[:frameworks].each do |framework|
2841
- status[framework] = {
2842
- compliant: true,
2843
- last_assessment: Time.now.iso8601,
2844
- evidence_collected: attrs.compliance_config[:evidence_collection],
2845
- report_available: attrs.compliance_config[:enable_compliance_reporting],
2846
- next_report: calculate_next_report_date(attrs.compliance_config[:report_schedule])
2847
- }
2848
- end
2849
-
2850
- status
2851
- end
2852
-
2853
- def calculate_next_report_date(schedule)
2854
- case schedule
2855
- when 'daily'
2856
- (Time.now + 86400).iso8601
2857
- when 'weekly'
2858
- (Time.now + 604800).iso8601
2859
- when 'monthly'
2860
- (Time.now + 2592000).iso8601
2861
- else
2862
- nil
2863
- end
2864
- end
2865
-
2866
- def aws_region
2867
- 'us-east-1'
2868
- end
2869
-
2870
- def aws_account_id
2871
- '123456789012'
2872
- end
2873
-
2874
- include Base
2875
- end
2876
- end
2877
- end