mcpField
G
glab-dependency-firewall

glab-dependency-firewall

github.com/vince-winkintelセキュリティ4960 回インストール1 日前に更新
リポジトリ

glab-dependency-firewall について

glab dependency-firewall は、GitLab Dependency Firewall を使うコマンドラインスキルです。パッケージの検査や対応するパッケージマネージャーの実行に加え、CI の活動を要約し、解析・承認できない対象通信をブロックします。

主な機能

  1. 01バージョン付きパッケージ座標の検査
  2. 02対応パッケージマネージャーでの操作
  3. 03パッケージ通信へのポリシー適用
  4. 04CI 活動の読み取りと要約

活用シーン

  1. 01npm、PyPI、Maven、RubyGems のパッケージ確認
  2. 02GitLab プロジェクトでのポリシー準拠インストール
  3. 03Dependency Firewall のブロック確認
  4. 04パッケージ解析やポリシーエラーの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/vince-winkintel/gitlab-cli-skills --skill glab-dependency-firewall

インストール後、Claude Code で/glab-dependency-firewallを入力して読み込まれたか確認します。

同梱ファイルreferences/commands.md

詳細

glab dependency-firewall

パッケージ URL を確認し、GitLab Dependency Firewall 経由でサポート対象のパッケージマネージャーを実行して、記録されたアクティビティを調べます。このコマンドグループは試験的な機能です。長期的に使用する自動化で依存する前に、利用可能であることを確認してください。

NuGet トラフィックの照合

プロキシは、NuGet v3 flatcontainer のパッケージダウンロードと、マルチパート PUT によるパッケージ/シンボルのアップロードを認識します。サポート対象の flatcontainer 形式以外の .nupkg ダウンロード URL など、対象範囲内で解析できないトラフィックはすべてフェイルクローズします。この照合機能は nuget または dotnet のラッパーを提供せず、package コマンドでサポートされる PURL タイプも拡張しません。親ヘルプに記載されているラッパーのみを使用してください。

1 つのパッケージを確認する

パッケージマネージャーを実行せずに、バージョン付きパッケージ座標 1 つのポリシー判定を確認する場合は、package を使用します。

glab dependency-firewall package pkg:npm/[email protected]
glab dependency-firewall package pkg:pypi/[email protected]
glab dependency-firewall package pkg:maven/org.slf4j/[email protected]
glab dependency-firewall package pkg:gem/[email protected]

サポート対象の PURL タイプは npm、pypi、maven、gem で、PURL にはバージョンを含める必要があります。終了コード 0 は許可または警告、終了コード 1 は設定ミスまたは転送エラー、終了コード 3 はブロックを意味します。警告は終了コードがゼロでもレビュー対象として扱い、終了コード 3 はポリシーの判定として扱って、回避するために再試行しないでください。このコマンドは .gitlab/df/ci-log.json に書き込まないため、その結果は ci-summary に表示されません。

サポート対象のラッパー

各ラッパーは、まず現在のリポジトリから GitLab プロジェクトを解決して GitLab API クライアントを作成し、次にそのプロジェクトの Dependency Firewall ポリシーを取得して、残りの引数を指定されたパッケージマネージャーのバイナリに渡します。その後、パッケージトラフィックにポリシーを適用し、実行結果を要約します。プロジェクトの解決は、必ずパッケージマネージャーの起動前に行われます。ラッパーは設定を書き換えず、パッケージマネージャー既存のレジストリ、インデックス、またはソース設定を使用します。

現在の glab は、認識済みで Content-Length が既知のパッケージアーティファクトを、アーティファクト全体をメモリにバッファーするのではなく、ストリーミングします。これは、拡張子またはサポート対象のバイナリ Content-Type によって識別される wheel、crate、tarball、ZIP、gem、JAR、WAR、AAR、NuGet パッケージに適用されます。長さが不明なレスポンス、転送時に展開されたレスポンス、メタデータ、および成功以外のレスポンスには、HTTP フレーミングとヘッダーを安全に修復できるよう、引き続きバッファー方式が使用されます。パッケージマネージャーのチェックサム/整合性検証を維持し、部分ダウンロードのエラーはすべてインストール失敗として扱ってください。

