GitHub Actions での Device Protection
GitHub ActionsのジョブはLinuxランナー上で実行されるため、Device Protectionは他のLinuxマシンと同じ方法でインストールします。GitHub Actions固有なのはインストール先です。存続し続けるセルフホストランナーに一度だけインストールするか、ジョブ終了後に破棄されるホステッドランナーではジョブごとにインストールします。
トークンとインストールフレーバーについては、まずInstall Device Protection for Linuxをお読みください。以下のジョブレベルのスニペットではコンテナフレーバーを使用します。これについてはDevice Protection in Containersで説明しています。
GitHubホステッドランナー
Device ProtectionのトークンをAIKIDO_TOKENという名前のシークレットとして追加し、パッケージをインストールするステップより前にエージェントを起動します。
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Start Device Protection
env:
AIKIDO_TOKEN: ${{ secrets.AIKIDO_TOKEN }}
run: |
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
- uses: actions/checkout@v4
- name: Install dependencies
run: |
for f in /etc/profile.d/aikido-*.sh; do . "$f"; done
npm ci- トークンは
sudoの後に渡してください。sudoはそれ以外の環境変数を破棄します。 - パッケージをインストールするすべてのステップで
/etc/profile.d/aikido-*.shを読み込んでください。 各ステップは新しいシェルで実行されるため、これらの設定がないとダウンロードはエージェントを経由しません。 - ランナーはVMですが、
--containerを使用します。 ジョブからランナーを再起動することはできず、コンテナモードでは再起動が不要です。エージェントを明示的に起動するのもそのためです。Choose the install flavorを参照してください。
読み込みの行を省略するには、すべてのステップをログインシェルで実行します。ログインシェルは/etc/profile.d/を自動的に読み込みます。
defaults:
run:
shell: bash --login -eo pipefail {0}ジョブコンテナ
container:を指定したジョブはrootとして実行されるため、sudoなしで同じステップを使用します。イメージにはcurlが必要です。イメージにエージェントがすでにインストールされている場合は、インストールを省略して起動のみを行います。Job containers in GitHub Actionsを参照してください。
セルフホストランナー
ランナーホストに--headlessを指定してエージェントをインストールし、再起動します。Install Device Protection for Linuxを参照してください。
動作確認
- name: Verify Device Protection
run: |
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.tgz403は、エージェントがマルウェアテストパッケージをブロックしたことを意味します。200は、ダウンロードがエージェントを経由しなかったことを意味します。
トラブルシューティング
| 問題 | 対処法 |
|---|---|
Token is required | シークレットがインストールに渡っていません。envでマッピングし、sudoの後に渡してください。フォークからのプルリクエストにはシークレットが渡されません |
Root privileges required | インストールコマンドと起動コマンドの先頭にsudoを付けてください |
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAIN | ステップで/etc/profile.d/aikido-*.shが読み込まれていません |