この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
VPC フローログの Apache Parquet 形式の設定を CloudFormation がサポートしていたのでサンプルテンプレートを作成し設定を確認しました。
機能詳細は以下のリンクをご確認ください。
ユーザーガイドを確認
2021年10月のアップデート当時はマネジメントコンソールからの設定はできましたが、CloudFormation からの設定はサポートされていませんでした。久々にユーザーガイドを確認したらサポートされていることに気づきました。
- デフォルト設定は
plain-text
なので明示的に指定する必要があります - 設定書式は
Json
形式です
参照元: AWS::EC2::FlowLog - AWS CloudFormation
作ってみた
既存 VPC を選択してApache Parquet 形式を指定した VPC フローログを設定するサンプルテンプレートです。
VPC フローログ保存用の S3 バケットは一定期間経過後にログ(オブジェクト)を完全に削除するライフサイクルルールを設定しています。
- 90日後に現行オブジェクトを削除
- 非現行オブジェクトは30日後に完全に削除
ログ保存ポリシーをご確認の上、ライフサイクルルールは適切なものをご検討ください。
vpcflowlogs.yaml
---
AWSTemplateFormatVersion: "2010-09-09"
Description: VPC Flow Logs
Parameters:
ProjectName:
Description: Project Name
Type: String
Default: unnamed
Environment:
Description: Environment
Type: String
Default: dev
AllowedValues:
- prod
- dev
- stg
VpcId:
Description: VPC ID
Type: AWS::EC2::VPC::Id
Filter:
Type: String
Default: ALL
AllowedValues: [ALL, ACCEPT, REJECT]
S3BucketName:
Description: Type the name of S3 Bucket for VPC Flow Logs
Type: String
Resources:
# ------------------------------------------------------------#
# S3 Bucket for VPC Flow Logs
# ------------------------------------------------------------#
S3Bucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
BucketName: !Sub ${ProjectName}-${Environment}-${S3BucketName}-${AWS::AccountId}
OwnershipControls: # ACL無効化設定
Rules:
- ObjectOwnership: "BucketOwnerEnforced"
PublicAccessBlockConfiguration: # パブリックアクセスの設定
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
VersioningConfiguration: # バージョニング設定
Status: Enabled
BucketEncryption: # 暗号化設定
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: "AES256"
BucketKeyEnabled: false
LifecycleConfiguration: # ライフサイクルルール設定
Rules:
- Id: AbortIncompleteMultipartUpload # 未完了なマルチパートアップロードの削除
AbortIncompleteMultipartUpload:
DaysAfterInitiation: 7
Status: "Enabled"
- Id: CurrentVersionExpiration # 現行のバージョン削除
ExpirationInDays: 90
Status: "Enabled"
- Id: NoncurrentVersionExpiration # 非現行のバージョン削除
NoncurrentVersionExpiration:
# NewerNoncurrentVersions: 1
NoncurrentDays: 30
Status: "Enabled"
# ------------------------------------------------------------#
# VPC Flow Logs
# ------------------------------------------------------------#
VPCFlowLogs:
Type: "AWS::EC2::FlowLog"
Properties:
LogDestinationType: s3
LogDestination: !GetAtt S3Bucket.Arn
ResourceType: "VPC"
ResourceId: !Ref VpcId
TrafficType: !Ref Filter
DestinationOptions:
{
"FileFormat": "parquet",
"HiveCompatiblePartitions": true,
"PerHourPartition": true,
}
VPC フローログ確認
parquet
形式の設定が入っています。
S3 バケット確認
parquet
形式で保存されていました。
おわりに
Terraform は早々にparquet
をサポートしていました。と、リリース当時に同僚から教えてもらい、CloudFormation はいつ対応するのかと待っていました。調べる用があったついでに確認したらサポートされていたので動作確認しました。VPC フローログを CloudFormation から設定する機会があればご参考にしていただければ幸いです。
aws_flow_log | Resources | hashicorp/aws | Terraform Registry
最後に一点注意して頂きたいのは今回設定したDestinationOptions
の項目についてユーザーガイドにはYAML
で指定するサンプルが掲載されておりますが、現時点ではJson
形式の指定のみのサポートのため、サンプルをコピペするとエラーになります。