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
用 --pattern 传入代码片段,用 --kind 指定它的类型(terraform、dockerfile 或 github-actions)。
npx lagune read infra --kind terraform --pattern 'actions = ["*"]' # => iam-wildcard
npx lagune read infra --kind dockerfile --pattern 'FROM node:20' # => mutable-tag
扫描最多输出两个部分。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。可重复使用以检查多个。 |
--kind | terraform | 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 文件。即使源代码扫描器会跳过这些文件,它也能读到。
