[アップデート] セキュリティグループ接続の追跡機能でアイドルタイムアウト指定がサポートされました

2023.11.22

しばたです。

本日よりセキュリティグループの接続の追跡(Connection Tracking)において利用者が独自のアイドルタイムアウト時間を設定できる様になりました。

AWSからのアナウンスはこちらになります。

接続の追跡について

まず最初にキュリティグループの接続の追跡(Connection Tracking)については以下のドキュメントをご覧ください。

セキュリティグループではステートフルな通信制御を実現するため特定の条件を満たす通信を追跡します。
細かい条件は上記ドキュメントで確認いただきたいですが、基本的にほとんどの通信は追跡対象だと考えてもらって構いません。

そしてインスタンス毎で追跡可能な接続の最大数が決まっています。

更新点について

今回この追跡された通信に対してユーザーが独自のアイドルタイムアウト時間を設定できる様になりました。

設定可能な時間は3種類あり以下の通りです。

  • 確立した(ESTABLISHED)TCPのアイドルタイムアウト : 60秒~432000秒 (デフォルト432000秒)
    • 432000秒 = 5日
  • UDPアイドルタイムアウト : 30秒~60秒 (デフォルト30秒)
  • UDPストリームのアイドルタイムアウト : 60秒~180秒 (デフォルト180秒)

設定はENIに対して行います。
対象となるENIを選んでアクションから「Modify idle connection tracking timeout」を選んでやると、

設定ダイアログが表示されるので値を更新してやるだけです。

結果はこんな感じでENI詳細画面下部に表示されます。

ちなみにENIの初期状態としては「未定義」の様です。

恐らくデフォルト値が使われる設定かと思いますが、いまのところ一度値を更新した後に未定義に戻す方法は無い様なのでご注意ください。
(ModifyNetworkInterfaceAttribute APIを見てもそれっぽいのが無い...)

利用可能インスタンス

この機能を利用可能なのはNitro世代のインスタンスとなります。
具体的には以下のドキュメントでご確認ください。

UDPとUDPストリームの差異

AWSのドキュメントではUDPとUDPストリームについてそれぞれ、

UDP timeout: Timeout (in seconds) for idle UDP flows that have seen traffic only in a single direction or a single request-response transaction.

および

UDP stream timeout: Timeout (in seconds) for idle UDP flows classified as streams which have seen more than one request-response transaction.

と記載されています。
ざっくり「UDPは単方向通信または単一応答のトランザクション通信」、「UDPストリームは"ストリーム"と分類され複数応答からなるトランザクション通信」とされ、これ以上具体的な内容を見つけることができませんでした。

なんとなく「QUICのストリームみたいなものがUDPストリームとして扱われるのかな?」と思っていますが確証はありません...
具体的な内容が分かれば追記したいと思います。

ユースケース

基本的にこの設定はデフォルトで問題無く、コネクション枯渇の問題が起きうる場合のみ調整するものと考えて良いでしょう。
ドキュメントに記載されているユースケースとしては、

  • ネットワークファイアウォールなどのアプライアンスからの非常に多数の接続(100k超え)を処理することが予想される場合
  • DNS、SIP、SNMP、Syslog、Radius等のUDP通信のリクエストが大量に来る場合
  • ELB経由で大量のリクエストが来る場合 (ELB経由の通信は全て追跡対象になるため)

が挙げられています。
AWSドキュメントでは設定値の方針についても記述がありますので詳細についてはドキュメントで確認してください。

原則としてはアイドルタイムアウト時間を調整することで不要に残り続けるコネクションを減らし枯渇を防ぐことを目指します。

そして各インスタンスで使用可能なコネクション数はethtoolで取得できるconntrack_allowance_availableメトリクスで取得可能で、上限を超えた場合はconntrack_allowance_exceededの値が増加します。
これらのパラメーターの計測方法などについてはこちらのブログ記事をご覧ください。

最後に

簡単ですが以上となります。

率直に言って取り扱いの難しい設定だと思います。
高負荷な環境を扱っておりネットワークまわりの細やかな調整が必要とされるケースにおいて活用すると良いでしょう。