CircleCI での Device Protection
CircleCIのジョブはLinuxエグゼキューター上で実行されるため、Device Protectionは他のLinuxマシンと同じ方法でインストールします。CircleCI固有なのはインストール先です。常駐するセルフホストランナーに一度だけインストールするか、Dockerエグゼキューターおよびmachineエグゼキューターでは各ジョブ内でインストールします。
トークンとインストール形態については、まずLinux向けDevice Protectionのインストールをお読みください。以下のジョブレベルのスニペットではコンテナ形態を使用しています。詳しくはコンテナでのDevice Protectionで説明しています。
Dockerエグゼキューターとmachineエグゼキューター
Device Protectionのトークンを、AIKIDO_TOKENという名前でプロジェクトの環境変数またはコンテキストに追加します。次に、再利用可能なコマンドを定義し、各ジョブの最初に実行します。
version: 2.1
commands:
start-device-protection:
steps:
- run:
name: Start Device Protection
command: |
curl -fsSL https://github.com/AikidoSec/safe-chain/raw/refs/heads/main/install-scripts/install-endpoint-linux.sh \
| sudo AIKIDO_TOKEN="$AIKIDO_TOKEN" sh -s -- --container
sudo aikido-endpoint-protection-start --wait-for-healthy
echo 'for f in /etc/profile.d/aikido-*.sh; do . "$f"; done' >> "$BASH_ENV"
jobs:
build:
docker:
- image: cimg/node:lts
steps:
- checkout
- start-device-protection
- run: npm ci
workflows:
build:
jobs:
- build- トークンは
sudoの後に渡します。sudoはそれ以外の環境変数を引き継ぎません。sudoなしでrootとして実行されるイメージでは、両方のsudoプレフィックスを削除してください。 $BASH_ENVの行は、以降のすべてのステップに適用されます。 CircleCIは各runステップの開始時にこのファイルを読み込みます。- ランナーはVMですが、
--containerを使用します。 ジョブはランナーを再起動できず、コンテナモードでは再起動が不要です。エージェントを明示的に起動しているのもそのためです。インストール形態の選択を参照してください。
セルフホストランナー
ランナーホストに--headlessを指定してエージェントをインストールし、再起動します。Linux向けDevice Protectionのインストールを参照してください。
動作確認
- run:
name: Verify Device Protection
command: 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.tgz403は、エージェントがマルウェアのテストパッケージをブロックしたことを意味します。200は、ダウンロードがエージェントを経由しなかったことを意味します。
トラブルシューティング
| 問題 | 対処法 |
|---|---|
Token is required | ジョブから変数が参照できません。ジョブが正しいコンテキストを使用しているか確認してください。フォークからのプルリクエストには、デフォルトで変数が渡されません |
Root privileges required | インストールコマンドと起動コマンドの先頭にsudoを付けてください |
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAIN | そのステップがbashで実行されていないため、$BASH_ENVが読み込まれていません。そのステップで/etc/profile.d/aikido-*.shを読み込んでください |