AWSについて周りの人たちに教えていると必ず一回は「繋がらないんですが、見てもらえませんか・・・」と言われる。その気持ちはよく分かる。私自身何回もサーバに繋がらないという経験をした。
この記事ではAWSでよくあるネットワーク設定の問題について原因と解決策を提示する。この記事をチェックリストとして職場でも活用してほしい。
ネットワーク設定の問題-応用編はこちら
注意ポイント
この記事ではEC2(Windows)を使ったAWSサービスを想定している。サーバレスアーキテクチャについても、調査観点、考え方は同じであるが、ご留意いただきたい。
なお、この記事に出てくる用語について全くわからないという人は、まずはこちらを参考にAWSのソリューションアーキテクトの勉強をするほうが良いと思う。AWSはクラウドサービスであり、1つ間違えると全世界にサーバを公開することになる。大事な資産を守るために勉強しよう。
- 【勉強方法】AWSソリューションアーキテクトアソシエイト試験一発合格体験記
- 【合格済】UdemyのAWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(5回分325問)は試験に合格したいなら絶対買うべき
次節からネットワーク設定について解説する。
ポイント
インフラ環境の設計・構築をある程度経験した人はピンと来ると思うが、クラウドサービスであるAWSの場合でも設計、設定のポイントはルーティングとポートだ。
AWSネットワークが繋がらない時に見るべき設定一覧
VPCフローログ
まずNW(ネットワーク)が繋がらないという原因調査をする前に、必ずVPCフローログの有効化をすること。
NWの問題については、ログがすべてである。ログがないと調査も出来ず、解決もできない。そのため、AWSでサービスを立ち上げたらまずはvpcフローログを有効化しよう。
VPCフローログを有効化するためには、以下の通り事前にCloudWatchのロググループ作成とIAMロール設定が必要になる。
- 事前にCloudWatchでロググループを作成する。
- 次にVPCからVPCフローログ作成の画面で、IAMロールの権限の設定ボタンを押す。
- デフォルト設定のまま、フローログ用のIAMロールを作成する。
- VPCフローログ作成画面に戻り、作成を押す。
- VPCフローログが作成され、CloudWatchからログを確認できるようになる。
セキュリティグループ(sg)
セキュリティグループはいわゆるIPアドレス ホワイトリストとFW(ファイアウォール)の役割を持っている。以下の観点で確認しよう。
- 意図したセキュリティグループをEC2に付与しているか
- 間違ったsgをEC2に付与していないか
また、sg内の設定を見て以下を確認しよう。
- インバウンドの接続元(IPアドレスもしくはsg)があっているか
- インバウンドの接続元指定で開放しているポートが正しいか
- アウトバウンドの接続先(IPアドレスもしくはsg)があっているか
- アウトバウンドの接続先指定で開放しているポートが正しいか
ポイント
- インバウンドとは、そのサーバを起点とした時に、来る通信のこと
- アウトバウンドとは、そのサーバを起点とした時に、出て行く通信のこと
セキュリティグループの特徴として、インバウンド通信の返り通信(応答)は、アウトバウンドに記述しなくても問題ない。暗黙的に許可されるという点がある。しかし、自分を起点として外と通信するためには、明示的にアウトバウンドを許可しないといけない。
ルートテーブル
その名の通りルートテーブルである。以下の観点で確認しよう。
- 相手先のアドレスがルートとして正しく入っているか
- ピアリングをしている場合はピアリング先が正しいか
- インターネットゲートウェイもしくはNATゲートウェイに向けて0.0.0.0が設定されているか
ポイント
0.0.0.0の宛先とは、明示的に設定されていない宛先すべてを意味する。
インターネット接続する際によく使用される設定方法である。
ACL(アクセスコントロールリスト)
こちらもその名の通りACLである。以下の観点で確認しよう。
- ルールの順序があっているか
- インバウンド、アウトバウンドの許可が両方記述されているか
下記二つの画面は設定変更をしていない、デフォルト設定の画面だ。
ポイント
ACLは上から順に評価をして、合致するものがあったらそこで処理が止まる。そのため、最初に拒否が入っていると、拒否されてしまう。
また、ACLはインバウンドとアウトバウンド両方の許可設定が必要という特徴がある。セキュリティグループは前述の通りインバウンドのみでOK。
IGW(インターネットゲートウェイ)
IGWは、VPCに付与して、ルートテーブルを介し、VPC内のEC2やサービスをインターネットに通してくれるゲートウェイだ。以下について確認しよう。
- IGWが意図したVPCに付与されているか
- ルートテーブルにIGWが設定されているか(0.0.0.0/0のこと)
- Sgのアウトバウンドでhttp80およびhttps443が開放されているか
pingが通らない(AWSのデフォルト設定だと正しい)
AWSはデフォルト設定ではpingが通らない設定であり。構築直後では、EC2に対してpingを実行しても応答がないことが正しい。その場合は以下の設定を変更すること。
- セキュリティグループにすべてのICMP通信を許可する。
- EC2にログインして、WindowsFWの設定(Windowsの場合)で、インバウンドのIPv4icompを有効化する。
ただし、インターネットに対して開放すると、全世界からのping応答を返すことになるため、sgで接続元IPアドレスを絞るなり対策が必須。
上記設定を追加することでpingが通るようになる。
tracertが通らない(AWSのデフォルト設定だと正しい)
これも上記と同じで、デフォルト設定では通信許可されていない。上記と同じ設定で通信が通るようになる。最終的には目的のIPアドレスから応答が返ってくるが、AWSは途中のNW機器でルート情報の開示を許可していないため、画面のように途中経路はタイムアウトになる。
セキュリティソフト
なんらかのセキュリティソフトをWindows EC2にインストールしている場合は、そのソフトのログをみてみよう。また、一時的にセキュリティソフトを無効化してみて通信が通るか確認することも1つの手だ。
さいごに
この記事に書いてある観点で設定を確認しても解決しない場合、次は以下の手法を取ってみよう。とりあえずサポートに聞くっていう手もありだ。
- AWSサポートに問い合わせる
- AWS Loftに行く(AWSのソリューションアーキテクト社員が対面で教えてくれる。無料)
- 担当営業に相談する
次回はネットワーク問題解決のための応用編を記事にする。