glab コマンド実行ファイル例
cargocargoglab dependency-firewall cargo fetch
bundlebundleglab dependency-firewall bundle install
gemgemglab dependency-firewall gem install rake
gradlegradleglab dependency-firewall gradle build
mavenmvnglab dependency-firewall maven verify
npmnpmglab dependency-firewall npm ci --ignore-scripts
pippipglab dependency-firewall pip install requests
pipenvpipenvglab dependency-firewall pipenv install requests
pnpmpnpmglab dependency-firewall pnpm install left-pad
poetrypoetryglab dependency-firewall poetry add requests
twinetwineglab dependency-firewall twine upload dist/*
uvuvglab dependency-firewall uv pip install requests
yarnyarnglab dependency-firewall yarn add left-pad

GitLab リモートが対象のプロジェクトを示す Git リポジトリ内でラッパーを実行し、事前に glab の認証を確認してください。ポリシーによるブロックは確定的な判定として扱い、その結果を回避するためだけにラッパーを使わず再試行しないでください。

解析できないパッケージトラフィック

プロキシは、対象範囲内のパッケージのアップロードまたはダウンロードを認識しても、パッケージの座標を特定できない場合、フェイルクローズします。たとえば、公開メタデータの形式が不正な場合、検査上限を超えるアップロード、アーティファクトのファイル名やパスの形式が不正な場合などです。このようなリクエストは HTTP 403 でブロックされ、上流レジストリやポリシーチェッカーに接続する前に、ブロックとして記録されます。ポリシーチェックでエラーが発生した場合も、リクエストはブロックされます。

対象外と分類されたメタデータ、インデックス、サイドカーへのリクエストは、そのまま通過します。これは、あらゆるパッケージプロトコルが検査されるという意味ではありません。トラブルシューティングでは、記録された理由とパッケージマネージャーのリクエスト形式を確認してください。解析またはポリシーによるブロックを回避するために、ラッパーを使わずに再試行しないでください。内部のエコシステムマッチャーがあっても、CLI ラッパーが追加で利用できるとは限りません。

ラッパーのヘルプ

ラッパー名の後ろにあるものはすべて、変更されずにパッケージマネージャーへ渡されます。ラッパーコマンドでは DisableFlagParsing を使用しているため、-h、-R、--repo、--hostname などの glab フラグはそこで解析されません。プロジェクトの解決と GitLab API クライアントの作成は引き続き先に実行されます。そのため、GitLab リモートのリポジトリ外、または有効な認証コンテキスト外では、パッケージマネージャーがヘルプを表示する前に glab dependency-firewall <wrapper> --help が失敗します。

# Parent command and supported wrappers
glab dependency-firewall --help
glab help dependency-firewall package

# glab's wrapper help without invoking the package manager
glab help dependency-firewall cargo
glab help dependency-firewall npm
glab help dependency-firewall maven
glab help dependency-firewall uv
glab help dependency-firewall yarn

ドキュメントや自動化を作成する場合は、すべてのラッパーについて glab help dependency-firewall <wrapper> を使用してください。ラッパーを確認する目的で glab dependency-firewall <wrapper> --help に頼らないでください。

CI アクティビティの要約

ci-summary は、現在の作業ディレクトリを基準に .gitlab/df/ci-log.json を読み取ります。ログを生成したパッケージマネージャー/Dependency Firewall の操作と同じディレクトリから実行してください。

if glab dependency-firewall ci-summary; then
  echo "No blocked dependency entries"
else
  rc=$?
  case "$rc" in
    1) echo "Dependency Firewall log could not be read" >&2 ;;
    3) echo "Dependency Firewall blocked one or more packages" >&2 ;;
    *) echo "Unexpected Dependency Firewall failure: $rc" >&2 ;;
  esac
  exit "$rc"
fi

終了コード:

  • 0:ブロックされたエントリはありません。許可のみ、警告のみ、または記録されたアクティビティがない場合です。
  • 1:ログを読み取れないか、解析できませんでした。
  • 3:1 つ以上のエントリがブロックされました。

終了コード 3 は一時的なコマンド失敗ではなく、ポリシーの結果として扱ってください。ブロックされたパッケージ、バージョン、理由を提示してください。ポリシーを回避したり、ログを書き換えたりしないでください。警告によってコマンドが失敗しない場合でも、レビューの参考情報として扱ってください。

現在、人が読みやすい形式の要約では、端末が対応している場合、色付きの Unicode ボックスを使用します。この表示形式を解析しないでください。自動化には終了コードと基となるログを使用してください。

トラブルシューティング

アクティビティが報告されない場合:

  • コマンドの実行に使われた現在の作業ディレクトリに .gitlab/df/ci-log.json が存在することを確認してください。
  • パッケージマネージャーがネストされたワークスペースで実行された場合、リポジトリルートにあるログが適用されると決めつけないでください。

ラッパーのヘルプが分かりにくい場合:

  • glab help dependency-firewall <wrapper> を使用してください。
  • ラッパーを直接実行すると、パッケージマネージャーの起動前に必ず GitLab プロジェクトとクライアントが解決されます。また、ラッパー名の後ろにある glab フラグはパッケージマネージャーに渡されます。

パッケージマネージャーが一覧にない場合:

  • 内部のサポートコードや類似するパッケージエコシステムを根拠に、ラッパーを作り出さないでください。
  • 対象の glab/GitLab バージョンについて、現在の親ヘルプと公式ドキュメントを確認してください。

パッケージマネージャーが誤ったレジストリ/インデックス/ソースを使用する場合:

  • ラッパーは既存のパッケージマネージャー設定を意図的に使用します。
  • 認証情報を表示せずに設定を確認し、glab が設定を書き換えることを期待するのではなく、パッケージマネージャーの文書化されたワークフローで修正してください。

コマンドリファレンス

チェックサム検証済みの親、パッケージチェック、ラッパー、要約のヘルプについては、references/commands.md を参照してください。

コメント