
safe-chain v1.5.16
Aikido Safe Chain を使用して、npm、yarn、pnpm、npx、pnpx、pip、uv、poetry を介してインストールされた悪意のあるコードから保護します。無料で使用でき、トークンは不要です。
Aikido Safe Chain
- ✅ 開発者のラップトップと CI/CD 上でマルウェアをブロック
- ✅ npm と PyPI をサポート その他のパッケージマネージャーも近日対応
- ✅ ビルドを壊すことなく、48 時間以内に公開されたパッケージをブロック
- ✅ トークン不要、無料、ビルドデータは共有されません
npm と PyPI を超えた保護が必要ですか?
Aikido Device Protection は Safe Chain を基盤として構築され、より多くのエコシステムにわたってパッケージと拡張機能のセキュリティを拡張します: npm、PyPI、VS Code、Open VSX - (Cursor、Windsurf、Kiro、Vs Codium、...)、Maven、NuGet、Chrome 拡張機能、Go、Skills.sh AI スキル、Ruby、Rust など。
組織内のすべての開発者ワークステーションにわたる集中ポリシー管理、リクエストと承認のワークフロー、可視性を実現します。同じ Aikido Intel フィードによって提供されます。手動でデプロイするか、MDM ツール (Jamf、Fleet、または Iru) を通じて管理できます。
Aikido Safe Chain は以下のパッケージマネージャーをサポートしています:
- 📦 npm
- 📦 npx
- 📦 yarn
- 📦 pnpm
- 📦 pnpx
- 📦 rush
- 📦 rushx
- 📦 bun
- 📦 bunx
- 📦 pip
- 📦 pip3
- 📦 uv
- 📦 poetry
- 📦 uvx
- 📦 pipx
- 📦 pdm
使用方法

