CloudFormationでVPCフローログ(S3出力版)を一撃で設定する

2019.08.24

こんにちは、コカコーラ大好きカジです。

VPC Flow Logs(S3出力版)を、VPC構築済みの環境や、複数VPCに構築するときに使えるCloudFormationテンプレートを作成してみました。

VPCフローログとは

VPC Flow LogsのS3出力については以下を参照ください。

VPC Flow Logsの出力先にS3が追加になって安価に使いやすくなりました | DevelopersIO

VPC Flow LogsをCloudwatch Logsに出力したい場合は、以下のブログとなります。

CloudFormationでVPCフローログを設定する (CloudWatch版) | DevelopersIO

前提条件

利用するにあたっての前提条件は以下となります。

  • VPCが構築済みであること
  • 出力先S3バケット名を指定しますが、バケット名の最後にAWSアカウント番号を付与します。
  • Cloudformation削除時はS3バケット内にファイルを削除済みにしないとS3バケット削除できません。必要に応じて、DeletionPolicyをつけて削除除外してください。

スタック作成

一番最後に記載した、yamlファイルで、Cloudformationスタック作成します。 以下に沿って入力すればOKです。この画面以降はデフォルトのままでOKです。

スタック作成したら、リソースが作成されたことを確認します。

設定確認

スタック作成されたら、設定を確認します。

Cloudformation テンプレート

AWSTemplateFormatVersion: "2010-09-09"
Description:
  VPC Flow Logs S3 Output

Metadata:
  "AWS::CloudFormation::Interface":
    ParameterGroups:
      - Label:
          default: "VPC Flow Logs Setup VPC ID"
        Parameters:
          - VpcId
      - Label:
          default: "VPC Flow Logs Configuration"
        Parameters:
          - Filter
      - Label:
          default: "VPC Flow Logs output S3 Buceket Name <Bucket Name>-<Account Number>. Account Number is set automatically."
        Parameters:
          - S3Bucket

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:

  VpcId:
    Description: VPC ID
    Type: AWS::EC2::VPC::Id

  S3Bucket:
    Description: S3 Bucket Name
    Type: String
    Default: vpc-flow-log

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

Resources:
# ------------------------------------------------------------#
#  S3 Bucket for VPC Flow Logs
# ------------------------------------------------------------#
  VPCFlowLogsS3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Join [ "-", [ Ref: "S3Bucket" , Ref: "AWS::AccountId" ] ]

# ------------------------------------------------------------#
#  VPC Flow Logs
# ------------------------------------------------------------#
  VPCFlowLogs:
    Type: "AWS::EC2::FlowLog"
    DependsOn: VPCFlowLogsS3Bucket
    Properties:
      LogDestination: !Sub "arn:aws:s3:::${VPCFlowLogsS3Bucket}"
      LogDestinationType: s3
      ResourceId: !Ref VpcId
      ResourceType: "VPC"
      TrafficType: !Ref Filter

# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------#
Outputs:
#VPCFlowLogsS3Bucket
  VPCFlowLogsS3Bucket:
    Value: !Ref VPCFlowLogsS3Bucket

まとめ

複数環境で有効にする必要があり、Cloudformationを作成してみました。 どなたかのお役に立てれば光栄です。