EC2 インスタンスでウェブサイトをホストしています。HTTP (80) または HTTPS (443) への接続をユーザーに許可するにはどうすればよいですか?
最終更新日: 2022 年 9 月 26 日
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでウェブサイトをホストしています。ユーザーが HTTP (ポート 80) または HTTPS (ポート 443) で自分のウェブサイトに接続できるようにしたいと考えています。どうすればそれができますか?
解決方法
ポート 80 および 443 のトラフィックを許可するには、関連付けられたセキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) を設定する必要があります。
セキュリティグループのルール
HTTP トラフィックの場合は、送信元アドレス 0.0.0.0/0 からのポート 80 のインバウンドルールを追加します。
HTTPS トラフィックの場合は、送信元アドレス 0.0.0.0/0 からのポート 443 のインバウンドルールを追加します。
これらのインバウンドルールによって、IPv4 アドレスからのトラフィックが許可されるようになります。IPv6 トラフィックを許可するには、送信元アドレス ::/0 から同じポートでインバウンドルールを追加します。セキュリティグループの作成または変更の詳細については、「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。
セキュリティグループはステートフルであるため、インスタンスからユーザーへのリターントラフィックは自動的に許可されます。セキュリティグループのアウトバウンドルールを変更する必要はありません。
注: 次の例は、TCP ポート 80 (HTTP) および 443 (HTTPS) で IPv4 および IPv6 トラフィックを許可するセキュリティグループルールを示しています。インスタンスにログインするための SSH や RDP など、トラフィックの他のソースをユースケースのために許可する必要があるかどうかを判断します。その後、必要なトラフィックを許可するための適切なインバウンドルールが SG にあることを確認します。
インバウンドルール
タイプ | プロトコル | ポート範囲 | 送信元 |
HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 |
HTTP (80) | TCP (6) | 80 | ::/0 |
HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 |
HTTPS (443) | TCP (6) | 443 | ::/0 |
ネットワーク ACL
デフォルトのネットワーク ACL では、すべてのインバウンドおよびアウトバウンドの IPv4 トラフィックが許可されます。ユーザーが IPv6 経由で接続し、Amazon Virtual Private Cloud (Amazon VPC) に IPv6 CIDR ブロックが関連付けられている場合は、デフォルトのネットワーク ACL でも、すべてのインバウンドおよびアウトバウンド IPv6 トラフィックを許可するルールが自動的に追加されます。ただし、より制限されたルールでカスタムネットワーク ACL を使用する場合は、ポート 80 および 443 でトラフィックを明示的に許可する必要があります。
ネットワーク ACL はステートレスであるため、インバウンドルールとアウトバウンドルールの両方を追加して、ウェブサイトへの接続を許可する必要があります。ネットワーク ACL ルールの変更の詳細については、「ネットワーク ACL を使用してサブネットへのトラフィックを制御する」を参照してください。
注: 次の例は、TCP ポート 80 (HTTP) および 443 (HTTPS) でトラフィックを許可するカスタムネットワーク ACL を示しています。ネットワーク ACL は、単一の EC2 インスタンスだけでなく、サブネット全体のすべてのリソースに適用されます。設定例では、宛先ポート 80 と 443 を除いて、同じサブネット内のリソースとの間で送受信されるすべてのトラフィックがブロックされます。インスタンスにログインするための SSH や RDP など、トラフィックの他のソースをユースケースのために許可する必要があるかどうかを判断します。その後、必要なトラフィックを許可するための適切なインバウンドルールがあることを確認します。
インバウンドルール
ルール # | タイプ | プロトコル | ポート範囲 | 送信元 | 許可/拒否 |
100 | HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 | ALLOW |
101 | HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 | ALLOW |
102 | HTTP (80) | TCP (6) | 80 | ::/0 | ALLOW |
103 | HTTPS (443) | TCP (6) | 443 | ::/0 | ALLOW |
* | ALL Traffic | ALL | ALL | ::/0 | DENY |
* | ALL Traffic | ALL | ALL | 0.0.0.0/0 | DENY |
アウトバウンドルール
ルール # | タイプ | プロトコル | ポート範囲 | 宛先 | 許可/拒否 |
100 | カスタム TCP ルール | TCP (6) | 1024-65535 | 0.0.0.0/0 | ALLOW |
101 | カスタム TCP ルール | TCP (6) | 1024-65535 | ::/0 | ALLOW |
* | ALL Traffic | ALL | ALL | ::/0 | DENY |
* | ALL Traffic | ALL | ALL | 0.0.0.0/0 | DENY |
接続拒否エラーのトラブルシューティング
接続拒否エラーとは、接続リクエストがインスタンスにルーティングされているが、指定されたポートのサービスから受信されていないことをいいます。ホスト A がホスト B への TCP 接続を開始し、接続拒否エラーを受け取った場合、そのエラーは次のことを意味します。
- まず、ホスト A はホスト B に TCP SYN パケットを送信しました。
- その後、ホスト B はホスト A に応答して TCP RST パケットを送信しました。
セキュリティグループとネットワーク ACL で TCP ポート 80 と 443 を許可した後でも、このエラーが発生した場合は、次をトラブルシューティングします。
- httpd (Apache) などのサービスデーモンが実行していないか、停止状態である。
トラブルシューティングするには、EC2 インスタンスでサービスが実行中状態になっているかどうかを確認します。
- サービスが間違ったポートでリッスンしている。
トラブルシューティングするには、EC2 インスタンスが必要な TCP ポート (80/443) でリッスンしているかどうかを確認します。
- ポートはファイアウォールによってブロックされています。
トラブルシューティングするには、EC2 インスタンスの OS レベルのファイアウォールが、必要なポートで着信 TCP トラフィックをブロックしていないかどうかを確認します。