はじめに
VPC(Virtual Private Cloud)は、AWSのネットワークサービスの中核をになっています。
そして、VPCでアクセス制御(セキュリティ)の中核を担うのが、ネットワークACLとセキュリティグループです。
ネットワークACLとセキュリティグループは、初めて勉強すると混乱する人が多いと思います。
特に、仕様の違いや使い分け方が整理できないと、理解が進まないでしょう。
そこで、今回はこの2について整理しましたので、その内容を紹介します。
みなさんのAWS理解の参考にしてください。
ネットワークACLとセキュリティグループの整理
まずは、ネットワークACLとセキュリティグループを表にまとめて整理します。
ネットワークACL | セキュリティグループ | |
---|---|---|
適用単位 | サブネット単位 | インスタンス単位 |
制御の種類 | 許可 & 拒否 | 許可のみ |
状態管理 (戻り通信の扱い) | ステートレス (戻り通信に対する 設定が必要) | ステートフル (戻り通信に対する 設定は不要) |
制御の指定方法 | ポート CIDR(IPアドレス) | プロトコル ポート CIDR(IPアドレス) セキュリティグループ |
デフォルト設定 | アクセスを許可 | アクセスを拒否 |
この表からも分かるように、2つはアクセスを制御する目的は同じでも、その内容には明確な違いがあります。
ネットワークACLとセキュリティグループの主な違い
この中で、アーキテクチャを考える上で重要かつAWS認定試験でもよく出題される、「制御の種類」と「状態管理」を説明ます。
制御の種類
ネットワークACLとセキュリティグループの特徴に、ネットワークACLは明示的にアクセス拒否が設定できる点が挙げられます。
もちろん、セキュリティグループも、アクセス許可を設定しないことで暗黙的にアクセス拒否と同等の設定を行えます。
しかし、不正アクセスが違われる特定IPアドレスをブロックしたい場合、該当IPアドレス以外を許可する設定することは現実的ではありません。
例えば、セキュリティグループグローバルIP:ccc.ccc.ccc.cccからのアクセスをブロックしたい場合
aaa.aaa.aaa.aaa :許可
bbb.bbb.bbb.bbb:許可
ddd.ddd.ddd.ddd:許可
・・・
※「ccc.ccc.ccc.ccc:許可」は設定しない
この点、ネットワークACLでは、特定IPアドレスを拒否できるので設定が楽になります。
(「ccc.ccc.ccc.ccc:拒否」が設定できる!)
状態管理(ステートレス/ステートフル)
状態管理は、通信不可時のトラブルシューティングとして、実務だけでなくAWS認定試験でもよく問われます。
まず、ステートレスとステートフルの違いは、インバンド(入りの通信)を許可した場合、「アウトバウンド(帰りの通信)を自動的に許可するか?」という点です。
・ステートレスは、アウトバウンドの通信は自動的に許可しない(別途設定が必要)
・ステートフルは、アウトバウンドの通信は自動的に許可する
ネットワークACLは「ステートレス」、セキュリティグループは「ステートフル」です。
これを踏まえると、全通信を拒止した上で特定通信を許可する場合は以下となります。
インバウンド 設定 | アウトバウンド 設定 | |
---|---|---|
ネットワークACL (ステートレス) | 許可 | 許可 |
セキュリティグループ (ステートフル) | 許可 | なし (自動で許可) |
ネットワークACLとセキュリティグループで、特定通信(ポート22:SSHなど)のインバンドを許可しましたが、接続できませんでした。
どの設定に問題があると考えられるでしょうか?
回答:ネットワークACLのアウトバウンドで許可設定ができていない。
最後に
ネットワークACLとセキュリティグループは、整理できないと同じようなモノと勘違いしてしまいます。
しかし、AWSでは、それぞれに違いを付けて役割を与えています。
これを整理しようとしても、AWSは用語も公式解説も独特な言い回しが多いので、理解しにくいと思います。
今回の説明では、AWS独特な言い回しは排除し、細かい説明も大胆に割愛しました。
その代わりに、IAMユーザー、IAMグループ、IAMロール、IAMポリシーの4つの概要と関係性はご理解いただけと思います。
物足りなさもあるかとお思いますが、今回の説明をきっかけにAWSへの苦手意識がなくなり、AWS利用に前向きになってもらえると幸いです。
コメント