← ハンズオン一覧に戻る

AWS Hands-on / Networking

ネットワークの通信を、ログで可視化する

VPC に「フローログ」を有効化し、CloudWatch Logs へ通信の記録を送ります。実際に EC2 への通信を発生させ、許可された通信(ACCEPT)と拒否された通信(REJECT)がどう記録されるかを確かめます。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 40〜60 分 コンソール操作 + SSH を使用
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須EC2 を SSH でログインした経験があること
  • 必須セキュリティグループで通信を許可した経験があること
  • あると良い「ログにはメタデータだけが残り、通信の中身は残らない」という考え方のイメージ

コンソール操作に加えて、お使いのパソコンのターミナルから 1 回 SSH を使用します。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

「このサーバーに、どこからどんな通信が来ているのか」「拒否された通信はないか」を知りたい場面があります。サーバーの中に入って調べるだけでは、ネットワークの外側で何が起きているかまでは分かりません。

VPC フローログを有効にすると、仮想プライベートクラウド(VPC)内のネットワークインターフェースを通過する通信の記録——送信元・宛先・許可されたか拒否されたか——を残せます。今回は EC2 への通信を実際に発生させ、その記録を読み取ります。

通信の中身(内容)まで見えるの?

いいえ。フローログが記録するのは「メタデータ」(送信元・宛先の IP アドレスとポート、プロトコル、許可・拒否の結果など)で、通信の中身(送受信したデータそのもの)は記録されません。誰が・どこと話したかは分かりますが、何を話したかは分かりません。

ACCEPT と REJECT って何のこと?

セキュリティグループなどによって、その通信が許可された(ACCEPT)か拒否された(REJECT)かを示します。REJECT の記録が多ければ、意図しないアクセスが来ている可能性に気づく手がかりになります。

Goal

VPC にフローログを有効化(送付先: CloudWatch Logs)し、EC2 への通信を実際に発生させたあと、フローログのレコードからその通信の送信元・宛先・ポート・許可結果(ACCEPT / REJECT)を読み取る

04 — Architecture

つくる構成

フローログを作成する際は、記録対象(フィルタ)と送付先を選びます。送付先には CloudWatch Logs と Amazon S3 が選べますが、今回は次のように選びます。

フローログを作成 — 送信先の選択(イメージ)

送信先

CloudWatch Logs
コンソールですぐにログを読める
Amazon S3
長期保存向けだがバケットポリシーの設定が増える

今回はすぐに確認したいので CloudWatch Logs を選びます

05 — Requirements

要件

以下の要件を満たし、フローログの記録から通信の内容を読み取れることを確認してください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2VPC(既存または新規)にフローログを有効化する。フィルタは「すべて」、送信先は「CloudWatch Logs」を選ぶ。送付用の IAM ロールはコンソールの自動作成(新しいロールの作成)を使う。
3そのVPC内に EC2 を 1 台用意する(セキュリティグループは SSH(22)「マイ IP」のみ許可)。
4許可される通信(マイ IP からの SSH 接続)と、拒否される通信(許可していないポートへの接続試行など)を、それぞれ 1 回ずつ発生させる。
5CloudWatch Logs のフローログのロググループでレコードを見つけ、ACCEPT・REJECT それぞれの記録の内容を確認する。
06 — Steps

構築の進め方

「フローログを有効化する → 通信を発生させる → 記録を読む」という順番で進みます。各ステップで「なぜそうするのか」を意識しながら進めてみましょう。

  1. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  2. VPC にフローログを作成する

    VPC コンソールで対象の VPC を選び、「フローログ」タブから「フローログを作成」します。フィルタは「すべて」、送信先は「CloudWatch Logs」を選びます。

    フローログを作成(イメージ)

    フィルタ

    すべて
    許可・拒否の両方の通信を記録する
    許可のみ / 拒否のみ
    片方だけに絞って記録する

    ACCEPT と REJECT を両方確認したいので「すべて」を選びます

    IAM ロールは自動作成でよい

    フローログがログをCloudWatch Logsへ送付するには権限が必要です。「新しいロールの作成」を選べば、コンソールが必要な権限を持つ IAM ロールを自動的に用意してくれます。

  3. EC2 を 1 台起動する

    フローログを有効化した VPC 内に、EC2 インスタンスを 1 台起動します。セキュリティグループではSSH(22)「マイ IP」のみ許可します。AMI やインスタンスタイプは自由に決めて構いません(例:Amazon Linux、無料利用枠の対象タイプ)。

    キーペアの準備も忘れずに

    SSH でログインするには、起動時にキーペアを指定し、秘密鍵ファイルをダウンロードしておく必要があります。すでに作成済みのキーペアがあれば、それを使っても構いません。

  4. 許可されている通信として、SSH でログインする

    ローカルのターミナルから、起動した EC2 にSSHでログインします。鍵ファイルの権限を制限してから接続します。

    terminal — あなたのパソコン
    # 鍵ファイルを「自分だけが読める」権限にする(Mac / Linux)
    $ chmod 400 my-key.pem
    
    # ユーザー名・IP アドレスは自分の環境に置き換える
    $ ssh -i my-key.pem ec2-user@<パブリックIPアドレス>
    Windows の場合の権限設定

    Windows の PowerShell では chmod は使いません。鍵ファイルを右クリック →「プロパティ」→「セキュリティ」で、自分のユーザー以外のアクセスを外すか、AWS の公式手順「SSH を使用して接続する」を参照してください。ssh コマンド自体は同じです。

    ログインできれば、これが許可された通信(ACCEPT)として記録されているはずの操作です。

  5. 許可されていない通信として、別のポートへの接続を試す

    セキュリティグループで許可していないポート(例:8080 番など)へ向けて、ブラウザやターミナルから接続を試みます。接続が失敗すること自体が、今回確認したい内容です。

    terminal — あなたのパソコン
    # 許可していないポートへの接続を試す(失敗するのが期待される結果)
    $ curl -m 5 http://<パブリックIPアドレス>:8080
    失敗すること自体が確認したい内容

    接続がタイムアウトしたりエラーになったりするのは、セキュリティグループでそのポートが許可されていないためです。「失敗した」という結果が、次のステップで読み取る REJECT の記録に対応します。

  6. CloudWatch Logs のロググループを開く

    CloudWatch Logs コンソールを開き、ステップ 2 でフローログ作成時に指定したロググループ名を探して開きます。最新のログストリームをクリックします。

    反映には少し時間がかかる

    通信が発生してからログストリームに記録が表示されるまで、数分かかることがあります。すぐに見つからなくても、少し時間を置いてから再読み込みしてみましょう。

  7. ACCEPT と REJECT の記録を見つけて読み取る

    ログストリームの中から、ステップ 4 の SSH 接続に対応するACCEPTの行と、ステップ 5 の拒否された接続に対応するREJECTの行をそれぞれ見つけます。各レコードから送信元 IP アドレス・宛先 IP アドレス・ポート番号を読み取りましょう。

    レコードの並び方を覚えておく

    フローログの 1 行は、スペース区切りで複数の項目が並んだ形式です。「どこからどこへ、どのポートで、結果はどうだったか」という順序を意識すると、読み取りやすくなります。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。

