Azure Pipelines での Device Protection
Azure PipelinesのジョブはLinuxエージェント上で実行されるため、Device Protectionは他のLinuxマシンと同じ方法でインストールします。Azure Pipelines固有なのはインストール先です。常駐するセルフホストエージェントには一度だけインストールし、Microsoftホストエージェントでは各ジョブ内でインストールします。
トークンとインストール方式については、まずInstall Device Protection for Linuxをお読みください。以下のジョブレベルのスニペットではコンテナ方式を使用しています。コンテナ方式についてはDevice Protection in Containersで説明しています。
Microsoftホストエージェント
Device ProtectionのトークンをAIKIDO_TOKENという名前のシークレット変数として追加し、パッケージをインストールするステップの前にエージェントを起動します。
pool:
vmImage: ubuntu-latest
steps:
- script: |
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
displayName: Start Device Protection
env:
AIKIDO_TOKEN: $(AIKIDO_TOKEN)
- script: |
for f in /etc/profile.d/aikido-*.sh; do . "$f"; done
npm ci
displayName: Install dependencies- シークレットは
envの下でマッピングしてください。 Azure Pipelinesは、シークレット変数をステップに自動的に公開することはありません。 - トークンは
sudoの後に渡してください。sudoはそれ以外の環境変数を破棄します。 - パッケージをインストールするすべてのステップで
/etc/profile.d/aikido-*.shをsourceしてください。 各ステップは新しいシェルで実行されるため、これらの設定がないとダウンロードがエージェントを経由しません。 - ランナーはVMですが、
--containerを使用します。 ジョブからランナーを再起動することはできず、コンテナモードでは再起動が不要です。エージェントを明示的に起動するのもこのためです。Choose the install flavorを参照してください。
セルフホストエージェント
エージェントホストに--headlessを指定してエージェントをインストールし、再起動します。Install Device Protection for Linuxを参照してください。
動作確認
- script: |
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
displayName: Verify Device Protection403は、エージェントがマルウェアテストパッケージをブロックしたことを意味します。200は、ダウンロードがエージェントを経由しなかったことを意味します。
トラブルシューティング
| 問題 | 対処法 |
|---|---|
Token is required | シークレットをステップのenvの下でマッピングし、sudoの後に渡してください。フォークからのプルリクエストにはシークレットが渡されません |
Root privileges required | インストールコマンドと起動コマンドの先頭にsudoを付けてください |
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAINが発生する | ステップで/etc/profile.d/aikido-*.shがsourceされていません |