こんにちは。AWS CLIが好きな福島です。
昨日のアップデートでVPCフローログに新たなメタデータフィールドが4つ追加され、 送信元、送信先のAWSサービス名および通信方向等が分かるようになりました。
トラブルシューティング時に役に立つと思うため、とても嬉しいアップデートかなと思います。
具体的には、以下のメタデータフィールドが追加されました
・flow-direction
・traffic-path
・pkt-src-aws-service
・pkt-dst-aws-service
ただし、今回、追加されたメタデータフィールドは、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フローログを確認してみます。
無事に新たに追加されたメタデータフィールドの情報が載っていることが分かります。
ログフォーマットについて
ログフォーマットですが、以下は、デフォルト形式と同様のフォーマットです。
${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フローログがより分かりやすく表示されるようになり、 トラブルシューティングが楽になるかと思いますので、ぜひ設定変更してみてはいかがでしょうか。