AWSセキュリティグループで安全な環境を構築!設定方法や料金も解説
AWS運用を行う人であれば、AWSセキュリティグループを設定したことがあるという人は多いでしょう。しかし、セキュリティグループに関して、正しく理解し正しい設定を行っている人は少ないです。
この記事では、AWSセキュリティグループの概要解説やルール作成の注意点を解説します。セキュリティグループ作成の手順も解説しますので、ぜひ参考にしてください。
AWSセキュリティグループとは?
AWSセキュリティグループとは、VPC(Amazon Virtual Private Cloud)と呼ばれるAWS上に作成できるプライベート仮想ネットワーク空間上で、トラフィック制御を行うためのファイアウォールのことです。
VPC内に配置したEC2やデータベースなどのインスタンスの中には、企業の重要なデータが含まれています。AWSセキュリティグループは、これらのインスタンスに対して、入出力のトラフィックを制御し、許可された通信のみを通過させることでセキュリティを確保します。
同一のセキュリティグループを複数のインスタンスに割り当て可能なため、セキュリティ管理の一元化が可能となり、管理者の手間が減るため、AWSを運用するうえで欠かせないサービスです。
AWSセキュリティグループの料金
AWSセキュリティグループの利用料金は無料です。セキュリティグループ自体に直接料金はかかりませんが、関連するAWSサービス(EC2インスタンスやデータベース、データ転送など)の利用料金は発生します。
セキュリティグループルールの制限
- 同一リージョンに作成できるVPCの数:5
- 同一VPC内に作成できるセキュリティグループの数:500
デフォルトでは、上記の制限が設けられていますが、クォータの引き上げをリクエストすることで、上限の緩和が可能です。ただし、リージョン内の Amazon VPC の数に Amazon VPC あたりのセキュリティグループ数を掛けた値は 5,000 を超えてはいけないというルールが設けられているため注意が必要です。
また、セキュリティグループ内にルールを作成可能ですが、1つのEC2インスタンス(ネットワークインターフェイス)に割り当てることができるセキュリティグループのルール数の合計は1,000が上限とされています。
AWSセキュリティグループが必要な理由
セキュリティグループによって、インスタンスへの入出力されるトラフィックを細かく制御することで、インスタンスのセキュリティを確保することができます。
- 不正なアクセスからの保護
- ネットワークのセグメンテーション
- セキュリティポリシーの一元管理
- 最小権限の原則の実現
すべてのWebサーバーに同じセキュリティグループを設定することで、セキュリティ設定の変更を効率的に行うことができます。そして、特定のIPアドレスやポートからのアクセスのみを許可し、外部からの不正アクセスを防ぐことが可能です。
また、ネットワークセグメンテーションにより、データベースサーバーとWebサーバーを異なるセキュリティグループに属させることで、データベースサーバーへの直接的なアクセスを制限できます。
セキュリティグループが必要なAWSサービス
AWSのセキュリティグループの割当が可能なサービスは、以下のサービスです。
- Amazon EC2 インスタンス
- AWS Lambda
- AWS Elastic ロードバランサー
- データベース(Amazon RDS、Amazon Redshift)
- ElastiCache
- Elastic Beanstalk
- Elastic MapReduce
- コンテナ、Kubernetes サービス(ECS、EKS)
これらのサービスに同一のセキュリティルールを設けられるため、設定の手間や管理の手間が削減できるでしょう。
AWSセキュリティグループとネットワークACLの違い
項目 | セキュリティグループ | ネットワークACL |
割当可能なリソース | インスタンス | サブネット |
ルール | ステートフル | ステートレス |
デフォルト設定 | すべての通信を拒否 | すべての通信を許可 |
AWSセキュリティグループとネットワークACLの大きな違いは、上記表の3つです。まず、セキュリティグループはEC2やデータベースなどのインスタンスが割り当てる対象ですが、ACL(アクセスコントロールリスト)は、サブネットに対して割り当て可能で、サブネットのトラフィック制御を行います。
「ステートフル」と「ステートレス」は、システムや通信が過去の状態を「覚えているか」「覚えていないか」を表す概念です。ステートフルは、インバウンド通信の設定を行うだけでアウトバウンドの設定も自動的に設定されます。一方、ステートレスは状態が記憶されないため、ACLでインバウンド、アウトバウンド両方の通信を制御する場合は、両方の設定を行う必要があります。
最後に、デフォルト設定についても大きな違いがあります。セキュリティグループは、全ての通信を拒否するゼロトラストの考え方を元にしていますが、ACLはデフォルトでは全て許可する設定です。デフォルトのままセキュリティグループをインスタンスに割り当てた場合は、一切通信ができないため注意しましょう。
セキュリティグループルールの構成要素
AWSセキュリティグループでは、インスタンスに対してトラフィックルールを設定し、制御が可能です。ここでは、ルールの主な構成要素について解説します。
タイプ
どのプロトコル、ポート範囲の通信について制御するか選択します。
- すべてのTCP
- すべてのUDP
- SSH
- HTTP
などの選択項目があり、「タイプ」を選択することで、この後紹介するプロトコルやポート範囲が自動で選択されます。
プロトコル
許可または拒否する通信のプロトコルを指定します。よく使用されるプロトコルは以下の3種類です。
- TCP
- UDP
- ICMP
TCPはWebアクセスやSSH接続などに使用され、UDPはDNSやストリーミングに使われます。ICMPはネットワーク診断に役立つプロトコルで、通信の性質に応じて適切なプロトコルを選択することが重要です。
ポート範囲
ポート番号とは、通信に使用されているプログラムを識別するための番号のことです。SSHは22番、HTTPは80番などあらかじめ番号が割り振られているものもあります。
セキュリティグループルール設定時、ポート範囲を指定することで指定された範囲内のポートでのみ通信を許可するよう設定できます。セキュリティ強化のために、必要最低限のポートを開放するようにしましょう。
ソースまたは送信先
ソース、送信先を指定することで、どのIPアドレスの通信に対して制御をかけるかを設定できます。
- カスタム
- 全てのIPv4
- 全てのIPv6
- my IP
上記4項目から選択でき、カスタムを選択すると自由にIPアドレスの指定ができます。
説明-オプション
セキュリティグループのルール作成時に説明やメモを残す場合に使用します。数字、アルファベット、スペース、特定の記号が利用可能で、255文字以内で自由にコメントできます。
【ユースケース別】セキュリティグループの設定例
セキュリティグループは、AWS EC2インスタンスのトラフィックを管理するために不可欠です。ここでは、ユースケースに応じた具体的な設定例を紹介します。
- webサーバー
- データベースサーバー
- 外部PCからの接続
- DNSサーバー
- ELB(Elastic Load Balancer)
上記のセキュリティグループ設定について、どのようなルールが適用されるべきかを説明します。
Webサーバールール
Webサーバーに対するセキュリティグループルールでは、一般的にHTTPとHTTPSのトラフィックを許可する必要があります。具体的には、ポート80(HTTP)とポート443(HTTPS)へのインバウンドトラフィックを全てのIPアドレス(0.0.0.0/0)から許可します。
この設定により、インターネット上のユーザーがWebサイトにアクセスできるようになります。
データベースサーバールール
データベースサーバーは、通常外部からの直接アクセスを制限し、アプリケーションサーバーのみがアクセスできるように設定します。
例えば、MySQLの場合はポート3306、PostgreSQLの場合はポート5432を開放し、許可するIP範囲はアプリケーションサーバーのセキュリティグループのCIDRブロックに限定します。これにより、不正アクセスを防ぎ、データベースのセキュリティを強化できます。
外部PCからAWS EC2への接続ルール
外部のPCからEC2インスタンスにSSH接続(Linux)やRDP接続(Windows)を行う場合、セキュリティグループで特定のポートを許可する必要があります。
Linuxではポート22(SSH)、Windowsではポート3389(RDP)を開放し、アクセス元のIPアドレスを固定IPまたは許可したいIP範囲に限定します。これにより、外部からの安全なリモート管理が可能になります。
DNS サーバールール
DNSサーバーに対するセキュリティグループルールでは、DNSリクエストを受けるためにUDPポート53を許可する必要があります。さらに、必要に応じてTCPポート53も開放し、DNSゾーン転送などをサポートします。
送信元は特定のクライアントのIPアドレスやCIDRブロックに制限することで、DNSサーバーへの不要なアクセスや攻撃を防ぎ、安定した名前解決サービスを提供できます。
ELBルール
Elastic Load Balancer(ELB)のセキュリティグループ設定では、HTTP(ポート80)やHTTPS(ポート443)のインバウンドトラフィックを、ELBが処理する範囲で許可します。
さらに、ELBがバックエンドインスタンスにリクエストを転送できるようにするため、該当するインスタンスのセキュリティグループでは、ELBのIP範囲からのトラフィックを許可する設定が必要です。
AWSセキュリティグループ設定時の注意点
AWSセキュリティグループを適切に設定することは、システムの安全性を確保する上で非常に重要です。しかし、設定が適切でない場合、セキュリティリスクが生じる可能性があります。以下では、セキュリティグループを設定する際に留意すべきポイントについて解説します。
セキュリティグループの作成は必要最小限にする
セキュリティグループの作成は、運用管理をシンプルに保つために必要最小限に抑えることが推奨されます。過剰にグループを作成すると管理が煩雑になり、設定ミスや不要なルールが混在するリスクが高まります。用途ごとにセキュリティグループを作成し、重複を避けつつ、明確なルールセットを維持することで、管理の効率とセキュリティの両方を向上させることが可能です。
アクセスできるIPアドレス範囲も必要最小限にする
セキュリティグループでは、インバウンドおよびアウトバウンドのトラフィックにおけるアクセス元・先のIPアドレス範囲を指定できます。この範囲はできる限り限定し、特定のIPアドレスやネットワークのみにアクセスを許可することで、不要なトラフィックや潜在的な攻撃からシステムを保護できます。特に、外部からのアクセスには、IPアドレスを厳密に管理することが重要です。
必要なポートのみ開放する
セキュリティグループでは、指定したポートだけを開放し、それ以外のトラフィックをブロックすることが推奨されます。例えば、ウェブサーバーの場合はポート80と443のみを開放し、SSH接続にはポート22を開放するなど、利用するサービスに応じたポートを最小限に抑えることが重要です。不要なポートを開放すると、攻撃者による侵入リスクが増加するため、常に最低限のポートのみを許可する方針が必要です。
AWSセキュリティグループの作成・変更は特定のユーザーのみにする
セキュリティグループの作成や変更は、IAMポリシーを使用して特定の権限を持つユーザーに限定しましょう。アクセス権を持つユーザーを最低限に絞ることで、管理者の把握できない変更が行われるリスクを減少させ、セキュリティ体制を強化できます。
セキュリティグループの設定方法
AWSセキュリティグループを正しく設定することで、不正アクセスの防止や通信の管理が可能になります。最後に、セキュリティグループの作成、リソースへの紐づけ、および設定変更の手順を説明します。
AWSセキュリティグループを作成する
セキュリティグループは以下のステップで作成できます。
- AWSマネジメントコンソールにログイン
- 検索ボックスでEC2を検索し、EC2のダッシュボードにアクセス
- 左側のナビゲーションメニューから「セキュリティグループ」を選択
- 画面上部の「セキュリティグループを作成」をクリック
- セキュリティグループの名前と説明を入力する。
(わかりやすい名前を付けることで、後の管理がしやすくなります。)
セキュリティグループが属するVPCを選択
- インバウンドルールとアウトバウンドルールを設定
- 全ての設定が完了したら、「作成」をクリック
AWSセキュリティグループをリソースに紐づける
セキュリティグループを作成した後、作成したセキュリティグループを下記手順でAWSリソースに紐づけます。
- EC2インスタンスの作成時:セキュリティグループを選択する画面が表示されます。ここで、作成済みのセキュリティグループを指定するか、新たに作成することができます。
- すでに稼働しているEC2にセキュリティグループを追加または変更する場合:インスタンスの詳細ページにアクセスし、「セキュリティグループの変更」オプションから適切なグループを選択できます。
- RDSやELBにセキュリティグループを紐づける場合:各リソースの作成時や設定画面で、該当のセキュリティグループを指定します。
AWSセキュリティグループの設定を変更する
セキュリティ要件の変化や新しいトラフィック要件が発生した場合、セキュリティグループの設定を変更することが可能です。セキュリティグループの編集は、EC2ダッシュボードの「セキュリティグループ」から行います。
- 変更したいセキュリティグループを選択し、「インバウンドルール」または「アウトバウンドルール」タブで「ルールの編集」をクリック
- 新しいルールを追加したり、不要なルールを削除するなど、希望する設定に変更を行う
- 変更が完了したら、「保存」をクリックして新しい設定を適用(即座にセキュリティグループが更新され、関連するリソースに反映されます。)
セキュリティグループの設定変更は即座に適用されるため、特に慎重に行うことが重要です。
まとめ
AWSセキュリティグループは、AWS上で動作するインスタンスを守るための重要な機能です。正しい設定と管理を行うことで、不正アクセスを防ぎ、システム全体のセキュリティを向上させることができます。常にベストプラクティスに従い、定期的に設定を見直すことで、最新の脅威にも対応できる環境を整えることが重要です。
この記事を参考にして、セキュリティグループに関して知識を深め、企業の重要なデータを守るためのセキュリティ強化に活かしていきましょう。