MNTSQ Techブログ

リーガルテック・カンパニー「MNTSQ(モンテスキュー)」のTechブログです。

ECS on EC2 構成の ECS サービスで GuardDuty ECS Runtime Monitoring を有効化するには EC2 インスタンス側で GuardDuty エージェントを動かす必要がある

MNTSQ Tech Blog TOP > 記事一覧 > ECS on EC2 構成の ECS サービスで GuardDuty ECS Runtime Monitoring を有効化するには EC2 インスタンス側で GuardDuty エージェントを動かす必要がある

小ネタです。そして掲題が全てを語っています。

以下、ECS on EC2 構成の ECS サービスにおいて ECS タスクを動作させるプラットフォームとなる EC2 インスタンスECS コンテナインスタンス と呼称します。これは Launching an Amazon ECS Linux container instance へ微妙に倣っての呼び方になります。

3行で

  • ECS on EC2 構成の ECS サービスで GuardDuty ECS Runtime Monitoring を有効化する場合、ECS サービスの更新は必要ない
  • ECS コンテナインスタンスで GuardDuty エージェントが動作し EC2 Runtime Monitoring の要件を満たせれば、その時点で ECS Runtime Monitoring も有効になる
  • ECS コンテナインスタンスでの EC2 Runtime Monitoring 導入には GuardDuty エージェントが要求する制約がいくつかある

なお本稿が伝えたいことは末尾の 追伸 で全て事足ります。

背景

現在 MNTSQ では SRE を中心にプロダクトセキュリティの向上施策を進めており、その中で GuardDuty の利用範囲拡充も目論んでいます。

ここで白羽の矢が立ったのが GuardDuty の機能のひとつである Runtime Monitoring です。詳細は AWS 公式ドキュメント(GuardDuty Runtime Monitoring) に譲りますが、EC2 / EKS / ECS においてインスタンスやタスクの振舞いを内部から観測し、脅威となりうる挙動の検出が可能なサービスです。 サポートされるサービスは前掲ドキュメントにもある通り EKS / ECS / EC2 で、EKS 以外は MNTSQ のワークロードにも合致します。

さて Runtime Monitoring の導入ですが、この方法にはいくつかの経路があります。Enabling GuardDuty Runtime Monitoring にその全容があり、実に多様な手法が用意されていることが伺えます。MNTSQ では

  • 全ての AWS アカウントは AWS Organizations で管理している
    • GuardDuty 管理用に delegated admin として設定された AWS アカウント(AWS Organizations 配下だが organizations 管理アカウントではない)が存在する
  • 導入対象は ECS とし、EC2 は追って導入を検討する
  • ECS Runtime Monitoring 有効化にかかる手間は最小限のものとしたい。自動導入の仕組みがあれば積極的にこれを使いたい
    • ただし有効化にかかる影響範囲のコントロールを行いたいので Runtime Monitoring を有効にする AWS アカウントは明示的に選択したい
  • Runtime Monitoring を有効にする決定をした AWS アカウント内では全ての ECS クラスタを一律対象とする

という背景があり、以下の要領で有効化を進めることにしました。

なお、ECS on Fargate 構成において GuardDuty エージェントがサイドカーコンテナとして起動する際、ECS タスク定義への変更は特段発生しません。 ECS サービス / タスク定義の範囲外の箇所で aws-guardduty-agent- という接頭辞の名称をもつコンテナが自動で起動してくるようになります。詳細は How Runtime Monitoring works with Fargate (Amazon ECS only) の "GuardDuty adds a sidecar container" の節に説明があります。

さて2025年6月現在、MNTSQ で扱う ECS サービスでは

  • ECS on Fargate
  • ECS on EC2

の2種類の構成をとるものがあります。ECS サービスの数で言えば ECS on Fargate が圧倒的に多く、ECS on EC2 は一部用途(主に GPU を利用したい向き)で使われるのみです。 前述ドキュメントに従い ECS Runtime Monitoring の導入をすすめると、ECS on Fargate に関しては ECS サービス更新後に Reviewing runtime coverage statistics and troubleshooting issues に示される手法にて healthy(= GuardDuty エージェントが稼動し Runtime Monitoring の動作も開始した)なことが確認できるようになりました。

実際の runtime coverage 画面。伏字が多い点はご容赦ください

