VPCフローログの取得方法（CloudWatch Logsに保存）

AWSを利用する際に、ネットワークにうまく接続できない等のトラブルシューティングをするためのツールとして、VPCフローログがあります。便利なのですが使い方をよく忘れるのでまとめておきます。

## ロググループの作成
CloudWatchコンソールより、ロググループを作成します。
ログの容量に応じて保管費用が掛かるため、適切な保持期間を設定しておくとよいです。

## IAMの作成

以下のページに記載があるのですが、分かりにくいので画像付きで説明します。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs-cwl.html

まず、IAMコンソールを開き、左側のメニューからロールを開きます。上部にあるロールの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/533ddab9-ff1e-682b-8356-95d17bd6eaf5.png)

AWSサービス→EC2の順に選択し、次のステップ：アクセス権限をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/f3b1d13b-e66d-09b4-cfca-19a8e8e56388.png)

続けて、**次のステップ：タグ**、**次のステップ：確認**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/467e9402-0a64-95b1-666a-4282dedd2648.png)

ロール名を入力して、ロールの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/a6a1a6e5-cbf8-3193-1e9a-d337218c2fbb.png)

作成したロールをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/f4902338-ef8a-7f44-720d-19185974c4e7.png)

インラインポリシーの追加をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/b72e4825-c376-27a4-da5c-7d5e0f6a6c3f.png)

タブからJSONを選択し、以下のように記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/e027f7e7-b897-cc1b-4f83-bbad8fd704bc.png)

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}     
```
ポリシー名を入力して、ポリシーの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/83f7ed64-8ced-506a-617f-73adfa4dd630.png)

次に、信頼関係のタブより、信頼関係の編集をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/49e89cff-8ad8-3547-8ffd-87d433fb5dca.png)

表示されているポリシーを以下に書き換えます。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
} 
```
信頼されたエンティティの欄が、`vpc-flow-logs.amazonaws.com`になっていれば設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/e5f56566-b728-c942-0c6d-4e2ad5618b20.png)

## フローログの設定(VPC単位)
VPCコンソールより、フローログを設定したいVPCを選択し、フローログタブからフローログの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/a7f2309e-a350-ffc2-b729-6dff8fb2d66f.png)

フローログの設定を実施します。私は以下の設定をよく使用しています。フィルタのデフォルト値が「承諾」であるため、すべてのログを取得したい場合は変更が必要なので気をつけてください。

- フィルタ：すべて
- 最大集約間隔：1分
- 送信先：CloudWatch Logsに送信
- 送信先ロググループ：先ほど作成したロググループ
- IAMロール：先ほど作成したIAMロール
- ログレコード形式：AWSのデフォルト形式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/f7f59a50-3cc2-f310-caf0-e5442f8cb44e.png)

フローログを作成をクリックすると、フローログの取得が始まります。

## フローログの設定(ネットワークインターフェース単位)
フローログはネットワークインターフェース単位でも取得できます。EC2コンソールより、フローログを取得したいネットワークインターフェースを選択し、フローログタブからフローログの作成をクリックします。設定値はVPC単位で設定する際と同じであるため、省略します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/a434df9d-af69-148f-b47c-a412a463df14.png)

## 取得したフローログの確認
フローログを確認する際は、先ほど作成したロググループにアクセスします。ネットワークインターフェース単位で表示が分かれるため、事前にインターフェースIDを確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/a0c0b92a-8ebf-76ae-a64f-fdc17eca95b9.png)

## フローログの取得を停止
フローログの取得を停止する場合は、フローログの作成した画面からアクションをクリックし、フローログを削除をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/8b22f59c-b4b7-2ea3-3e1c-f01bf518cb86.png)