日本語

Docker コンテナのデバイス保護

Docker コンテナ内でのパッケージのインストールは、それぞれ独自の Linux 環境で実行され、ホスト上のエージェントの制御範囲外です。〜を有効にすると コンテナを保護 オンにすると、ホスト上の Device Protection が実行中のコンテナを検出し、それらに Linux エージェントをインストールするので、 npm, pipコンテナ内のその他のパッケージマネージャーも、ホスト上と同じ方法で検査されます。

前提条件

  • macOS、Windows、または Linux のホスト上の Device Protection。次のユーザーがサインインしている場合、そのユーザーの docker コマンドが Docker エンジンに到達できます。Docker Desktop がテスト済みの構成です。Podman や Rancher Desktop などの他のランタイムは、動作する docker コマンド。
  • Debian 系イメージ(Debian、Ubuntu)または Red Hat 系イメージ(RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux)に基づくコンテナ。Alpine やその他のディストリビューションはスキップされます。
  • 各コンテナからの送信 HTTPS github.com インストーラーをダウンロードするために。

コンテナ保護をオンにする

  1. 次へ移動します: デバイス保護 → 設定.
  2. 次の項目の下で デバイス設定、オンにします コンテナを保護.
Device Settings card with the Protect Containers and Protect WSL2 toggles

この設定はワークスペース内のすべてのデバイスに適用されます。デバイスは次回のチェックイン時にこれを取得します。

仕組み

ホストエージェントは 30 秒ごとに実行中のコンテナを確認し、起動するとすぐに新しいコンテナへインストールします。これは、保護がオンで一時停止されておらず、ホストが有効なトークンで登録されている場合にのみ行われます。

  • 実行中のコンテナのみが対象です。 Aikido は停止中のコンテナを起動しません。
  • Linux エージェントが存在しない場合はインストールされます。 Aikido はコンテナ内で標準の Linux インストールスクリプトを root として実行し、 --containerホストのトークンを使用してから、エージェントを起動します。イメージにそのどちらもなければ curl も wget、Aikido はインストールします curl まずイメージのパッケージマネージャーを使います。すでにエージェントが入っているコンテナは起動されるだけです。
  • 一度に 2 つのコンテナ。 インストールには数分かかることがあるため、その間に起動したコンテナは順番を待ちます。
  • 各コンテナはそれぞれ独自のデバイスです。 保護されたコンテナは、保護したホストにリンクされた別個の Linux デバイスとして Aikido に報告されます。コンテナが停止すると、ホストはそのリンクを解除します。
  • エージェントはイメージではなくコンテナ内にあります。 コンテナを削除すると、エージェントも削除されます。同じイメージから新しいコンテナを起動すると、起動時に新規インストールされます。

次のコンテナはスキップされます:

コンテナ理由
Debian 系でも Red Hat 系でもないイメージ。例: AlpineLinux エージェントはそれらをサポートしていません
ラベルが付いたコンテナ com.aikido.endpoint.protection=disabled除外済みです。参照: コンテナを除外する
名前が k8s_Kubernetes のシステムコンテナ。たとえば Docker Desktop の Kubernetes のコントロールプレーンなど

オフにすると コンテナを保護 オフにするか、ホストで保護を一時停止すると、新しいインストールは停止します。すでにエージェントが入っているコンテナからは削除されません。

コンテナを除外する

コンテナを起動するときに除外ラベルを追加します:

docker run --label com.aikido.endpoint.protection=disabled <image>

Docker Compose では、次の下に設定します: labels サービスに。イメージからすべてのコンテナを除外するには、次を追加します: LABEL com.aikido.endpoint.protection=disabled その Dockerfile に。

コンテナ内でエージェントを使用する

エージェントは、コンテナ内のプロキシ経由でパッケージのダウンロードをルーティングします。エージェントが起動した時点ですでに実行中だったプロセスはそれを使用しません。その後に実行するコマンドには、エージェントのプロキシ設定と証明書設定が必要で、これは /etc/profile.d/に書き込まれます。パッケージをインストールする前に、それらを読み込んでください:

docker exec -it <container> sh -c 'for f in /etc/profile.d/aikido-*.sh; do . "$f"; done; exec bash'

起動した瞬間からコンテナを保護するには、起動時に実行するコマンドも含めて、代わりにイメージに Device Protection を組み込みます。参照: コンテナ内の Device Protection.

動作確認

ホスト上で次を実行します:

docker exec -u 0 <container> aikidoctl version

インストール済みのバージョンとエージェントの状態を表示します。コマンドが見つからない場合、まだインストールされていません。コンテナが実行中で、上のスキップ対象一覧に含まれていないことを確認してください。

トラブルシューティング

問題修正
コンテナは保護されません実行中であること、イメージが Debian 系または Red Hat 系であること、そして除外ラベルが付いていないことを確認してください。次に、 docker ps ホストにサインインしているユーザーで動作することを確認してください
コンテナ内のパッケージがブロックされていませんシェルまたはプロセスがエージェントのプロキシを使用していません。読み込んでください /etc/profile.d/aikido-*.sh 次のように: コンテナ内でエージェントを使用する
インストールが失敗し続けるAikido は 1 分後、4 分後、そして 16 分後に再試行し、ホストエージェントが再起動するまで 4 回の試行の後に諦めます。ホストエージェントのログには、次で始まる行にインストーラーの出力があります Docker エージェント:。そのログを次へ送ってください サポートに連絡する
誰もサインインしていない間は何も起こりません想定どおりです。Aikido は実行します docker ホストにサインインしているユーザーとして

ホストエージェントのログの場所:

ホストログファイル
macOS/Library/Logs/AikidoSecurity/EndpointProtection/endpoint-protection.log
Windows%ProgramData%\AikidoSecurity\EndpointProtection\logs\EndpointProtection.log
Linux/var/log/aikidosecurity/endpoint-protection/endpoint-protection.log

関連

コンテナ内の Device Protection WSL2 におけるデバイス保護