日本語

GitLab CI/CD での Device Protection

GitLab CI/CD ジョブは Linux ランナーで実行されるため、Device Protection は他の Linux マシンと同じ方法でインストールされます。GitLab 特有なのはインストール先です。常駐する shell executor のホストに 1 回だけ行うか、Docker および Kubernetes executor では各ジョブ内で行います。

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

Docker および Kubernetes の executor

これは GitLab.com のホストされたランナーにも当てはまります。Device Protection トークンを、次の名前のマスクされた CI/CD 変数として追加してください AIKIDO_TOKEN、その後、エージェントを起動します before_script:

.gitlab-ci.yml
default:
  before_script:
    - 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

install:
  image: node:20-bookworm
  script:
    - npm ci
  • before_script はシェルを共有します script、そのため読み込まれた設定がコマンドに反映されます。独自の before_script ものを使うジョブでは、デフォルトのものが置き換えられるため、そこでも 3 行を繰り返してください。
  • ジョブは root として実行する必要があり、イメージには curl.

Shell executor

runner ホストにエージェントを --headless付きでインストールし、その後再起動します。参照: Linux 用 Device Protection をインストールする.

動作確認

.gitlab-ci.yml
verify-device-protection:
  image: node:20-bookworm
  script:
    - 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 は、ダウンロードがエージェントを回避したことを意味します。

トラブルシューティング

問題修正
トークンが必要ですジョブはその変数を参照できません。保護された変数は保護されたブランチとタグにのみ届きます
root 権限が必要ですイメージは non-root ユーザーとして実行されます。root として実行されるイメージを使用してください
テストパッケージが返す 200、または SELF_SIGNED_CERT_IN_CHAINジョブが上書きします before_script。そこに 3 行を追加してください