日本語

CircleCI での Device Protection

CircleCIのジョブはLinuxエグゼキューター上で実行されるため、Device Protectionは他のLinuxマシンと同じ方法でインストールします。CircleCI固有なのはインストール先です。常駐するセルフホストランナーに一度だけインストールするか、Dockerエグゼキューターおよびmachineエグゼキューターでは各ジョブ内でインストールします。

トークンとインストール形態については、まずLinux向けDevice Protectionのインストールをお読みください。以下のジョブレベルのスニペットではコンテナ形態を使用しています。詳しくはコンテナでのDevice Protectionで説明しています。

Dockerエグゼキューターとmachineエグゼキューター

Device Protectionのトークンを、AIKIDO_TOKENという名前でプロジェクトの環境変数またはコンテキストに追加します。次に、再利用可能なコマンドを定義し、各ジョブの最初に実行します。

.circleci/config.yml
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のインストールを参照してください。

動作確認

.circleci/config.yml
      - 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.tgz

403は、エージェントがマルウェアのテストパッケージをブロックしたことを意味します。200は、ダウンロードがエージェントを経由しなかったことを意味します。

トラブルシューティング

問題対処法
Token is requiredジョブから変数が参照できません。ジョブが正しいコンテキストを使用しているか確認してください。フォークからのプルリクエストには、デフォルトで変数が渡されません
Root privileges requiredインストールコマンドと起動コマンドの先頭にsudoを付けてください
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAINそのステップがbashで実行されていないため、$BASH_ENVが読み込まれていません。そのステップで/etc/profile.d/aikido-*.shを読み込んでください