EC2上のSysdigエージェントをプロキシ環境で動作させるには

EC2上のSysdigエージェントをプロキシ環境で動作させるには

EC2上でSysdigエージェントを動作させる際に、プロキシ環境での設定で少し手こずったので、その解決方法を共有します
Clock Icon2025.02.12

お疲れさまです。とーちです。

EC2上でSysdigエージェントを動作させる際に、プロキシ環境での設定で少し手こずったので、その解決方法を共有したいと思います。

前提環境

今回の環境は以下のような構成となっています。

image.png

EC2上にSysdigエージェントをコンテナ形式でインストールしています。インストール方法は公式ドキュメントに従っています。

Sysdigエージェントのインストール手順

EC2に対してコンテナ形式でSysdigエージェントをインストールするのは簡単です。後ほどの説明にも関連するので手順をざっと記載します。

  1. まずSysdig管理画面にログインし、 Integrations => Sysdig Agents を選択します

image.png

  1. 次にAdd Agentを押します

image.png

  1. インストール先の選択画面が表示されます。今回はEC2上にコンテナとしてエージェントを起動させるので、Dockerを選択します

image.png

  1. するとインストールするためのコマンドが表示されるので基本的にはこちらのコマンドをコピペしてEC2上で実行するだけです。

image.png

プロキシ環境での問題と対応

Sysdigエージェントのインストール時に遭遇したこと

最初に引っかかったのが、プロキシ環境下でのSysdigエージェント用コンテナイメージのpullでした。
以前のブログでも紹介しましたが、プロキシ環境下でコンテナイメージをpullするためには、Dockerデーモン側に環境変数の設定が必要になります。こちらについては詳しくは下記ブログをご参照ください。

https://dev.classmethod.jp/articles/how-to-fix-docker-pull-behind-proxy/

Sysdigエージェントの通信エラー

コンテナイメージのpullが完了し、コンテナも正常に起動したように見えましたが、docker logsコマンドでSysdigエージェントのコンテナのログを確認すると、以下のようなエラーが表示されていました。

2025-02-07 05:12:27.973, 10123.10158, Warning, endpoint:cm_collector_endpoint:872: Connection attempt failed. Retrying...
2025-02-07 05:12:29.041, 10123.10369, Error, cm_socket:1444: <今回の環境固有のエラーメッセージ>

エラーメッセージから、プロキシを経由せずに直接通信を試みていることがわかりました。

コンテナ上の環境変数を確認してみると、プロキシ設定は正しく行われているように見えます。

# docker exec <SysdigエージェントのコンテナID> env
<中略>
HTTPS_PROXY=<プロキシURL>
https_proxy=<プロキシURL>
HTTP_PROXY=<プロキシURL>
http_proxy=<プロキシURL>
HOME=/root
<以下略>

そのため、なぜプロキシを経由せずに通信しているのか少し悩みました。

解決策:Sysdig固有の設定

結論から言うとちゃんとSysdigの公式ドキュメントに記載がありました。

https://docs.sysdig.com/en/sysdig-secure/install-agent-components/configuration/sysdig-agent/tune-agent/enable-http-proxy-for-agents/

Sysdigエージェントでは、コンテナ内の /opt/draios/etc/dragent.yaml に以下の設定を追加する必要があります。

collector_port: 6443
http_proxy:
  proxy_host: $PROXY_HOST
  proxy_port: $PROXY_PORT

今回のプロキシサーバでは上記の設定を追加すればOKでしたが、プロキシサーバによっては認証のためのユーザー名、パスワードなどが必要なものもあります。そういった場合の設定についても上記公式ドキュメントに記載があるのでぜひご確認ください。

なお、 dragent.yaml はDockerfileでbuildすることでコンテナイメージに含めてもいいのですが、その場合はECR等も用意する必要があるので少し手間です。Sysdig公式ドキュメントにも記載のある以下の方法で、EC2上にdragent.yamlファイルを予め配置しておき、ボリュームマウントしてしまうのが楽です。

https://docs.sysdig.com/en/sysdig-secure/configuration/sysdig-agent/#container

おまけ:自動化用のUserdata

今回はUserdataでSysdigエージェントのインストール、設定を行ったので、その内容もおまけとして載せておきます。
以下が実際に使用したUserdataのスクリプトを一部修正したものです。

#!/bin/bash
set -ex
SYSDIG_COLLECTOR_DOMAIN=""
SYSDIG_SECURE_ENDPOINT_DOMAIN=""
SYSDIG_SECURE_ENDPOINT_URL="https://$SYSDIG_SECURE_ENDPOINT_DOMAIN"
SYSDIG_AGENT_TAG=""
PROXY_HOST=""
PROXY_PORT=""
SYSDIG_CONFIG_DIR=""

# env for proxy setting
echo "env for proxy setting"
export HTTP_PROXY="http://$PROXY_HOST:$PROXY_PORT"
export HTTPS_PROXY="http://$PROXY_HOST:$PROXY_PORT"

# OS環境変数設定(ユーザーセッション)
tee -a /etc/environment << EOF
HTTP_PROXY="http://$PROXY_HOST:$PROXY_PORT"
HTTPS_PROXY="http://$PROXY_HOST:$PROXY_PORT"
EOF

# ロックが解除されるまで待機するfunction
wait_for_apt_locks() {
    while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1 || fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
        echo "Waiting for other software managers to finish..."
        sleep 5
    done
}

# Add Docker's official GPG key:
sudo apt-get update
wait_for_apt_locks
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
wait_for_apt_locks
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# docker daemon設定
sudo mkdir -p /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT"
Environment="HTTPS_PROXY=http://$PROXY_HOST:$PROXY_PORT"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

# docker build時のプロキシ設定
sudo mkdir -p ~/.docker
tee -a ~/.docker/config.json << EOF
{
    "proxies": {
        "default": {
            "httpProxy": "http://$PROXY_HOST:$PROXY_PORT",
            "httpsProxy": "http://$PROXY_HOST:$PROXY_PORT"
        }
    }
}
EOF

# Sysdig エージェントのプロキシ設定
sudo mkdir -p $SYSDIG_CONFIG_DIR
tee -a $SYSDIG_CONFIG_DIR/dragent.yaml << EOF
customerid: ${sysdig_agent_accesskey}
tags: $SYSDIG_AGENT_TAG
collector: $SYSDIG_COLLECTOR_DOMAIN
ssl: true
collector_port: 6443
http_proxy:
  proxy_host: $PROXY_HOST
  proxy_port: $PROXY_PORT
EOF

# sysdigエージェント起動&常駐化
docker run -d --name sysdig-agent --restart always --privileged --net host --pid host \
    -v $SYSDIG_CONFIG_DIR/dragent.yaml:/opt/draios/etc/dragent.yaml \
    -e ACCESS_KEY=${sysdig_agent_accesskey} \
    -e COLLECTOR=$SYSDIG_COLLECTOR_DOMAIN \
    -e SECURE=true \
    -v /var/run/docker.sock:/host/var/run/docker.sock \
    -v /dev:/host/dev \
    -v /proc:/host/proc:ro \
    -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro \
    -v /usr:/host/usr:ro \
    -v /etc:/host/etc:ro \
    --shm-size=512m \
    quay.io/sysdig/agent

まとめ

プロキシ環境でSysdigエージェントを動作させるためには、以下の3点の設定が必要というお話でした。

  1. Docker Daemon用のプロキシ設定
  2. Docker Build用のプロキシ設定
  3. Sysdigエージェント固有のプロキシ設定(dragent.yaml)

以上、とーちでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.