日本語

Bitbucket Pipelines での Device Protection

Bitbucket PipelinesのステップはLinux上で実行されるため、Device Protectionは他のLinuxマシンと同じ方法でインストールします。Bitbucket特有なのはインストール先です。常駐するLinux Shell runnerには一度だけインストールし、Bitbucket CloudおよびDocker runnerでは各ステップ内でインストールします。

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

Bitbucket CloudとDocker runner

Device Protectionのトークンを、AIKIDO_TOKENという名前のセキュアなリポジトリ変数として追加します。次に、このスクリプトをリポジトリに追加します。

ci/start-device-protection.sh
curl -fsSL https://github.com/AikidoSec/safe-chain/raw/refs/heads/main/install-scripts/install-endpoint-linux.sh | sh -s -- --container
aikido-endpoint-protection-start --wait-for-healthy
for f in /etc/profile.d/aikido-*.sh; do . "$f"; done

パッケージをインストールする各ステップの冒頭で、このスクリプトをsourceします。

bitbucket-pipelines.yml
image: node:20-bookworm

pipelines:
  default:
    - step:
        name: Install dependencies
        script:
          - . ci/start-device-protection.sh
          - npm ci
  • shで実行せず、.でsourceしてください。 sourceすることで、設定がステップの残りの部分でも維持されます。
  • すべてのステップで必要です。 各ステップは新しいコンテナで実行されます。
  • ステップはrootとして実行する必要があり、イメージにはcurlが必要です。

Linux Shell runner

runnerホストに--headlessを指定してエージェントをインストールし、再起動します。Linux向けDevice Protectionのインストールを参照してください。

動作確認

bitbucket-pipelines.yml
    - step:
        name: Verify Device Protection
        script:
          - . ci/start-device-protection.sh
          - 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イメージが非rootユーザーで実行されています。rootで実行されるイメージを使用してください
テストパッケージが200を返す、またはSELF_SIGNED_CERT_IN_CHAINスクリプトがshまたはbashで実行されています。.でsourceしてください