ネットワークACLについて
前回、EC2インスタンスに対してのファイアウォールの役割をするセキュリティグループの話をしましたが、今回はネットワークACLの話をします。
AWSでは、セキュリティに関する制御を、主にセキュリティグループとネットワークACLで行います。それぞれの何がどう違うのか見ていきましょう。
サービス→VPCと入力して、VPCコンソール画面を開きます。
「セキュリティ」の項目に、今回取り上げるセキュリティグループとネットワークACLが出てきます。
ネットワークACLとは
こちらに公式の記事がありますが、VPCの単位で動作するように見えるので、少し分かりづらいと思います。
ネットワークACL(Access Control List)は、下記の通りサブネットに関連付けられています。セキュリティグループはEC2インスタンスに関連付けられていましたが、こちらはサブネットに対してセキュリティ制御を行うものです。
設定画面が似ているが非なるもの
こちらもセキュリティグループと同様、「インバウンドのルール」と「アウトバウンドのルール」のタブがあります。
セキュリティグループと同じような考え方で設定すれば良いのでは?と思ってしまうと思いますが、大きく違います。
まず、左から見ていくと"ルール#"という項目があります。"100"と"*"が入力されていますが、これはデフォルトの状態です。
"ルール#"は、評価される順番です。数字が小さい順から評価されるので、100の次に処理を行わせたいルールがある場合は、"101"でも"300"でも、100より大きければ任意の値で良いです。
"*"は、一番最後に処理させたいルールです。これは変更できません。
デフォルトのルールの意味
デフォルトで設定されているインバウンド・アウトバウンドルールに設定されているルールの意味は、以下の通りです。
ルール#が"100"の行:プロトコル・ポート番号関わらず、すべてのトラフィックを許可(ALLOW)
ルール#が"*"の行:プロトコル・ポート番号関わらず、すべてのトラフィックを拒否(DENY)
こちらの、「デフォルトネットワークACL」の項目が参考になると思いますが、この場合は、ルール#が100の行から順に処理されていきます。100の行で、プロトコル・ポート番号すべてのトラフィックを許可してしまっているので、デフォルトのままでは、何の制限も無くサブネット間をすべてのトラフィックが通過できてしまいます。
ステートフルとステートレス
セキュリティグループが、ステートフル(インバウンドに設定したルールがアウトバウンドにも透過)であったのに対して、ネットワークACLはステートレスです。ですので、戻りのトラフィックに関しても設定する必要があります。