インストール
Aikido Safe Chain のインストールは、インストールスクリプトを使えば簡単です。
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh
&& rm /tmp/install-safe-chain.sh
### Windows (PowerShell)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
Remove-Item $installer -ErrorAction SilentlyContinue
throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer
Remove-Item $installer
上記のインストールコマンドは常に特定のリリースを参照しています。別のバージョンをインストールするには、バージョンをご希望のバージョン番号に置き換えてください。利用可能なすべてのバージョンはリリースページにあります。
ダウンロードの完全性
インストールスクリプトはバージョン付きリリースURL(releases/download/1.5.20/...)から配信されます。GitHubのリリースは不変です — バージョン付きURLで公開されたアーティファクトは一度公開されると変更や置き換えができないため、ダウンロードするファイルはリリースされたものと正確に同一であることが保証されます。
インストールの確認
-
❗ターミナルを再起動して、Aikido Safe Chainの使用を開始します。
- この手順は、npm、npx、yarn、pnpm、pnpx、rush、rushx、bun、bunx、pip、pip3、poetry、uv、uvx、pipx、pdmのシェルエイリアスが正しく読み込まれることを保証するため、非常に重要です。ターミナルを再起動しないと、エイリアスは利用できません。
-
インストールを確認するには、確認コマンドを実行します: ```shell npm safe-chain-verify pnpm safe-chain-verify pip safe-chain-verify uv safe-chain-verify
Any other supported package manager: {packagemanager} safe-chain-verify
- 出力に「OK: Safe-chain works!」と表示され、Aikido Safe Chain が正しくインストールされ実行されていることが確認できます。
-
(オプション) テストパッケージをインストールしてマルウェアブロックをテストする:
JavaScript/Node.js の場合: ```shell npm install safe-chain-test
Pythonの場合: ```shell pip3 install safe-chain-pi-test
- 出力は、Aikido Safe Chain がこれらのテストパッケージをマルウェアとしてフラグ付けし、インストールをブロックしていることを示すはずです。
`npm`、`npx`、`yarn`、`pnpm`、`pnpx`、`rush`、`rushx`、`bun`、`bunx`、`pip`、`pip3`、`uv`、`uvx`、`poetry`、`pipx`、`pdm` コマンドを実行すると、Aikido Safe Chain はインストールしようとしているパッケージにマルウェアが含まれていないかを自動的にチェックします。また、利用可能な場合は pip の Python モジュール呼び出し(例: `python -m pip install ...`、`python3 -m pip download ...`)も傍受します。マルウェアが検出された場合、コマンドを終了するよう促します。
インストールされているバージョンは次のコマンドで確認できます:```shell
safe-chain --version
仕組み
マルウェアのブロック
Aikido Safe Chain は、npm レジストリや PyPI からのパッケージダウンロードを傍受する軽量プロキシサーバーを実行することで機能します。npm、npx、yarn、pnpm、pnpx、rush、rushx、bun、bunx、pip、pip3、uv、uvx、poetry、pipx、pdm の各コマンドを実行すると、すべてのパッケージダウンロードがこのローカルプロキシを経由してルーティングされ、Aikido Intel - Open Sources Threat Intelligence に対してリアルタイムでパッケージを検証します。いずれかのパッケージ(深い依存関係を含む)でマルウェアが検出された場合、プロキシは悪意のあるコードがお使いのマシンに到達する前にダウンロードをブロックします。
パッケージの最小経過時間
Safe Chain は、サポート対象のエコシステムに対してパッケージの最小経過時間チェックを適用します。
現在の適用方法はエコシステムによって異なります:
- npm ベースのパッケージマネージャー:
- 通常のパッケージ解決中、Safe Chain はレジストリから返されるパッケージメタデータから、設定された最小経過時間より新しいバージョンを抑制します
- そのメタデータフローをバイパスする直接的なパッケージダウンロードリクエストについては、Safe Chain は新しくリリースされたパッケージのキャッシュリストを使用してリクエスト自体をブロックできます
- Python パッケージマネージャー:
- パッケージ解決中、Safe Chain は PyPI のメタデータレスポンスから新しすぎるファイルやリリースを抑制します
- そのメタデータフローをバイパスする直接的なパッケージダウンロードリクエストについては、Safe Chain は新しくリリースされたパッケージのキャッシュリストを使用してリクエスト自体をブロックできます
デフォルトでは、パッケージの最小経過時間は 48 時間です。これは、新しく公開されたパッケージが検出されていない脅威を含む可能性が最も高い重要な期間において、追加のセキュリティ層を提供します。このしきい値を設定したり、この保護を完全にバイパスしたりできます - 以下の Minimum Package Age Configuration セクションを参照してください。
シェル統合
Aikido Safe Chain は、npm、npx、yarn、pnpm、pnpx、rush、rushx、bun、bunx、および Python パッケージマネージャー(pip、uv、uvx、poetry、pipx、pdm)を使用する際にシームレスな体験を提供するために、お使いのシェルと統合します。これらのコマンドのエイリアスを設定し、元のコマンドを実行する前にプロキシサーバーを管理する Aikido Safe Chain コマンドでラップされるようにします。現在サポートしているもの:
- ✅ Bash
- ✅ Zsh
- ✅ Fish
- ✅ PowerShell
- ✅ PowerShell Core
シェル統合の詳細については、シェル統合ドキュメントを参照してください。
アンインストール
Aikido Safe Chain をアンインストールするには、ワンラインアンインストーラーを使用してください:
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/uninstall-safe-chain.sh | sh
### Windows (PowerShell)```powershell
iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/uninstall-safe-chain.ps1" -UseBasicParsing)
❗ターミナルを再起動してください アンインストール後、すべてのエイリアスが削除されていることを確認するためです。
設定
ログ
--safe-chain-logging フラグまたは SAFE_CHAIN_LOGGING 環境変数を使用して、Aikido Safe Chain の出力を制御できます。
設定オプション
複数のソースを通じてログレベルを設定できます(優先順位順):
-
CLI 引数(最優先):
-
--safe-chain-logging=silent- マルウェアがブロックされた場合を除き、Aikido Safe Chain のすべての出力を抑制します。パッケージマネージャーの出力は通常どおり stdout に書き込まれ、Safe Chain はマルウェアをブロックしてプロセスを終了させた場合にのみ短いメッセージを書き込みます。npm install express --safe-chain-logging=silent -
--safe-chain-logging=verbose- Aikido Safe Chain からの詳細な診断出力を有効にします。問題のトラブルシューティングや、Safe Chain が背後で何を行っているかを理解するのに役立ちます。npm install express --safe-chain-logging=verbose
-
-
環境変数: ```shell export SAFE_CHAIN_LOGGING=verbose npm install express
有効な値: silent、normal、verbose
これは、ターミナルセッションまたは CI/CD 環境におけるすべてのパッケージマネージャーコマンドのデフォルトのログレベルを設定するのに役立ちます。
ファイルログ
--safe-chain-log-file フラグまたは SAFE_CHAIN_LOG_FILE 環境変数を使用して、Aikido Safe Chain の出力をログファイルにミラーリングできます。ファイルログはデフォルトで無効になっており、パスが設定されると有効になります。ファイル形式(--safe-chain-log-file-format)と詳細度(--safe-chain-log-file-verbosity)は、ターミナル出力とは独立して制御されます。
設定オプション
以下のいずれかで設定します(優先順位順):
- CLI 引数(最優先): ```shell
npm install express
--safe-chain-log-file=~/safe-chain.log
--safe-chain-log-file-format=plain
--safe-chain-log-file-verbosity=normal - 環境変数: ```shell
export SAFE_CHAIN_LOG_FILE=~/safe-chain.log
export SAFE_CHAIN_LOG_FILE_FORMAT=plain
export SAFE_CHAIN_LOG_FILE_VERBOSITY=normal
- 設定ファイル (
~/.safe-chain/config.json): ```json { "logFile": "~/safe-chain.log", "logFileFormat": "plain", "logFileVerbosity": "normal" }
logFileFormat — json(デフォルト)または plain。
logFileVerbosity — silent、normal、または verbose(デフォルト)。--safe-chain-logging とは独立しています。
最小パッケージ経過時間
Safe Chain がパッケージのインストールを許可するまでに、そのパッケージが存在しなければならない期間を設定できます。デフォルトでは、パッケージはインストール可能になるまでに少なくとも 48 時間経過している必要があります。
npm ベースのパッケージマネージャーでは、このチェックには現在 2 つの適用モードがあります:
- Safe Chain は、通常の依存関係解決中に、パッケージメタデータから新しすぎるバージョンを抑制します。
- Safe Chain は、キャッシュされた新規リリースパッケージリストと照合された場合、直接のパッケージダウンロードリクエストをブロックします。
Python パッケージマネージャーでは、このチェックには現在 2 つの適用モードがあります:
- Safe Chain は、依存関係解決中に PyPI メタデータから新しすぎるファイルとリリースを抑制します。
- Safe Chain は、キャッシュされた新規リリースパッケージリストと照合された場合、直接のパッケージダウンロードリクエストをブロックします。
設定オプション
最小パッケージ経過時間は、複数のソースを通じて設定できます(優先順位順):
- CLI 引数(最優先): ```shell
npm install express --safe-chain-minimum-package-age-hours=48
- 環境変数: ```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=48
npm install express
- 設定ファイル (
~/.safe-chain/config.json): ```json { "minimumPackageAgeHours": 48 }
パッケージの除外
環境変数または設定ファイル(両方はマージされます)を介して、最小経過時間フィルタリングから信頼済みパッケージを除外します。組織のすべてのパッケージを信頼するには @scope/* を使用します:```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="@aikidosec/*"
## 検出
### 検出ルール
- ルールは `rules/` ディレクトリに YAML ファイルとして保存されます。
- 各ルールは、検出ロジックを定義する `detection` ブロックを含みます。
- サポートされる検出タイプ:
- `keyword` — 大文字小文字を区別しないキーワードマッチング
- `regex` — 正規表現パターンマッチング
- `entropy` — 高エントロピー文字列検出
- `yara` — YARA ルールマッチング
- `sigma` — Sigma ルールマッチング
- `composite` — 複数の検出タイプを組み合わせる
### ルールの例
```yaml
id: CRED-001
name: AWS Access Key Detection
description: Detects AWS access key IDs in scanned content
severity: high
tags:
- credentials
- aws
detection:
type: regex
pattern: '(?i)(AKIA|ASIA)[0-9A-Z]{16}'
context:
- 20
- 20
重大度レベル
| レベル | 説明 |
|---|---|
critical | 即時対応が必要 |
high | 重大なリスク、優先的に対処すべき |
medium | 中程度のリスク、レビューが必要 |
low | 軽微な問題、情報提供目的 |
info | 情報提供のみ |
設定
設定ファイル
デフォルトの設定ファイルは config/default.yaml にあります。環境固有の設定で上書きできます。
scanner:
max_file_size: 10485760
max_depth: 10
follow_symlinks: false
exclude_patterns:
- "*.log"
- "node_modules/**"
- ".git/**"
output:
format: json
verbose: false
color: true
rules:
paths:
- rules/
auto_reload: true
環境変数
| 変数 | 説明 |
|---|---|
SCANNER_CONFIG | 設定ファイルへのパス |
SCANNER_RULES_PATH | ルールディレクトリへのパス |
SCANNER_LOG_LEVEL | ログレベル (debug, info, warn, error) |
SCANNER_OUTPUT_FORMAT | 出力形式 (json, yaml, table) |
SCANNER_NO_COLOR | カラー出力を無効化 |
出力形式
JSON
{
"scan_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2024-01-15T10:30:00Z",
"target": "/path/to/scan",
"findings": [
{
"rule_id": "CRED-001",
"rule_name": "AWS Access Key Detection",
"severity": "high",
"file": "config/credentials.env",
"line": 12,
"match": "AKIAIOSFODNN7EXAMPLE",
"context": "..."
}
],
"summary": {
"total_findings": 1,
"by_severity": {
"critical": 0,
"high": 1,
"medium": 0,
"low": 0,
"info": 0
}
}
}
YAML
scan_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
timestamp: "2024-01-15T10:30:00Z"
target: /path/to/scan
findings:
- rule_id: CRED-001
rule_name: AWS Access Key Detection
severity: high
file: config/credentials.env
line: 12
match: AKIAIOSFODNN7EXAMPLE
summary:
total_findings: 1
by_severity:
critical: 0
high: 1
medium: 0
low: 0
info: 0
テーブル
┌──────────┬───────────────────────────┬──────────┬──────────────────────────┐
│ RULE ID │ RULE NAME │ SEVERITY │ FILE │
├──────────┼───────────────────────────┼──────────┼──────────────────────────┤
│ CRED-001 │ AWS Access Key Detection │ high │ config/credentials.env │
└──────────┴───────────────────────────┴──────────┴──────────────────────────┘
``````json
{
"npm": {
"minimumPackageAgeExclusions": ["@aikidosec/*"]
},
"pip": {
"minimumPackageAgeExclusions": ["requests"]
}
}
カスタムレジストリ
Safe Chain を設定して、カスタムまたはプライベートレジストリからパッケージをスキャンします。
対応エコシステム:
- Node.js
- Python
設定オプション
環境変数または設定ファイルを通じてカスタムレジストリを設定できます。両方のソースはマージされます。
- 環境変数 (カンマ区切り): ```shell
export SAFE_CHAIN_NPM_CUSTOM_REGISTRIES="npm.company.com,registry.internal.net"
export SAFE_CHAIN_PIP_CUSTOM_REGISTRIES="pip.company.com,registry.internal.net"
- 設定ファイル (
~/.safe-chain/config.json): ```json { "npm": { "customRegistries": ["npm.company.com", "registry.internal.net"] }, "pip": { "customRegistries": ["pip.company.com", "registry.internal.net"] } }
PYPI 設定ファイル
pip の設定に pip.conf ファイルを使用している場合は、Safe Chain がそれをマージできるよう、PIP_CONFIG_FILE 環境変数を介して pip に明示的にそのファイルを指定する必要があります。
Safe Chain は pip を自身の MITM プロキシの背後で実行し、証明書とプロキシ設定を注入するための一時的な pip 設定ファイルを書き込みます。PIP_CONFIG_FILE が設定されている場合、Safe Chain は自身の設定をあなたのファイルのコピーにマージします(元のファイルは決して変更されません)。これにより、index-url、認証情報、その他のオプションが保持されます。PIP_CONFIG_FILE が設定されていない場合、pip のユーザーレベルの設定(例: ~/.config/pip/pip.conf)が Safe Chain の一時ファイルによって上書きされ、あなたの設定が反映されない可能性があります。
マルウェアリストのベース URL
Safe Chain がマルウェアデータベースと新規パッケージリストをカスタムミラー URL から取得するように設定します。これにより、Aikido マルウェアデータベースの独自のコピーをホストできます。
設定オプション
マルウェアリストのベース URL は、複数のソースから設定できます(優先順位順):
- CLI 引数(最優先): ```shell
npm install express --safe-chain-malware-list-base-url=https://your-mirror.com
- 環境変数: ```shell
export SAFE_CHAIN_MALWARE_LIST_BASE_URL=https://your-mirror.com
npm install express
- 設定ファイル (
~/.safe-chain/config.json): ```json { "malwareListBaseUrl": "https://your-mirror.com" }
ベースURLは、以下のパスを含む https://malware-list.aikido.dev/ の構造をミラーリングするサーバーを指す必要があります:
/malware_predictions.json(JavaScriptエコシステムのマルウェアデータベース)/malware_pypi.json(Pythonエコシステムのマルウェアデータベース)/releases/npm.json(JavaScriptの新規パッケージリスト)/releases/pypi.json(Pythonの新規パッケージリスト)
プロジェクト設定ファイル
ホームディレクトリの設定ファイル(~/.safe-chain/config.json)に加えて、Safe Chainはプロジェクト設定ファイルをサポートしているため、マシンごとに設定するのではなく、設定をリポジトリにチェックインしてチーム全体で共有できます。
リポジトリのルートにある .aikido ファイルに safe-chain: セクションを追加します(他のAikidoツールが使用するのと同じファイルですが、Safe Chainは自身の safe-chain: セクションのみを読み取り、残りは無視します)。見つかった場合、その設定はホームディレクトリの設定ファイルの上にマージされます。プロジェクト設定で設定された値が優先され、配列(customRegistries など)は一方が他方を置き換えるのではなく、両方のファイルから結合されます。
プロジェクト設定ファイルから設定できるのは、以下の設定のみです:```yaml safe-chain: minimumPackageAgeHours: 48 npm: customRegistries: - npm.company.com minimumPackageAgeExclusions: - "@aikidosec/*" pip: customRegistries: - pip.company.com minimumPackageAgeExclusions: - requests
`scanTimeout`、`malwareListBaseUrl`、`logFile*` などの設定は、プロジェクトの設定ファイルからは設定できません。これらはホームディレクトリの設定、CLI 引数、または環境変数からのみ指定できます。
## カスタムインストールディレクトリ
デフォルトでは、Safe Chain は自身を `~/.safe-chain` にインストールします。インストーラーに明示的なインストールディレクトリを渡すことで、これを変更できます。これはシステム全体へのインストール(例: Docker イメージ内)や、他のツールとの競合を避ける必要がある場合に便利です。
設定すると、Safe Chain のすべてのデータ(バイナリ、シム、スクリプト、設定)は `~/.safe-chain` ではなく、カスタムディレクトリの下に配置されます。
### Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --install-dir /usr/local/.safe-chain \
&& rm /tmp/install-safe-chain.sh
Windows```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -InstallDir 'C:\ProgramData\safe-chain' Remove-Item $installer
# CI/CDでの使用
Aikido Safe Chainをビルドプロセスに統合することで、CI/CDパイプラインを悪意のあるパッケージから保護できます。これにより、自動ビルド中にインストールされるすべてのパッケージが、インストール前にマルウェアチェックされることが保証されます。
## CI/CD向けのインストール
`--ci` フラグを使用すると、CI/CD環境向けにAikido Safe Chainを自動設定できます。これはシェルエイリアスではなく、PATH内に実行可能なシムを設定します。
### Unix/Linux/macOS (GitHub Actions、Azure Pipelinesなど)```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --ci \
&& rm /tmp/install-safe-chain.sh
Windows(Azure Pipelines など)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -ci Remove-Item $installer
## 対応プラットフォーム
- ✅ **GitHub Actions**
- ✅ **Azure Pipelines**
- ✅ **CircleCI**
- ✅ **Jenkins**
- ✅ **Bitbucket Pipelines**
- ✅ **GitLab Pipelines**
## GitHub Actions の例```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install safe-chain
run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- name: Install dependencies
run: npm ci
Azure DevOps の例```yaml
-
task: NodeTool@0 inputs: versionSpec: "22.x" displayName: "Install Node.js"
-
script: | curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - sh /tmp/install-safe-chain.sh --ci rm /tmp/install-safe-chain.sh displayName: "Install safe-chain"
-
script: npm ci displayName: "Install dependencies"
## CircleCI の例```yaml
version: 2.1
jobs:
build:
docker:
- image: cimg/node:lts
steps:
- checkout
- run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- run: npm ci
workflows:
build_and_test:
jobs:
- build
Jenkins の例
注: これは、Jenkins エージェントに Node.js と npm がインストールされていることを前提としています。```groovy pipeline { agent any
environment { // Jenkins does not automatically persist PATH updates from setup-ci, // so add the shims + binary directory explicitly for all stages. // If you installed into a custom directory, replace ~/.safe-chain with that path here. PATH = "${env.HOME}/.safe-chain/shims:${env.HOME}/.safe-chain/bin:${env.PATH}" }
stages { stage('Install safe-chain') { steps { sh ''' set -euo pipefail
# Install Safe Chain for CI
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
'''
}
}
stage('Install project dependencies etc...') {
steps {
sh '''
set -euo pipefail
npm ci
'''
}
}
} }
## Bitbucket Pipelines の例```yaml
image: node:22
steps:
- step:
name: Install
script:
- |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- export PATH=~/.safe-chain/shims:~/.safe-chain/bin:$PATH
- npm ci
セットアップ後、CIパイプライン内の後続のすべてのパッケージマネージャーコマンドは、Aikido Safe Chainのマルウェア検出によって自動的に保護されます。
GitLab Pipelinesの例
GitLabパイプラインにsafe-chainを追加するには、パイプラインを実行するイメージにインストールする必要があります。これは以下の方法で行えます:
-
ビルドを実行するためのDockerfileを定義する ```dockerfile FROM node:lts
Install safe-chain
RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh --ci
&& rm /tmp/install-safe-chain.shAdd safe-chain to PATH (update paths if you used a custom install dir)
ENV PATH="/root/.safe-chain/shims:/root/.safe-chain/bin:${PATH}"
-
CIパイプラインでDockerイメージをビルドする ```yaml build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
-
パイプラインでイメージを使用します: ```yaml npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
この例の完全なパイプラインは次のようになります:```yaml stages:
- build-image
- install
build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
# トラブルシューティング
問題が発生していますか? よくある問題の解決については、[トラブルシューティングガイド](https://github.com/aikidosec/safe-chain/blob/main/docs/troubleshooting.md)を参照してください。
# 問題の報告
問題が発生した場合:
1. [GitHub Issues](https://github.com/AikidoSec/safe-chain/issues)にアクセスします
2. 以下を含めてください:
* オペレーティングシステムとバージョン
* シェルの種類とバージョン
* `safe-chain --version` の出力
* 検証コマンドの出力
* 失敗したコマンドの詳細ログ(`--safe-chain-logging=verbose` 引数を追加してください)