はじめに
AWS EC2インスタンスのインスタンスタイプは、どのような観点で選択されているでしょうか。CPU、メモリ、ネットワークパフォーマンス、用途によりENI数も確認されるかもしれません。
本記事では、ネットワークパフォーマンスの中で帯域幅やPPS(Packet-per-second)と同じく指標の一つである、セキュリティグループの接続追跡数について取り扱いたいと思います。
セキュリティグループの接続追跡
セキュリティグループは言わずと知れた、プロトコル、ポート番号(TCP/UDPのみ)、IPアドレスなどを用い、VPCを流れる通信を制御するファイアウォール機能です。
ファイアウォール機能はステートフルなチェックを実現するためにコネクションをテーブルに保持し、この動作をセキュリティグループの接続追跡と呼んでいます。
追跡される接続 | 追跡されない接続 |
---|---|
接続追跡数オーバーの問題
接続追跡数の最大値はインスタンスタイプで決まり、Linux等はメトリクスで確認できます。
"Linux等" がネットワークエンジニア泣かせで、仮想アプライアンス等はメトリクスで確認できず、気付かない内に接続追跡数の最大値へ引っかかりパケットドロップしたケースもありました。
帯域幅やPPSであれば、仮想アプライアンス上で確認するなどで代替できる場合もあります。
メトリクス | 説明 |
---|---|
bw_in_allowance_exceeded | インバウンド帯域幅オーバーによるキューまたはドロップ数 |
bw_out_allowance_exceeded | アウトバウンド帯域幅オーバーによるキューまたはドロップ数 |
conntrack_allowance_exceeded | 接続追跡数オーバーによるドロップ数 |
conntrack_allowance_available | 確立できる残り接続追跡数(Nitroインスタンスのみ) |
linklocal_allowance_exceeded | PPSオーバーによるドロップ数(リンクローカルサービスアクセス) |
pps_allowance_exceeded | PPSオーバーによるドロップ数 |
接続追跡数オーバーへの対処
今までインスタンスタイプを変更し、接続追跡数の最大値を増やすしか手段が無かったですが、接続追跡数を抑える手段として2023年11月20日に接続タイムアウトを変更する機能が実装されました。
通常のファイアウォールと同じですが、サービスのタイムアウトより小さい値が設定されてしまうと、想定されていないコネクション切断が生じますのでご注意下さい。
接続タイムアウトの変更方法
上記の記事にて、セキュリティグループの接続追跡や変更可能なNitroインスタンスに関するリンクはあるものの肝心の変更方法は見つけられらず。
re:Inventで公表されたAmazon Qへ質問したところ、セキュリティグループ画面で変更しろとの回答でしたが、実際の画面で見つけられず。
Step4. でインバウンドorアウトバウンドルール編集を選択しても、Step5. の接続追跡のタイムアウトを設定できるセクションはありませんでした。
ふと、セキュリティグループ画面じゃなくENI画面かも?と確認すると、、、見つかりました!Amazon Qもプレビュー版なので今後楽しみですね。
(TCP established timeoutのデフォルト値が432000秒=5日間は長いですね...)
まとめ
- セキュリティグループの接続追跡数オーバーによりパケットドロップが生じる可能性があります。
- 対処はインスタンスタイプのスケールアップのほか接続タイムアウトの変更があります。
- 接続タイムアウトはセキュリティグループ画面でなくENI画面で変更できます。
おわりに
AWS ネットワークでトラブルシュートされる方にとって、本記事の問題・対処がご参考になりますと幸いです。