尧图精选

Prowler Terraform Kickstarter:用 Terraform 一键部署 AWS 上的 Prowler 定期安全基线扫描

🕒 发布时间:2026/9/14 19:16:12 📁 来源:尧图网络
Prowler Terraform Kickstarter用 Terraform 一键部署 AWS 上的 Prowler 定期安全基线扫描【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowler本文基于 Prowler 仓库中的 Terraform Kickstarter 模块文档 及其配套 Terraform 源码编写。它讲清了该模块如何在一个 AWS 账户中自动搭起“CloudWatch Events 定时触发 CodeBuild 执行 Prowler 扫描 S3 报告归档 Security Hub 结果订阅”的完整流水线并逐一解析其全部 Terraform 输入变量、资源清单与构建脚本。读完本文你可以直接复制该目录完成部署并理解每个资源的权限边界与默认扫描命令的含义。模块定位与文件构成Terraform Kickstarter 是一个“预构建 Terraform 模块”用于快速安装执行安全基线评估所需的全部 AWS 资源扫描结果通过 Prowler 发送到 AWS Security Hub。在仓库中该模块由以下文件构成main.tfProvider 声明与全部云资源定义IAM、S3、CodeBuild、Security Hub、CloudWatch Eventsvariables.tf全部输入变量及其默认值data.tfaws_caller_identity、aws_region、SecurityAudit托管策略等数据源outputs.tf输出account_idprowler_build_spec.ymlCodeBuild 的 buildspec定义 Prowler 的安装与执行步骤tf_install.shAmazon Linux 上安装 Terraform 的辅助脚本docs/tf.mdTerraform 文档Requirements / Providers / Resources / Inputs / Outputs本文即围绕该文档展开readme.md安装步骤与验收方法说明。环境要求与 Provider 版本根据 docs/tf.md 与 main.tf 的声明模块只依赖hashicorp/aws一个 Provider无子模块No modules名称要求依赖Requirementaws ~ 3.54Provideraws锁定版本 3.55.0这意味着模块面向 AWS Provider 3.x 编写较新的 Provider 4.x/5.x 语法如 S3 桶版本化子资源等并未使用部署前请确认本地 Terraform 能拉取该版本 Provider。provider aws块的 region 由变量var.select_region控制默认us-east-1。安装步骤CloudShell 全程不到一分钟readme.md 给出的官方路径是“启动 AWS CloudShell然后安装 Terraform、拉取仓库、init、apply”。结合当前仓库的实际目录结构步骤如下# 1. 克隆 Prowler 仓库readme.md 原始示例 git clone https://github.com/prowler-cloud/prowler.git cd prowler # 2. 在 Amazon LinuxCloudShell上通过 HashiCorp yum 源安装 Terraform sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo sudo yum -y install terraform # 3. 进入模块目录当前仓库中的实际位置 cd contrib/terraform-kickstarter # 4. 初始化并应用 terraform init terraform apply两点注意事项均来自 readme 与源码Security Hub 订阅可能报一次错readme 明确指出 apply 时大概率会在 SecurityHub 订阅资源aws_securityhub_product_subscription上出现一个与 Terraform 状态相关的错误。此时可打开 Security Hub 控制台进入 Integrations 搜索 Prowler确认其状态显示为绿色的Accepting findings即可验证订阅实际已生效。旧版一键脚本tf_install.sh 会 clone 仓库并 checkoutterraform-kickstart分支旧路径util/terraform-kickstarter在 readme 中仍被引用。在新版仓库中该模块已位于contrib/terraform-kickstarter建议以上面的手工步骤为准。部署完成后默认配置下每天 00:00 GMT 会自动触发一次扫描也可以随时进入 CodeBuild 控制台手动启动security_baseline_kickstarter_codebuild项目立即执行一次评估。资源清单apply 之后你得到什么docs/tf.md 的 Resources 表格完整列出了模块部署的全部资源按职责可分为四组资源类型作用aws_cloudwatch_event_rule.prowler_check_scheduler_eventresource按 cron 表达式定时触发扫描的事件规则aws_cloudwatch_event_target.run_prowler_scanresource将事件路由到 CodeBuild 项目aws_codebuild_project.prowler_codebuildresource执行 Prowler 的构建项目aws_iam_role.prowler_kick_start_roleresourceCodeBuild 服务角色执行 Prowler 扫描aws_iam_role.prowler_event_trigger_roleresourceCloudWatch Events 触发角色仅允许 StartBuildaws_iam_policy.prowler_kickstarter_iam_policyresource扫描角色的内联权限策略aws_iam_policy.prowler_event_trigger_policyresource触发角色的内联权限策略aws_iam_policy_attachment.prowler_kickstarter_iam_policy_attachresource将扫描策略附加到扫描角色aws_iam_policy_attachment.prowler_event_trigger_policy_attachresource将触发策略附加到触发角色aws_s3_bucket.prowler_report_storage_bucketresource报告存储桶版本化 AES256 加密aws_s3_bucket_policy.prowler_report_storage_bucket_policyresource强制 SSL、拒绝未加密对象上传aws_s3_bucket_public_access_block.prowler_report_storage_bucket_block_publicresource四项全开的公网访问屏蔽aws_securityhub_account.securityhub_resourceresource启用 Security Hub 账户aws_securityhub_product_subscription.security_hub_enable_prowler_findingsresource订阅 Prowler 发现项aws_caller_identity.currentdata source获取当前账户 IDaws_iam_policy.SecurityAuditdata sourceAWS 官方 SecurityAudit 托管策略aws_region.currentdata source获取当前 Region 名称IAM两个角色的最小权限切分main.tf 中定义了两个角色职责刻意分开prowler_kick_start_rolesecurity_baseline_kickstarter_iam_role信任策略只允许codebuild.amazonaws.com扮演Sid 为CodeBuildProwler。它直接附加 AWS 托管策略arn:aws:iam::aws:policy/SecurityAudit以及job-function/SupportUser、job-function/ViewOnlyAccess获得只读巡检所需的基础权限并通过 main.tf 的内联策略prowler_kickstarter_iam_policy获得写 CloudWatch Logs、向 Security HubBatchImportFindings/GetFindings、操作 CodeBuild 报告组、sts:AssumeRole以及对报告桶arn:aws:s3:::prowler-kickstart-${region}-${account}-reports/*的s3:PutObject/GetObject等权限。prowler_event_trigger_rolesecurity_baseline_kickstarter_event_trigger_iam_role信任策略只允许events.amazonaws.com扮演其内联策略 prowler_event_trigger_policy 仅授予对这一个 CodeBuild 项目 ARN 的codebuild:StartBuild是纯粹的“扳机”角色。S3 报告桶默认安全加固main.tf 中报告桶命名为prowler-kickstart-${region}-${account_id}-reports并内置三层保护桶开启版本控制服务端加密默认AES256SSE-S3桶策略包含S3ForceSSL拒绝非 TLS 请求和DenyUnEncryptedObjectUploads拒绝不带 SSE 头的对象写入两条 Deny 语句aws_s3_bucket_public_access_block四项block_public_acls、block_public_policy、ignore_public_acls、restrict_public_buckets全部为true。Security Hub 集成main.tf 先创建aws_securityhub_account开通账户再创建aws_securityhub_product_subscriptionproduct_arn固定为arn:aws:securityhub:${region}::product/prowler/prowler——即让 Security Hub 接受 Prowler 作为发现项来源产品。这也是 apply 时最容易报状态错误的资源见上文注意事项。main.tf 头部注释还给出了一条运维提示若 Security Hub 账户在 Terraform 之外已存在可用terraform import aws_securityhub_account.securityhubresource account_id导入状态。定时调度main.tf 中 CloudWatch Event Rulesecurity_baseline_kickstarter_event_cron的schedule_expression取自变量var.prowler_schedule目标直接指向 CodeBuild 项目 ARN 并携带触发角色 ARN。默认 croncron(0 0 ? * * *)表示每天 00:00GMT执行一次。输入变量详解docs/tf.md 的 Inputs 表格与 variables.tf 一致全部变量均有默认值、非必填变量类型默认值说明select_regionstringus-east-1AWS Provider 使用的 Regionenable_security_hubbooltrue是否启用 AWS Security Hubenable_security_hub_prowler_subscriptionbooltrue是否启用 Prowler 产品订阅prowler_cli_optionsstring-q -M json-asff -S -f us-east-1传给 Prowler 的完整 CLI 参数prowler_schedulestringcron(0 0 ? * * *)cron 调度表达式codebuild_timeoutnumber300CodeBuild 构建超时分钟其中prowler_cli_options是最关键的变量它被原样注入 CodeBuild 环境变量PROWLER_OPTIONS最终拼进执行命令。默认值各参数的含义为-q静默输出不逐条打印检查项-M json-asff指定 ASFFAWS Security Finding Format输出格式正是 Security HubBatchImportFindings所需的格式——从当前 CLI 解析器源码 可以看到-M即--output-formats的帮助文本明确说明“使用 AWS Security Hub 集成时json-asff 输出也会一并保存”-S开启 Security Hub 推送-f指定 Prowler 使用的 AWS Region。由于该字符串是整体透传的你可以在部署时追加任意合法的 Prowler CLI 参数例如追加合规框架--compliance或指定--output-directory但需注意参数语法以当时扫描的 Prowler 版本 CLI 为准。codebuild_timeout对应aws_codebuild_project的build_timeout见 main.tf。全账户扫描通常不会超过默认的 300 分钟若账户规模极大导致构建超时调大该值即可。CodeBuild 构建脚本解析扫描的实际执行逻辑在 prowler_build_spec.yml由 main.tf 以buildspec file(prowler_build_spec.yml)内联进项目source.type为NO_SOURCEversion: 0.2 phases: install: runtime-versions: python: 3.8 commands: - echo Installing Prowler and dependencies... - pip3 install detect-secrets - yum -y install jq - curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip - unzip awscliv2.zip - ./aws/install - git clone https://github.com/prowler-cloud/prowler - cd prowler build: commands: - echo Running Prowler as ./prowler $PROWLER_OPTIONS - ./prowler $PROWLER_OPTIONS || true post_build: commands: - echo Scan Complete - aws s3 cp --sse AES256 output/ s3://$BUCKET_REPORT/ --recursive - echo Done!各阶段要点install基于aws/codebuild/amazonlinux2-x86_64-standard:3.0镜像见 main.tf 的environment块安装 Python 3.8 运行时、detect-secretsProwler 检查密钥扫描时的可选依赖、jq并安装 AWS CLI v2 供上传报告用最后克隆 Prowler 源码build以./prowler $PROWLER_OPTIONS执行扫描。末尾的|| true保证即使 Prowler 以非零退出码结束例如存在失败检查项触发的退出码 3构建也不会失败post_build 的报告归档仍会执行post_build将output/目录整体以 AES256 服务端加密递归上传到环境变量$BUCKET_REPORT指向的报告桶——该环境变量由 main.tf 注入值为报告桶 ID。由于artifacts.type为NO_ARTIFACTS见 main.tf构建不产生 CodeBuild 工件报告的唯一落点就是 S3 报告桶Security Hub 中的发现项则通过扫描进程直接调用securityhub:BatchImportFindings上报内联策略已放行且Resource为*因为 Security Hub 发现项操作不支持资源级细化。输出与部署后的验证模块只有一个输出见 outputs.tf 与 tf.md 的 Outputs 表输出取值account_iddata.aws_caller_identity.current.account_id即部署所在账户 IDterraform apply成功后建议按 readme.md 的验收流程确认打开 Security Hub 控制台 → Integrations → 搜索 Prowler确认状态为Accepting findings若 apply 时该资源报错以此为准打开 CodeBuild 控制台手动启动一次security_baseline_kickstarter_codebuild项目确认构建成功、S3 报告桶中出现output/下的报告文件Security Hub 中随后出现 Prowler 来源的发现项之后每天 00:00 GMT 会按默认 cron 自动重复上述流程。想改频率只需在 apply 时传入新的-var prowler_schedule......CloudWatch Events 的 cron 语法无需改动任何 tf 文件。小结该 Kickstarter 的价值在于把“定时化、可追溯的云上安全基线扫描”所需的四类资源调度、执行、存储、汇总一次性以 IaC 方式装好CloudWatch Events 负责按 cron 触发CodeBuild 负责安装并运行 Prowler 并归档报告S3 桶以强制 TLS SSE 公网屏蔽的方式保存原始输出Security Hub 订阅则把 ASFF 格式发现项持续汇入统一的合规视图。所有可调项Region、扫描频率、超时、CLI 参数都收敛在 variables.tf 的六个变量中配合 docs/tf.md 的资源与输入输出清单即可在约一分钟内完成部署并接管后续的安全基线巡检。【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →