ネットワークACLとは?
ネットワークアクセスコントロールリスト(ACL)は、以下のようにサブネット単位で適用され、特定の通信(インバウンドまたはアウトバウンド)を許可または拒否するルールを設定できます。デフォルトでは全ての通信を許可されてます。

セキュリティグループとネットワークACLの違い
項目 | セキュリティグループ | ネットワークACL |
適用範囲 | インスタンス単位 | サブネット単位 |
通信の状態 | ステートフル(戻りの通信は自動許可) | ステートレス(戻りの通信も明示的に許可が必要) |
ルールの適用 | 許可ルールのみ(デフォルトで拒否) | 許可・拒否ルールを設定可能(デフォルトで全許可または全拒否) |
評価の順序 | 全ルールを評価し、適用可能なものを許可 | ルールは番号順に評価し、最初に一致したものが適用 |
ネットワークACLの動作を見てみる
今回はステートレスとはどのようなことなのか確認していきます。まずTest-web-1aのネットワークACLを確認します。
Test-web-1aのインスタンスIDをクリックします。

サブネットIDをクリックします。

インスタンスが配置されているサブネットが表示されるので、もう一度サブネットIDをクリックします。

このサブネットに関連付いているネットワークACLが確認できます。「ネットワークACL ID」をクリックします。

ネットワークACLの画面に遷移するので、「ネットワークACL ID」をクリックします。

現在、全てのトラフィックが許可されています。
次に「アウトバウンドルール」タブをクリックします。

「アウトバウンドルールを編集」をクリックしてルールを編集します。

今許可しているすべてのトラフィックを「削除」し、「変更を保存」をクリックします。

アウトバウンドルールではすべてのトラフィックを外に出さない設定になりました。

ブラウザからアクセスするとエラーが表示されました。

何故ACLのアウトバウンドルールを許可するのか?
クライアントPCからサーバーへHTMLを取得する際、クライアントPCの宛先はポート80ですが、送信元はエフェメラルポート(動的ポート(1024〜65535のランダムなポート))を使います。
サーバーはリクエストを受け取るとクライアントPCにHTMLを送信します。この時の宛先ポートはクライアントPCの送信元ポートになります。

ネットワークACLでアウトバウンドルールを許可しないとサーバーからクライアントPCへHTMLを送信できません。そのためネットワークACLはインバウンドルールとアウトバウンドルールの両方を明示的に許可する必要があります。セキュリティグループはステートフルな通信なので、以下のHTMLダウンロード時のような戻りの通信は許可されています。

コメント