CloudFormationを使ってVPCフローログを設定し出力先をS3に設定する

#はじめに
本記事では、AWS CloudFormation管理コンソールを使って、VPCフローログの設定をし、出力先をS3に設定する手順を説明しています。（初心者向け）

本記事で掲載しているテンプレートの最新版は、下記に置いてます。
https://github.com/okubo-t/aws-cloudformation

出力先をCloudWatchLogsに設定する手順は、下記を参照して下さい。
[CloudFormationを使ってVPCフローログを設定する]
(https://qiita.com/okubot55/items/8821b70408dd00c22dae)

#構成図
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/54e4951b-9fcd-0594-7320-377ed09654c2.png" width=50%>

#前提条件
下記の記事の構築手順で、VPCを構築していること。
[CloudFormationを使ってVPCを構築する]
(https://qiita.com/okubot55/items/b18a5dd5166f1ec2696c)

PJPrefixの値は、同一にすること。

#構築手順
１ AWS CloudFormation管理コンソールから、スタックの作成をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/e0c3e7c3-f478-18c7-2dc2-7e669d1b399d.png"　 width=50%>

２ 後述のテンプレートを選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/060a4709-622a-2394-de5f-ac2103045137.png"　 width=50%>

３ 各パラメータを入力します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/f806cb32-9ebc-8457-116a-0d700b634a9e.jpeg"　 width=50%>

|パラメータ名|用途|備考|
|:---|:---|:---|
|スタックの名前|テンプレートから作成するリソース一式の名前|例　prd-stack-vpc-20180801|
|PJPrefix|構築するプロジェクトの環境を識別するために各コンポーネントの先頭に付与する識別子|例 qiita-prd|
|Filter|フローログのトラフィックタイプ<br>許可されたログのみ出力する場合は、<font color="Red">ACCEPT</font><br>拒否されたログのみ出力する場合は、<font color="Red">REJECT</font><br>全てのログを出力する場合は、<font color="Red">ALL</font>|ALLデフォルト）|

4 後続は、デフォルトのまま次へ次へで、作成します。

５ 状況が CREATE COMPLETEになれば、VPCフローログの設定とフローログ出力用のS3バケットの作成が完了です。バケットポリシーも自動で設定されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/f919b748-e62b-9f47-0eed-a3ab499405f0.png"　 width=50%>

6 VPCの管理コンソール上からも、設定されていることを確認できます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/283246/60a0b1dd-6001-7783-fe75-8b34c0e2f0c4.jpeg"　 width=70%>

#テンプレート
```vpcflowlogs-s3.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: 
  VPCFlowLogs Settings (Destination Type is S3)

Metadata: 
  "AWS::CloudFormation::Interface": 
    ParameterGroups: 
      - Label: 
          default: "Project Name Prefix"
        Parameters: 
          - PJPrefix
      - Label: 
          default: "VPCFlowLogs Configuration (Destination Type is S3)"
        Parameters: 
          - Filter

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------# 
Parameters:
  PJPrefix:
    Type: String

  Filter:
    Type: String
    Default: ALL
    AllowedValues: [ ALL, ACCEPT, REJECT ]

Resources:
# ------------------------------------------------------------#
#  S3 Bucket for VPCFlowLogs
# ------------------------------------------------------------#        
#FlowLogsBucket
  FlowLogsBucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Sub "${PJPrefix}-vpcflowlogs"

# ------------------------------------------------------------#
#  VPCFlowLogs
# ------------------------------------------------------------# 
  VPCFlowLogs:
    Type: "AWS::EC2::FlowLog"
    DependsOn: FlowLogsBucket
    Properties:
      LogDestination: !Sub "arn:aws:s3:::${FlowLogsBucket}"
      LogDestinationType: s3
      ResourceId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
      ResourceType: "VPC"
      TrafficType: !Ref Filter

# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------# 
Outputs:
#FlowLogsBucket
  FlowLogsBucket:
    Value: !Ref FlowLogsBucket
    Export:
      Name: !Sub "${PJPrefix}-vpcflowlogs"
```