ネットワーク(Network)

【AWS】CloudFormationでネットワーク作成とVPC FlowLogsによる通信ログの確認

どうも、AWS勉強中のとがみんです。

この記事ではCloudFromationを使って、VPCとサブネット、インターネットゲートウェイ、ルートテーブルを作成し、作成したネットワークにEC2インスタンスを配置しSSH接続をして、その通信情報をVPCフローログにより確認します。

今回作成するもの

下記の図のネットワークを構成します。VPCにサブネットを一つ作成し、インターネットとの通信を可能にするためにインターネットゲートウェイを作成します。

また、インターネットゲートウェイから、サブネットへのルートを設定したルートテーブルを作成します。

作成したサブネットにEC2インスタンスを配置し、SSH接続を行い、VPCフローログを活用し、IPトラフィックのログを確認します。

作業手順概要

  1. serverless.ymlに各種リソースを作成しデプロイ
  2. EC2インスタンスを作成しSSH接続の実施
  3. VPCのFlowLogをCLoudWatchで確認

作業詳細

serverless.ymlに各種リソースを作成しデプロイ

作成したserverless.ymlのファイルは以下のGithubに上げています。
sls deployのコマンドを実行することで、各種リソースが作成されます。

それぞれのコードの詳細について簡単に整理していきます。

ネットワークの構築

VPC

VPCはAWSアカウント内に構築できる仮想ネットワークで、論理的に分離されたネットワークを構築することができます。Cidrは10.0.0.0/16に設定しているので、65,536個のIPアドレスがVPC内で使用できます。

Amazon Virtual Private Cloud (Amazon VPC)
AWS::EC2::VPC

InternetGateway

インターネットゲートウェイは、VPCとインターネットの通信を可能にするためのものです。
今回はローカルのPCからEC2に接続できるようにするため、インターネットゲートウェイを作成します。

Connect to the internet using an internet gateway
AWS::EC2::InternetGateway

InternetGatewayAttachment

インターネットとVPCの接続を可能にするために、インターネットゲートウェイとVPCを接続します。
接続するインターネットゲートウェイとVPCをInternetGatewayIdVpcIdで指定しています。

AWS::EC2::VPCGatewayAttachment

Subnet

作成したVPCに所属させた10.1.0.0/24のサブネットを作成します。
VPC のサブネット
AWS::EC2::Subnet

RouteTable

ルートテーブルは、パケット情報がどこへ向かえば良いかを定義したものになります。
作成したVPCのためのルートテーブルを作成します。

Configure route tables
AWS::EC2::RouteTable

Route

作成したルートテーブルにルートを追加します。
インターネットに抜けられるように、ルートを設定します。

AWS::EC2::Route

SubnetRouteTableAssociation

ルートテーブルへサブネットを関連付けます。
サブネットがインターネットへ抜けられるようになります。

フローログの作成

VPC FlowLogs IAM Role

CloudWatchにログを書き込むための権限を作成します。

VPC FlowLogs LogGroup

ロググループを作成します。

FlowLog

VPCのネットワークインターフェースとの間で行き来するIPトラフィックに関する情報をキャプチャできるようにします。
出力するログのフォーマットには、VPCのIDやサブネットID、インスタンスIDに加えて、送信元のIPアドレスや、送信先のIPアドレス、送信元ポート番号や送信先ポート番号、通信プロトコルや、その通信が受信されたか拒否されたか等の情報を出力するように設定しています。

VPC フローログを使用した IP トラフィックのログ記録

セキュリティグループの作成

EC2インスタンスに付与するセキュリティグループを作成します。
今回はEC2インスタンスに対してSSH接続を行うため、SSHのみを許可するセキュリティグループを作成します。

AWS::EC2::SecurityGroup

EC2インスタンスを作成しSSH接続の実施

作成したVPC内のサブネットにEC2インスタンスを作成します。
AWSのコンソールからEC2を立ち上げる設定画面のネットワークにて設定します。

パブリックIPを自動で割り当てられるようにし、
また、作成したセキュリティグループを付与しています。

作成後、EC2インスタンスに対して、SSH接続を実施します。

$ ssh ec2-user@xx.xxx.xxx.xxx -i ec2-test.pem

EC2インスタンスに対するSSH接続に関しては下記の記事にまとめています。

VPCのFlowLogをCloudWatchのログで確認

自分のPCでcurl ipecho.net/plain; echoのコマンドを実行し、グローバルIPアドレスを確認します。

$ curl ipecho.net/plain; echo
xxx.xxx.xx.xxx

確認したIPアドレスを、CloudWatchのログで検索すると、自分のPCからSSH接続した時の通信ログが確認できます。

まとめ

VPCネットワークを構築し、EC2インスタンスを配置し、SSH接続の通信ログを確認しました。