Jenkins での Device Protection
Jenkins のビルドは Linux エージェント上で実行されるため、Device Protection のインストール方法は通常の Linux マシンと同じです。Jenkins 固有なのは、インストール先です。永続エージェント上に 1 回だけ入れるか、Docker エージェント上の各ビルド内で入れるか、の違いです。
まず Linux 用 Device Protection をインストールする トークンとインストール方式についてお読みください。以下のジョブレベルのスニペットでは container 方式を使用しており、これは コンテナ内の Device Protection を説明しています。
永続エージェント
各 Linux エージェントホストに次を使ってエージェントをインストールします --headless付きでインストールし、その後再起動します。参照: Linux 用 Device Protection をインストールする。パイプラインの変更は不要です。
Docker エージェント
Device Protection トークンを次として追加します シークレットテキスト ID が次の資格情報として aikido-tokenを追加し、その後、パッケージをインストールする前の任意のステージでエージェントを起動します:
pipeline {
agent {
docker {
image 'node:20-bookworm'
args '-u root'
}
}
environment {
AIKIDO_TOKEN = credentials('aikido-token')
}
stages {
stage('Start Device Protection') {
steps {
sh '''
curl -fsSL https://github.com/AikidoSec/safe-chain/raw/refs/heads/main/install-scripts/install-endpoint-linux.sh | sh -s -- --container
aikido-endpoint-protection-start --wait-for-healthy
'''
}
}
stage('Install dependencies') {
steps {
sh '''
for f in /etc/profile.d/aikido-*.sh; do . "$f"; done
npm ci
'''
}
}
}
}args '-u root'が必要です。 Jenkins はコンテナーをエージェントのユーザーとして実行するため、インストールには root が必要です。- ソース
/etc/profile.d/aikido-*.shすべてのshパッケージをインストールするステップで。 各shステップは新しいシェルであり、それらの設定がないとダウンロードはエージェントを迂回します。 - 使用
'''、""". Groovy は展開します$ダブルクォート内で展開され、そのループを壊します。
動作確認
stage('Verify Device Protection') {
steps {
sh '''
for f in /etc/profile.d/aikido-*.sh; do . "$f"; done
curl -sS -o /dev/null -w "%{http_code}\\n" --max-time 15 https://registry.npmjs.org/safe-chain-test/-/safe-chain-test-0.0.1-security.tgz
'''
}
}403 は、エージェントがマルウェアのテスト用パッケージをブロックしたことを意味します。 200 は、ダウンロードがエージェントを回避したことを意味します。
トラブルシューティング
| 問題 | 修正 |
|---|---|
root 権限が必要です | 追加 args '-u root' に docker エージェント |
トークンが必要です | 資格情報 ID と、その資格情報が シークレットテキスト |
テストパッケージが返す 200、または SELF_SIGNED_CERT_IN_CHAIN | 次の sh ステップは source しませんでした /etc/profile.d/aikido-*.sh |