ECS Fargate で tcpdump を取得してみた

Amazon ECS Network Sidecar イメージを使用するとセットアップが楽です
2024.01.16

アノテーション・テクニカルサポートチームの hato です。

トラブルシューティングのため ECS Fargate で tcpdump の取得を案内することがありますが、実際にやったことはなかったのでやってみました。

Fargate で tcpdump を取得する方法

いくつかの選択肢がありますが、今回は Amazon ECS Network Sidecar をサイドカーで起動し、ECS Exec でシェルアクセスしています。

なお、Amazon ECS Network Sidecar は AWS が提供するネットワーク関連のトラブルシューティングツールがインストールされたコンテナイメージです。

やってみた

Amazon ECS コンソールの「タスク定義」からサイドカーを追加するタスク定義名を選択します。

ベースとなるタスク定義を選択し、「新しいリビジョンの作成」→「新しいリビジョンの作成」をクリックします。

「コンテナを追加」をクリックします。

次の値を指定し、「作成」をクリックします。

  • コンテナの詳細
    • 名前:任意の名前(例:amazon-ecs-network-sidecar
    • イメージ URI:public.ecr.aws/aws-se/amazon-ecs-network-sidecar:latest
    • 必須コンテナ:いいえ
  • 環境変数
    • キー:SIDECAR_RUN_MODE
    • 値のタイプ:
    • 値:SLEEPER

タスク定義が正常に作成されたことを確認します。

ECS サービスなどの設定を更新し、作成したタスク定義でタスクを実行します。

タスクが実行中になること確認して、ECS Exec でサイドカーに接続します。

接続コマンド例

aws ecs execute-command \
    --cluster 【ECS クラスター名】 \
    --container amazon-ecs-network-sidecar \
    --interactive --command "/usr/bin/zsh" \
    --task 【ECS タスク ID】

接続時のサンプル

 _______ _______ _______     __   _ _______ _______ _  _  _  _____   ______ _     _     _______ _____ ______  _______ _______ _______  ______
 |______ |       |______ ___ | \  | |______    |    |  |  | |     | |_____/ |____/  ___ |______   |   |     \ |______ |       |_____| |_____/
 |______ |_____  ______|     |  \_| |______    |    |__|__| |_____| |    \_ |    \_     ______| __|__ |_____/ |______ |_____  |     | |    \_
                                                                                                                                             

Version 2 of the helpful Amazon ECS Network Sidecar

root@ip-10-0-0-10 ~
❯

tcpdump コマンドを使用して、パケットキャプチャを取得します。
※対象 NIC は恐らくeth1ですがifconfigで確認してください

取得コマンド例

root@ip-10-0-0-10 ~
❯ tcpdump -i eth1 src port 80
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes


01:01:01.123456 IP ip-10-0-0-10.ap-northeast-1.compute.internal.http > 203.0.113.0.31541: Flags [S.], seq 2170574848, ack 3119349296, win 62727, options [mss 8961], length 0

補足

/usr/binを確認する限り、ネットワーク関連のコマンド以外も使用できそうです。

クリックするとコマンド一覧を表示します
alias
arch
arpaname
arping
awk
b2sum
base32
base64
basename
basenc
bash
bashbug
bashbug-64
bg
busctl
cal
ca-legacy
captoinfo
cat
catchsegv
cd
chage
chcon
checksctp
chfn
chgrp
chmem
chmod
choom
chown
chrt
chsh
cksum
clear
clockdiff
cmp
col
colcrt
colrm
column
comm
command
cp
cpio
crb
csplit
curl
cut
cyrusbdb2current
date
dbus-broker
dbus-broker-launch
dd
debuginfo-install
delv
df
dhcping
diff
diff3
dig
dir
dircolors
dirmngr
dirmngr-client
dirname
distro
dmesg
dnf
dnf-3
dnstap-read
dpkg
dpkg-deb
dpkg-divert
dpkg-maintscript-helper
dpkg-query
dpkg-realpath
dpkg-split
dpkg-statoverride
dpkg-trigger
du
echo
egrep
eject
encguess
env
eqn
ex
expand
expr
factor
fallocate
false
fc
fg
fgrep
fincore
find
findmnt
find-repos-of-install
flock
fmt
fold
free
funzip
g13
gapplication
gawk
gdbus
gencat
geqn
getconf
getent
getopt
getopts
gio
gio-querymodules-64
glib-compile-schemas
gneqn
gnroff
gpasswd
gpg
gpg2
gpg-agent
gpg-card
gpgconf
gpg-connect-agent
gpg-error
gpgme-json
gpgparsemail
gpgsm
gpgsplit
gpgtar
gpgv
gpgv2
gpg-wks-client
gpg-wks-server
gpic
grep
groff
grops
grotty
groups
gsettings
gsoelim
gtar
gtbl
gtroff
gunzip
gzexe
gzip
hardlink
hash
head
hexdump
homectl
host
hostid
hostnamectl
i386
iconv
id
infocmp
infotocap
install
ionice
ipcmk
ipcrm
ipcs
iperf3
irqtop
isosize
jobs
join
journalctl
kbxutil
kill
killall
last
lastb
lastlog
lchfn
lchsh
ldd
ld.so
link
linux32
linux64
ln
locale
localectl
localedef
logger
login
loginctl
logname
look
ls
lsblk
lscpu
lsipc
lsirq
lslocks
lslogins
lsmem
lsns
mcookie
md5sum
mesg
mkdir
mkfifo
mknod
mktemp
mmdblookup
modulemd-validator
more
mount
mountpoint
mv
namei
nano
nc
ncat
needs-restarting
neqn
netstat
networkctl
newgidmap
newgrp
newuidmap
nice
nl
nmap
nohup
nping
nproc
nroff
nsenter
nslookup
nsupdate
numfmt
od
oomctl
p11-kit
package-cleanup
paste
pathchk
peekfd
perl
perl5.32.1
perldoc
pgrep
pic
piconv
pidof
pidwait
pinentry
pinentry-curses
ping
pinky
pip
pip-3
pip3
pip-3.9
pip3.9
pkaction
pkcheck
pkexec
pkill
pkla-admin-identities
pkla-check-authorization
pkttyagent
pldd
pmap
pod2man
pod2text
pod2usage
portablectl
post-grohtml
pr
preconv
pre-grohtml
printenv
printf
prlimit
prtstat
ps
pslog
pstree
pstree.x11
ptx
pwd
pwdx
pwmake
pwscore
pydoc
pydoc3
pydoc3.9
python3
python3.9
read
readlink
realpath
rename
renice
repoclosure
repodiff
repo-graph
repomanage
repoquery
reposync
repotrack
reset
resolvectl
rev
rm
rmdir
rnano
rpm
rpm2archive
rpm2cpio
rpmdb
rpmkeys
rpmquery
rpmverify
runcon
rvi
rview
rvim
script
scriptlive
scriptreplay
sctp_darn
sctp_status
sctp_test
sdiff
secret-tool
sed
seq
setarch
setpriv
setsid
setterm
sg
sh
sha1sum
sha224sum
sha256sum
sha384sum
sha512sum
shred
shuf
skill
slabtop
sleep
snice
soelim
soelim.groff
sort
sotruss
split
sprof
ssh-keygen
stat
stdbuf
stty
su
sum
sync
systemctl
systemd-analyze
systemd-ask-password
systemd-cat
systemd-cgls
systemd-cgtop
systemd-creds
systemd-delta
systemd-detect-virt
systemd-dissect
systemd-escape
systemd-firstboot
systemd-id128
systemd-inhibit
systemd-machine-id-setup
systemd-mount
systemd-notify
systemd-path
systemd-resolve
systemd-run
systemd-socket-activate
systemd-stdio-bridge
systemd-sysext
systemd-sysusers
systemd-tmpfiles
systemd-tty-ask-password-agent
systemd-umount
tabs
tac
tail
tar
taskset
tbl
tcptraceroute
tee
telnet
test
tic
timedatectl
timeout
tload
toe
top
touch
tput
tr
tracepath
traceroute
traceroute6
troff
true
truncate
trust
tset
tsort
tty
type
tzselect
uclampset
ul
ulimit
umask
umount
unalias
uname
uname26
unexpand
uniq
unlink
unshare
unzip
unzipsfx
update-ca-trust
uptime
userdbctl
users
utmpdump
uuidgen
uuidparse
vdir
vi
view
vim
vimdiff
vimtutor
vmstat
w
wait
wall
watch
watchgnupg
wc
wdctl
wget
whereis
which
who
whoami
withsctp
write
x86_64
xargs
xmlcatalog
xmllint
xmlwf
xxd
yes
yum
yum-builddep
yum-config-manager
yum-debug-dump
yum-debug-restore
yumdownloader
yum-groups-manager
zcat
zcmp
zdiff
zdump
zegrep
zfgrep
zforce
zgrep
zipgrep
zipinfo
zless
zmore
znew
zsh
zsoelim

参考資料

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。