いっぽうでこの手法では ECS on EC2 構成の ECS サービスでは coverage が unhealthy のままになってしまう という気付きも得られました。さてどうしたことでしょう。

ECS Runtime Monitoring を ECS on EC2 構成で healthy にする

ECS と EC2 のそれぞれで Runtime Monitoring がどのように動作するかは以下ドキュメントに示されています。

  1. How Runtime Monitoring works with Amazon EC2 instances
  2. How Runtime Monitoring works with Fargate (Amazon ECS only)

いずれも GuardDuty エージェントが動作していることが前提で、EC2 の場合は Systemd ユニットとして、ECS の場合はサイドカーコンテナとして動作します 今回目指したい ECS on EC2 構成の場合でも Fargate ではないとはいえ ECS ではあるので、サイドカーコンテナとして GuardDuty エージェントは動作するのではないかと考えるのは自然なはずです。少なくとも本稿筆者はそう考えました。しかしながら実際に作業をしてみると

作業 ECS on Fargate で Runtime Monitoring が healthy になった ECS on EC2 で Runtime Monitoring が healthy になった
GuardDuty 側で ECS Runtime Monitoring を有効にした × ×
エージェントの自動導入を有効にした × ×
ECS タスクの入れ替えをした × ×
ECS サービスを更新した ×
ECS コンテナインスタンスで GuardDuty エージェントを動作させた ×(関係なし)

という格好になりました。つまり ECS on EC2 構成の場合は ECS ではなく EC2 側での Runtime Monitoring 対応が必要 という洞察が得られました。 ちなみにこのとき ECS サービス上ではサイドカーコンテナとしての GuardDuty エージェントは稼動せず、EC2 インスタンス上で動作する GuardDuty エージェントがその役目を担っている模様です。

ECS コンテナインスタンスで GuardDuty エージェントを動作させる

どこで何が必要になるかが判れば話は早いです。事前準備としては以下を参照すればよいでしょう。

  1. How Runtime Monitoring works with Amazon EC2 instances
  2. Prerequisites for Amazon EC2 instance support

早い話が以下です。

Linux カーネルのバージョンが見落されがちなので注意が必要です。筆者は見落しました。

ECS コンテナインスタンスを動作させる場合、おおよそのケースでは ECS-optimized AMI が利用されると思います。MNTSQ でも例に漏れず ECS-optimized AMI を使用し ECS コンテナインスタンスを稼動させています。この ECS-optimized AMI で上記ドキュメントに示される Linux カーネル 5.4 以上のもの*1 を使う方法を考える必要があります。

最も簡単なのは Amazon ECS-optimized Linux AMIsRetrieving Amazon ECS-optimized Linux AMI metadata で案内されている、Linux カーネル 5.10 を標準で使用する ECS-optimized AMI に差し替えてしまうというものでしょう。弊社でもこの差し替えを行うことで対応としました。

まとめ

ECS on EC2 構成の場合は ECS ではなく EC2 側での Runtime Monitoring 対応が必要

という点、早々に気付ければ話は早かったのですが、「ECS が対象なのだから ECS 向けの有効化作業に何か抜け漏れがあるはずだ」と執着してしまい、試行錯誤をする羽目になりました。Runtime Monitoring に関する AWS 公式ドキュメントのうち ECS に言及されるものはほぼ全て ECS on Fargate が対象の模様で、ECS on EC2 構成に関しての言及が見られない点も少々難儀する箇所だったように思います。プラットフォームを自前で管理する場合の観点を今一度鍛えようと思える機会になりました。

ECS on EC2 構成で ECS Runtime Monitoring が一向に有効化できないという状況にお困りの方の一助となれば幸いです。

MNTSQ 株式会社 SRE 秋本

追伸

ECS on EC2 構成の場合は ECS ではなく EC2 側での Runtime Monitoring 対応が必要

という点、本稿筆者が本作業を行った際には先行情報となるものを見付けられず、本記事が有意義なものになると妄想していました。しかし今本記事を書きつつ探してみたところ、Turning on Runtime Monitoring for Amazon ECS という ECS のドキュメント(GuardDuty のドキュメントではない) で ECS on EC2 向けの解説がありました。もっと早く知りたかった……。

*1:ECS-optimized AMI は Amazon Linux 2 か Amazon Linux 2023 がベースになっているので、UbuntuDebian 向けの情報として扱われている内容には触れていません