Pitfall 01 — ログが何も出てこない

「ロググループを開いても、ログストリームや記録が見当たらない」

よくある原因がいくつかあります。①反映までに数分かかることがあるので、少し時間を置いて再読み込みしたか②IAM ロールの作成に失敗していないか(フローログの「ステータス」を確認)、③フィルタが「すべて」になっているかを順に見直してみましょう。

Pitfall 02 — REJECT の記録が見つからない

「ACCEPT は見つかるのに、REJECT がどこにもない」

拒否されるはずの通信を、実際に発生させていない可能性があります。許可していないポートに向けて、本当に接続を試みたかを確認しましょう。また、セキュリティグループではなく OS 側のファイアウォールで止まっている場合、セキュリティグループの段階では通信が許可されてしまい、REJECT として記録されないこともあります。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。VPC コンソールと CloudWatch Logs コンソールを開いて、次を順に確かめましょう。

  • VPC の「フローログ」タブで、作成したフローログの状態が「Active」になっている。
  • CloudWatch Logs に、対応するロググループが作成されている。
  • ログストリームのレコードの中に、ACCEPT の行がある。
  • ログストリームのレコードの中に、REJECT の行がある。
  • 各レコードで、送信元 / 宛先 IP アドレスとポート番号が読み取れる。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. フローログには通信の中身が記録されないことは、何のために役立ち、何の限界になるでしょうか。
    ヒント
    中身が記録されないことは、プライバシーやセキュリティの観点では安心材料になりますが、「何の問題が起きたか」を調べる際には、メタデータだけでは分からないこともあります。何が分かり、何が分からないかを整理してみましょう。
  2. REJECT の記録が急に増えたら、何が起きていると考えられるでしょうか。
    ヒント
    意図しない第三者からのアクセスの試行(ポートスキャンなど)が増えている可能性があります。また、自分たちのアプリケーション側の設定ミスで、本来許可されるべき通信が拒否されてしまっている可能性も考えられます。両方の見方から考えてみましょう。
  3. 今回は VPC 全体を対象にしましたが、特定のサブネットやネットワークインターフェースだけを対象にすることもできます。対象を絞ることのメリット・デメリットは何でしょうか。
    ヒント
    対象を絞ると、ログの量が減り、確認や保存のコストを抑えられます。一方で、絞った範囲の外で起きている通信は記録されなくなります。「見たい範囲」と「ログの量」のバランスから考えてみましょう。
10 — Clean up

後片づけ

作ったものを片づけるところまでが一連の流れです。フローログと EC2 のどちらも、有効・起動している間は記録や料金が発生し続けるため、確認が終わったら片づけましょう。

  1. フローログを無効化する:VPC コンソールの「フローログ」タブで、作成したフローログを選び削除する。
  2. CloudWatch Logs のロググループを削除する:CloudWatch Logs コンソールで、対応するロググループを選び削除する。
  3. EC2 を終了する:EC2 コンソールの「インスタンス」で、起動したインスタンスを選び「インスタンスを終了(Terminate)」する。
  4. セキュリティグループを削除する(他で使っていなければ):このハンズオン用に新しく作成したセキュリティグループを削除する。
Caution — 既存の VPC やデフォルトリソースは消さない

削除するのは、このハンズオンで自分が作ったものだけ

既存の VPC にフローログを有効化した場合、VPC 自体は削除しないでください。フローログ・ロググループ・EC2・セキュリティグループのうち、このハンズオンのために作成したものだけを選んで片づけましょう。デフォルト VPC も削除しないようにしましょう。

コストに関する注意: VPC フローログの機能自体に追加料金はかかりませんが、送信先であるCloudWatch Logs へのログの取り込み・保存量に応じた料金が発生します。記録量はトラフィック量に比例して増えるため、検証が終わったらフローログを無効化するか、ロググループの保持期間を短くすることを検討してください。また、EC2 インスタンス 1 台分の料金も起動している間発生します(無料利用枠の対象タイプであれば、範囲内に収まることが多いです)。使い終えたら、上の「後片づけ」で必ず片づけておきましょう。