yamamototis1105’s tech blog

ネットワークを中心とした技術ブログです

AWS セキュリティグループの落とし穴と新機能による対処策

はじめに

 AWS EC2インスタンスインスタンスタイプは、どのような観点で選択されているでしょうか。CPU、メモリ、ネットワークパフォーマンス、用途によりENI数も確認されるかもしれません。

 本記事では、ネットワークパフォーマンスの中で帯域幅やPPS(Packet-per-second)と同じく指標の一つである、セキュリティグループの接続追跡数について取り扱いたいと思います。

セキュリティグループの接続追跡

 セキュリティグループは言わずと知れた、プロトコル、ポート番号(TCP/UDPのみ)、IPアドレスなどを用い、VPCを流れる通信を制御するファイアウォール機能です。
 ファイアウォール機能はステートフルなチェックを実現するためにコネクションをテーブルに保持し、この動作をセキュリティグループの接続追跡と呼んでいます。

追跡される接続追跡されない接続
  • 行きがAnyアドレスかつ帰りがAnyポートで
    許可されたTCP/UDPトラフィック
  • ただし、以下の手段で確立された接続は除く
docs.aws.amazon.com

接続追跡数オーバーの問題

 接続追跡数の最大値はインスタンスタイプで決まり、Linux等はメトリクスで確認できます。
 "Linux等" がネットワークエンジニア泣かせで、仮想アプライアンス等はメトリクスで確認できず、気付かない内に接続追跡数の最大値へ引っかかりパケットドロップしたケースもありました。
 帯域幅やPPSであれば、仮想アプライアンス上で確認するなどで代替できる場合もあります。

メトリクス説明
bw_in_allowance_exceededインバウンド帯域幅オーバーによるキューまたはドロップ数
bw_out_allowance_exceededアウトバウンド帯域幅オーバーによるキューまたはドロップ数
conntrack_allowance_exceeded接続追跡数オーバーによるドロップ数
conntrack_allowance_available確立できる残り接続追跡数(Nitroインスタンスのみ)
linklocal_allowance_exceededPPSオーバーによるドロップ数(リンクローカルサービスアクセス)
pps_allowance_exceededPPSオーバーによるドロップ数
docs.aws.amazon.com

接続追跡数オーバーへの対処

 今までインスタンスタイプを変更し、接続追跡数の最大値を増やすしか手段が無かったですが、接続追跡数を抑える手段として2023年11月20日に接続タイムアウトを変更する機能が実装されました。
 通常のファイアウォールと同じですが、サービスのタイムアウトより小さい値が設定されてしまうと、想定されていないコネクション切断が生じますのでご注意下さい。

aws.amazon.com

接続タイムアウトの変更方法

 上記の記事にて、セキュリティグループの接続追跡や変更可能なNitroインスタンスに関するリンクはあるものの肝心の変更方法は見つけられらず。
 re:Inventで公表されたAmazon Qへ質問したところ、セキュリティグループ画面で変更しろとの回答でしたが、実際の画面で見つけられず。


 Step4. でインバウンドorアウトバウンドルール編集を選択しても、Step5. の接続追跡のタイムアウトを設定できるセクションはありませんでした。
 ふと、セキュリティグループ画面じゃなくENI画面かも?と確認すると、、、見つかりました!Amazon Qもプレビュー版なので今後楽しみですね。




TCP established timeoutのデフォルト値が432000秒=5日間は長いですね...)

まとめ

  • セキュリティグループの接続追跡数オーバーによりパケットドロップが生じる可能性があります。
  • 対処はインスタンスタイプのスケールアップのほか接続タイムアウトの変更があります。
  • 接続タイムアウトはセキュリティグループ画面でなくENI画面で変更できます。

おわりに

 AWS ネットワークでトラブルシュートされる方にとって、本記事の問題・対処がご参考になりますと幸いです。