# 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. 次へ移動します： [**デバイス保護** → **設定**](https://app.aikido.dev/endpoint-protection/settings).
2. 次の項目の下で **デバイス設定**、オンにします **コンテナを保護**.

<figure><img src="https://help.aikidogov.us/_assets/320f16b6bb6b/device-protection-device-settings-wsl2.png" alt="Device Settings card with the Protect Containers and Protect WSL2 toggles"><figcaption></figcaption></figure>

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

## 仕組み

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

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

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

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

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

## コンテナを除外する

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

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

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

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

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

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

起動した瞬間からコンテナを保護するには、起動時に実行するコマンドも含めて、代わりにイメージに Device Protection を組み込みます。参照： [コンテナ内の Device Protection](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux/device-protection-in-containers).

## 動作確認

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

```shell
docker exec -u 0 <container> aikidoctl version
```

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

## トラブルシューティング

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

## 関連

{% content-ref url="device-protection-mdm-guides/linux/device-protection-in-containers.md" %}
[コンテナ内の Device Protection](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux/device-protection-in-containers)
{% endcontent-ref %}

{% content-ref url="device-protection-in-wsl2.md" %}
[WSL2 におけるデバイス保護](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-in-wsl2)
{% endcontent-ref %}
