日本語

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を追加し、その後、パッケージをインストールする前の任意のステージでエージェントを起動します:

Jenkinsfile
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 は展開します $ ダブルクォート内で展開され、そのループを壊します。

動作確認

Jenkinsfile
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