はじめに
本記事では、AWS CloudFormation管理コンソールを使って、VPCフローログを設定する手順を説明しています。(初心者向け)
本記事で掲載しているテンプレートの最新版は、下記に置いてます。
https://github.com/okubo-t/aws-cloudformation
出力先をS3に設定する手順は、下記を参照して下さい。
CloudFormationを使ってVPCフローログを設定し出力先をS3に設定する
[https://qiita.com/okubot55/items/fbb1ae40bd8104958102]
構成図

前提条件
下記の記事の構築手順で、VPCを構築していること。
[CloudFormationを使ってVPCを構築する]
(https://qiita.com/okubot55/items/b18a5dd5166f1ec2696c)
PJPrefixの値は、同一にすること。
VPCフローログのS3バケットへの出力は、CloudFormationが対応していないため、出力先には、CloudWatchLogsしか設定できません。(2018.08.24時点)
出力先をS3に設定する手順は、下記を参照して下さい。
CloudFormationを使ってVPCフローログを設定し出力先をS3に設定する
[https://qiita.com/okubot55/items/fbb1ae40bd8104958102]
構築手順
1 AWS CloudFormation管理コンソールから、スタックの作成をクリックします。
パラメータ名 | 用途 | 備考 |
---|---|---|
スタックの名前 | テンプレートから作成するリソース一式の名前 | 例 prd-stack-vpc-20180801 |
PJPrefix | 構築するプロジェクトの環境を識別するために各コンポーネントの先頭に付与する識別子 | 例 qiita-prd |
Filter | フローログのトラフィックタイプ 許可されたログのみ出力する場合は、ACCEPT 拒否されたログのみ出力する場合は、REJECT 全てのログを出力する場合は、ALL |
ALLデフォルト) |
RetentionInDays | フローログの保持日数 下記の日数から選択できます。 1日、3日、5日、7日、14日、30日、60日、90日、120日、150日、180日、365日、400日、545日、731日、1827日、3653日 |
30日(デフォルト) |
4 後続は、デフォルトのまま次へ次へで、作成します。
作成する前に、下記のチェックをつけること
AWS CloudFormation によってカスタム名のついた IAM リソースが作成される場合があることを承認します。
5 状況が CREATE COMPLETEになれば、VPCフローログの設定が完了です。
テンプレート
AWSTemplateFormatVersion: "2010-09-09"
Description:
VPCFlowLogs Settings
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "Project Name Prefix"
Parameters:
- PJPrefix
- Label:
default: "VPCFlowLogs Configuration (Destination Type is CloudWatchLogs)"
Parameters:
- Filter
- RetentionInDays
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
PJPrefix:
Type: String
Filter:
Type: String
Default: ALL
AllowedValues: [ ALL, ACCEPT, REJECT ]
RetentionInDays:
AllowedValues: [ 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653 ]
Type: Number
Default: 30
Resources:
# ------------------------------------------------------------#
# IAM Role for VPCFlowLogs
# ------------------------------------------------------------#
VPCFlowLogsIAMRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub "${PJPrefix}-vpcflowlogs-role"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- "vpc-flow-logs.amazonaws.com"
Action:
- "sts:AssumeRole"
Policies:
- PolicyName: !Sub "${PJPrefix}-vpcflowlogs-policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
- "logs:DescribeLogGroups"
- "logs:DescribeLogStreams"
Resource: "*"
# ------------------------------------------------------------#
# LogGroup
# ------------------------------------------------------------#
LogGroup:
Type: "AWS::Logs::LogGroup"
Properties:
LogGroupName: !Sub "${PJPrefix}-vpcflowlogs-group"
RetentionInDays: !Ref RetentionInDays
# ------------------------------------------------------------#
# VPCFlowLogs
# ------------------------------------------------------------#
VPCFlowLogs:
Type: "AWS::EC2::FlowLog"
Properties:
DeliverLogsPermissionArn: !GetAtt VPCFlowLogsIAMRole.Arn
LogGroupName: !Ref LogGroup
ResourceId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
ResourceType: "VPC"
TrafficType: !Ref Filter
# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------#
Outputs:
# LogGroup
LogGroupName:
Value: !Sub "${PJPrefix}-vpcflowlogs-group"
Export:
Name: !Sub "${PJPrefix}-vpcflowlogs-group-name"
LogGroupARN:
Value: !GetAtt LogGroup.Arn
Export:
Name: !Sub "${PJPrefix}-vpcflowlogs-group-arn"