日本語

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という名前のシークレット変数として追加し、パッケージをインストールするステップの前にエージェントを起動します。

azure-pipelines.yml
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を参照してください。

動作確認

azure-pipelines.yml
  - 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 Protection

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

トラブルシューティング

問題対処法
Token is requiredシークレットをステップのenvの下でマッピングし、sudoの後に渡してください。フォークからのプルリクエストにはシークレットが渡されません
Root privileges requiredインストールコマンドと起動コマンドの先頭にsudoを付けてください
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAINが発生するステップで/etc/profile.d/aikido-*.shがsourceされていません