Dockerfile・GitHub Actions・Kubernetes チェッカー

Dockerfile、GitHub Actions、Kubernetes のいずれかを選んで設定を貼り付けてください。指摘された行とフィールドをもとに、イメージの固定、トークン権限、実行時設定を実際の環境と照らして確認できます。

ブラウザ内でローカルに実行
設定ファイルはブラウザ内でローカルに解析されます。本番環境のシークレットは貼り付けないでください。それらは既存の ENV Validator で個別に確認してください。
Configuration input

このルールは意図的に保守的です。各指摘事項は、実際に使用するイメージ、クラスターポリシー、ワークフローの権限、環境に照らして確認してください。

設定レビュー
  • 設定タイプを選択してローカルリンターを実行してください。

デプロイ設定を公開前に確認する方法

Dockerfile、GitHub Actions、Kubernetes のいずれかを選び、設定を貼り付けるかファイルから読み込んで「設定を解析」を押します。固定されていないイメージやアクション、広すぎるトークン権限、特権コンテナ、実行時の保護設定の不足など、貼り付けたテキストの該当行とフィールドが表示されます。

ルールセットはページ内で実行されます。検証では解析中にリクエストを送信しなかったため、設定はブラウザー内にとどまり、ネットワークが切れていても確認できます。

  1. 入力タイプ(Dockerfile、GitHub Actions ワークフロー(.yml/.yaml または JSON)、Kubernetes マニフェスト(.yml/.yaml または JSON))を選びます。
  2. テキストを貼り付けるか、「設定ファイルを選択」や「サンプルを読み込む」で入力欄を埋めます。
  3. 「設定を解析」を押します。メトリクス行に高リスク・確認項目・強化のヒントの件数が表示され、一覧の各項目には該当する行やフィールドが示されます。
  4. 「レポートをコピー」で [DANGER] パス — メッセージ 形式のテキストとして取り出すか、「クリア」で入力と結果を消します。

ルールが実際に確認する内容

Dockerfile のルールは命令単位で判定します

バックスラッシュで継続した RUN は 1 つの命令として扱われます。apt-get install … && rm -rf /var/lib/apt/lists/* は同一レイヤーでリストを削除しているため指摘されませんが、削除しない場合は指摘されます。パイプが次の行にある curl … | sh も同じ走査で検出します。

その他の確認項目は、ベースイメージ(latest、タグもダイジェストもない場合は指摘。scratch は対象外)、FROM の欠落、USER root または 0:0、USER の欠落、COPY で足りる場面の ADD、.dockerignore のない COPY . .、ENV や ARG のシークレットらしい名前です。

ワークフローとマニフェストのルール

ワークフロー側では、pull_request_target トリガー、ワークフローまたは job レベルで宣言された GITHUB_TOKEN 権限(write-all は指摘)、コミット SHA に固定されたサードパーティアクション、シェルへ直接渡すダウンロードを確認します。ローカルアクション(./パス)と docker:// 参照は、固定すべきコミットが存在しないためバージョンを求めません。

マニフェスト側では、apiVersion・kind・name の欠落、クラスタ外に公開する Service タイプ、ホスト名前空間の共有、固定されていないイメージや latest、特権コンテナ、allowPrivilegeEscalation の有効化、readOnlyRootFilesystem の未設定、pod とコンテナ両方での runAsNonRoot 未設定、CPU とメモリの requests と limits の欠落を確認します。kind: List は中身を展開し、各項目を個別に確認します。

問題なしという表示の意味

ルールセットは意図的に保守的で、よくある実務上のミスを探すものであり、ポリシーへの完全準拠を判定するものではありません。イメージのスキャンやアドミッションポリシーの評価、CI ポリシーエンジンの代わりにはならないため、指摘がないことは「これらのルールで何も見つからなかった」という意味であり、安全にデプロイできる証明ではありません。

指摘は貼り付けたテキストに対するヒューリスティックです。実際に使用するイメージ、クラスターポリシー、権限と照らし合わせて確認してください。複数ドキュメントの YAML は列 0 の --- 行で分割し、YAML を受け付ける場所では JSON も受け付けます。

最近使ったツール: