Hooks

infra hook:检测 IaC 配置错误

在命令行中扫描 Terraform、Dockerfile 和 GitHub Actions 中的配置错误,或评估单个代码片段。

infra hook 会标记仅凭文件本身就能判定的基础设施即代码配置错误:对全网开放的网络、通配符权限、清单文件中的密钥、以 root 身份运行的容器、CI shell 中的不可信值。它只读取 IaC 文件(.tf/.tf.json/.hcl、Dockerfile*、.github/workflows/**)。它是 infra 专项 背后的确定性引擎,有 scan 和 check 两种模式。

如何运行​

npx lagune read infra # scans every IaC file
npx lagune read infra --dir infra # scans a directory
npx lagune read infra --file Dockerfile # scans a single file

扫描最多输出两个部分。Infrastructure risks found 会以非零退出码退出,其中列出可判定的缺陷(敏感端口上的 0.0.0.0/0 入站规则、通配符 IAM 语句、清单文件中的密钥、encrypted = false、未固定版本的 git 模块、显式以 root 身份运行的镜像、curl | sh、CI 脚本注入、permissions: write-all)。Infrastructure hardening advisories 不会改变退出码(可变的基础镜像标签、按标签固定的 action)。扫描结果干净时会输出 no infrastructure risks found。

如何解读判定结果​

check 模式会输出它匹配到的严重程度最高的标签(例如 public-ingress、iam-wildcard、root-user、curl-pipe、script-injection、write-all)、建议类标签(mutable-tag、unpinned-action)或 safe。只有达到发现项严重程度的标签才会以非零退出码退出。

CLI 选项​

选项值说明
--pattern一个代码片段检查一个代码片段。需要配合 --kind。可重复使用以检查多个。
--kindterraform | dockerfile | github-actions判定代码片段时所依据的类型。
--dir一个目录将扫描范围限定在某个目录。可重复使用,也可与 --file 组合。
--file一个文件将扫描范围限定在单个文件。可重复使用,也可与 --dir 组合。

不带任何选项时,它会扫描项目中的所有 IaC 文件。--pattern 不能与 --dir 或 --file 组合使用。

提示

hook 只捕捉明显、可判定的情况:缺少加密、pull_request_target 带来的暴露,以及 IAM 范围是否合适,则由 infra 专项 来判断。

常见问题

Terraform/HCL(.tf、.tf.json、.hcl)、Dockerfile,以及 .github/ 下的 GitHub Actions workflow 和 action YAML 文件。即使源代码扫描器会跳过这些文件,它也能读到。