フック

infra フック:IaC の設定ミスを検出する

コマンドラインから、Terraform、Dockerfile、GitHub Actions の設定ミスをスキャンしたり、1 つのコードスニペットを判定したりできます。

infra フックは、インターネット全体に開放されたネットワーク、ワイルドカードの権限、マニフェスト内のシークレット、root で動くコンテナ、CI のシェルに渡る信頼できない値といった、ファイルだけで判定できる IaC(Infrastructure as Code)の設定ミスを指摘します。読み取るのは 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

スキャンは最大 2 つのセクションを出力します。Infrastructure risks found は判定可能な不備(機密性の高いポートへの 0.0.0.0/0 からのインバウンド許可、ワイルドカードを使った IAM ステートメント、マニフェスト内のシークレット、encrypted = false、バージョンが固定されていない git モジュール、明示的に root で動くイメージ、curl | sh、CI のスクリプトインジェクション、permissions: write-all)の一覧で、フックは 0 以外の終了コードで終了します。Infrastructure hardening advisories は終了コードを変えません(中身が変わりうるベースイメージのタグ、タグで固定したアクション)。何も見つからなければ no infrastructure risks found と出力します。

判定の読み方​

check モードは、一致したタグのうち最も深刻度の高いもの(例:public-ingress、iam-wildcard、root-user、curl-pipe、script-injection、write-all)、推奨事項のタグ(mutable-tag、unpinned-action)、または safe を出力します。0 以外の終了コードで終了するのは、検出事項レベルの深刻度のタグだけです。

CLI オプション​

オプション値説明
--patternコードスニペット1 つのコードスニペットをチェックする。--kind が必要。繰り返し指定で複数をチェックできる。
--kindterraform | dockerfile | github-actionsコードスニペットをどの種類として判定するか。
--dirディレクトリスキャン対象をディレクトリに絞る。繰り返し指定でき、--file と併用できる。
--fileファイルスキャン対象を 1 つのファイルに絞る。繰り返し指定でき、--dir と併用できる。

オプションを指定しなければ、プロジェクト内のすべての IaC ファイルをスキャンします。--pattern は --dir や --file とは併用できません。

ヒント

フックが捉えるのは明白で判定可能なケースで、暗号化の設定漏れ、pull_request_target による露出、適切な IAM の範囲といった判断は、引き続き infra 専門知識 が担います。

よくある質問

Terraform/HCL(.tf、.tf.json、.hcl)、Dockerfile、そして .github/ 配下にある GitHub Actions のワークフローとアクションの YAML です。ソースコード向けのスキャナーはこれらのファイルを読み飛ばしますが、このフックは読み取ります。