既存の VPC フローログ設定を変更できるのでしょうか

「できない」とドキュメントに書いてありました。
2022.03.19

VPC フローログのログレコード形式を変更したいなと思いマネジメントコンソールから確認したところ、設定変更できそうなメニューがありませんでした。そこで既存 VPC フローログの設定変更できるのか調べました。

確認結果

  • 一度設定した VPC フローログの設定は変更できない。
  • 設定変更したければ新規に設定を追加して、既存設定を削除することになる。
  • VPC フローログのタグは編集可能

ドキュメント確認

フローログの制限の項目に以下の制限事項が記載されていました。設定変更はできないとのこと。

After you create a flow log, you cannot change its configuration or the flow log record format. For example, you can’t associate a different IAM role with the flow log, or add or remove fields in the flow log record. Instead, you can delete the flow log and create a new one with the required configuration.

引用: Logging IP traffic using VPC Flow Logs - Amazon Virtual Private Cloud

すぐに上記文章を見つけられず実際に試したあとに調べ直してたどり着きました。

確認してみた

VPC フローログの設定はマネジメントコンソールから変更できなくても API を使えば変更できるのでは?という素朴な疑問を抱え、 VPC フローログの制限事項を知る前に CloudFormation から設定変更を行ってみた記録です。

検証環境

CloudFormation からログフォーマットの出力形式をデフォルト形式で作成し、その後スタックを更新しカスタム形式に変更してみて挙動を確認します。以前作成した Apatch Parquet形式で保存する CloudFormation テンプレートで試します。

今回の検証で使用したテンプレートは以下に置いてあります。

bigmuramura/cfn-vpcflowlogs-change

初期設定

ログフォーマット未指定でデフォルトのログレコード形式で VPC フローログ設定を作成します。

  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,
        }

マネジメントコンソールから設定する場合は以下の設定値に該当します。

CloudFormation からスタックを実行し設定が追加されました。

既存のVPCフローログ設定がある状態になりました。準備は完了です。

ログフォーマットの更新

ログフォーマットをカスタム形式で設定できるすべてのログレコードを指定し追加しました。これでスタックの更新をかけてみます。

  VPCFlowLogs:
    Type: "AWS::EC2::FlowLog"
    Properties:
      LogDestinationType: s3
      LogDestination: !GetAtt S3Bucket.Arn
      LogFormat: "${account-id} ${action} ${az-id} ${bytes} ${dstaddr} ${dstport} ${end} ${flow-direction} ${instance-id} ${interface-id} ${log-status} ${packets} ${pkt-dst-aws-service} ${pkt-dstaddr} ${pkt-src-aws-service} ${pkt-srcaddr} ${protocol} ${region} ${srcaddr} ${srcport} ${start} ${sublocation-id} ${sublocation-type} ${subnet-id} ${tcp-flags} ${traffic-path} ${type} ${version} ${vpc-id}"
      ResourceType: "VPC"
      ResourceId: !Ref VpcId
      TrafficType: !Ref Filter
      DestinationOptions:
        {
          "FileFormat": "parquet",
          "HiveCompatiblePartitions": true,
          "PerHourPartition": true,
        }

マネジメントコンソールから設定する場合は以下の設定値に該当します。

すべて選択をクリックして選択された全ログレコードを指定しています。

CloudFormation スタックを更新します。変更セットは置換が True と表示されます。つまり、既存VPCフローログ設定は削除され・新しい設定を新規に作成されます。

スタック更新中の動きを実際に確認します。VPC フローログの設定が新規追加され2つ存在しています。

2つ設定が存在する期間が一時的にあり、その後古い設定は削除されました。

スタックで更新したログレコード形式はカスタム設定となった新しい VPC フローログ設定が残りました。

まとめ

CloudFormation から VPC フローログ設定を変更すると

  1. 新しい VPC フローログ設定が新規追加される
  2. 古い VPC フローログ設定が削除される

となりました。VPC フローログは再作成となり、フローログの ID が変わります。自前の設定書やなにかで ID を記録または、使っているものがあれば事前にご確認ください。

おわりに

VPC フローログの設定を変更したいというケースが少ないとは思います。過去には2021年10月のアップデートで Apatch Parquet 形式に対応した際に変更したいなと思いましたが既存の設定から変更をできないことを知り、新規で設定するタイミングで導入しようと思った記憶があります。

Apatch Parquet 形式に変更ができない以前にそもそも VPC フローログの設定変更できなかったことをを知ったので書き残しました。あと、タグだけは変更可能でした。

参考