【AWS CLI】カスタム形式のVPCフローログを作成してみた

記事タイトルとURLをコピーする

こんにちは。AWS CLIが好きな福島です。

昨日のアップデートでVPCフローログに新たなメタデータフィールドが4つ追加され、 送信元、送信先のAWSサービス名および通信方向等が分かるようになりました。

トラブルシューティング時に役に立つと思うため、とても嬉しいアップデートかなと思います。

具体的には、以下のメタデータフィールドが追加されました

・flow-direction
・traffic-path
・pkt-src-aws-service
・pkt-dst-aws-service

aws.amazon.com

ただし、今回、追加されたメタデータフィールドは、VPCフローログのログフォーマットがデフォルト形式では、表示されません。 つまり、カスタム形式でVPCフローログを作成する必要がございます。

幸い、VPCフローログは複数作成できるため、新しいロググループにカスタム形式のVPCフローログを出力し、 既存のVPCフローログを削除することでデータを欠損せずにVPCフローログの内容を更新できます。
※ただし、ロググループが分かれてしまいます。

もしくは一時的にVPCフローログが2重で出力されてしまいますが、
同一のロググループに出力する設定のも有りかと存じます。

ということで今回は、AWS CLIが好きというのもあり、AWS CLIを使い、VPCフローログを作成してみたいと思います。
※マネコンからでもいいのですが、カスタム形式のVPCフローログを作成する際のログフォーマットの指定が少し大変です。

VPCフローログの設定状況の確認

まずは、VPCフローログの設定状況を確認してみます。

aws ec2 describe-flow-logs --query "FlowLogs[].[FlowLogId,LogGroupName,LogDestination,ResourceId,FlowLogStatus,TrafficType,LogDestinationType,MaxAggregationInterval]" --output text | column -t
  • 実行結果
fl-0fd395fdfa7ced670  None                 arn:aws:s3:::fk-test-flow-logs                                    vpc-0feexxxxxxx0deef81  ACTIVE  ALL  s3                600
fl-04bd210af827ae18d  vpc-xxxxxx        arn:aws:logs:ap-northeast-1:xxxxxxxxxx:log-group:vpc-marklogic  vpc-01fc1xxxxxxd6f6  ACTIVE  ALL  cloud-watch-logs  600
fl-08baf5fb522b0cf6b  fk-test-vpc-flowlog  None                                                              vpc-0fee1xxxxxxx1  ACTIVE  ALL  cloud-watch-logs  60
fl-0dc0fecf91d69b0ff  test                 None                                                              vpc-0fee138dxxxxxxx ACTIVE  ALL  cloud-watch-logs  600
fl-00106768c5ce65f74  test02               None                                                              vpc-0fee138xxxxxxx81  ACTIVE  ALL  cloud-watch-logs  60

削除予定のVPCフローログIDは、以下の環境変数に定義しておきます。

  • 例)
FLOW_LOG_ID=fl-0fd395fdfa7ced670

VPCフローログを作成するための環境変数を定義

VPC_ID=
IAM_ROLE_ARN=
LOG_GROUP_NAME=

VPC_IDの定義

VPC_IDに指定できるIDは、以下のコマンドで確認できます。

aws ec2 describe-tags --query "Tags[].[Value,ResourceId]" --filters "Name=resource-type,Values=vpc" --output text | column -t
  • 実行結果
xxxxxxx-vpc      vpc-01fcxxx8ae90ad6f6
vpc-xxxxx      vpc-046c882exxxf5313b
vpc-tr-xxxx-common  vpc-0d8xxx58149e01521
fk-test-vpc        vpc-0fee138dxxxdeef81
  • 例)
VPC_ID=vpc-01fcxxx8ae90ad6f6

IAM_ROLE_ARNの定義

IAM_ROLE_ARNに指定できるロールは、以下のコマンドで確認できます。

aws iam list-roles --query "Roles[].[RoleName,Arn,AssumeRolePolicyDocument.Statement[0].Principal.Service]" --output text | grep vpc-flow-logs.amazonaws.com
  • 実行結果
Custom-flowlogsRole     arn:aws:iam::xxxxxxxxxx:role/Custom-flowlogsRole      vpc-flow-logs.amazonaws.com
  • 例)
IAM_ROLE_ARN=arn:aws:iam::xxxxxxxxxx:role/Custom-flowlogsRole

LOG_GROUP_NAMEの定義

LOG_GROUP_NAMEには、VPCフローログを出力するロググループを指定します。 指定したロググループがない場合、新規に作成されます。 その場合、ログの保持期間が無期限になるので、その点は注意が必要です。

既存のロググループ一覧は、以下のコマンドで確認できます。

aws logs describe-log-groups --query "logGroups[].[logGroupName,retentionInDays]" --output text | column -t
  • 実行結果
/aws/sagemaker/studio                                                             None
/var/log/httpd/access_log                                                         None
/var/log/messages                                                                 None
RDSOSMetrics                                                                      30
fk-test-vpc-flowlog                                                               7
test                                                                              Non
  • 例)
LOG_GROUP_NAME=fk-test-vpc-flowlog 

ログ保持期間の変更(任意)

ログの保持期間は、以下のコマンドで変更できます。(ログの保持期間を3カ月に変更する場合)

aws logs put-retention-policy --log-group-name ${LOG_GROUP_NAME} --retention-in-days 90

VPCフローログの作成

環境変数の設定ができたら、以下のコマンドでVPCフローログを作成できます。
※トラフィックは、ALLで、最大集約間隔は、1分としています。

aws ec2 create-flow-logs \
--resource-ids ${VPC_ID} \
--resource-type VPC \
--traffic-type ALL \
--deliver-logs-permission-arn ${IAM_ROLE_ARN} \
--log-group-name ${LOG_GROUP_NAME} \
--max-aggregation-interval 60 \
--log-format '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol}
 ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${flow-direction} ${traffic-path} ${pkt-src-aws-service} ${pkt-dst-aws-service}'

設定が完了したら、VPCフローログを確認してみます。

f:id:swx-fukushima:20210305005314p:plain

無事に新たに追加されたメタデータフィールドの情報が載っていることが分かります。

ログフォーマットについて

ログフォーマットですが、以下は、デフォルト形式と同様のフォーマットです。

${version}
${account-id}
${interface-id}
${srcaddr}
${dstaddr}
${srcport}
${dstport}
${protocol}
${packets}
${bytes}
${start}
${end}
${action}
${log-status}

先ほど実行したコマンドには、デフォルト形式の末尾に新たに追加された以下のメタデータフィールドを追加しています。

${flow-direction} 
${traffic-path} 
${pkt-src-aws-service} 
${pkt-dst-aws-service}

また、ログフォーマットは並びを変えることでVPCフローログに出力される順番も変更できるので、 必要に応じて、順番を変更してみてください。

VPCフローログの削除

最後にVPCフローログを削除する方法は以下の通りです。

aws ec2 delete-flow-logs --flow-log-ids ${FLOW_LOG_ID}

終わりに

今回のアップデートでVPCフローログがより分かりやすく表示されるようになり、 トラブルシューティングが楽になるかと思いますので、ぜひ設定変更してみてはいかがでしょうか。

福島 和弥 (記事一覧)

SRE3課

2019/10 入社

AWS CLIが好きです。