[アップデート] CloudFormationがTransit Gateway Flow Logsをサポートしました

Transit Gateway Flow Logsを手作業で設定する世界線から脱却できる
2022.11.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Transit Gateway Flow LogsもCloudFormationで設定したいな

こんにちは、のんピ(@non____97)です。

皆さんはTransit Gateway Flow LogsもCloudFormationで設定したいなと思ったことはありますか? 私はあります。

1ヶ月ほど前にAthenaでTransit Gateway Flow LogsをAthenaで分析する記事を書いた際は、CloudFormationはTransit Gateway Flow Logsに対応していませんでした。

その後なんとなく、VPC Flow LogsのリソースタイプであるAWS::EC2::FlowLogを確認すると、ResourceTypeのパラメーターにTransitGatewayTransitGatewayAttachmentが追加されているではありませんか。

ResourceType

The type of resource to monitor.

Required: Yes

Type: String

Allowed values: NetworkInterface | Subnet | TransitGateway | TransitGatewayAttachment | VPC

Update requires: Replacement

AWS::EC2::FlowLog - AWS CloudFormation

これは嬉しいですね。

早速試してみたので紹介します。

検証環境

検証環境は以下の通りです。

Transit Gateway Flow Logs検証環境構成図

VPC間をTransit Gatewayで接続しておきます。そしてEC2インスタンス間で適当な通信を行い、出力されたログをAthenaで分析します。

AWS CDKでTransit Gateway Flow Logsを作成

それではTransit Gateway Flow Logsの設定をします。

今回はCloudFormationではなく、AWS CDKで定義します。使用したコードは以下リポジトリに保存しています。

Transit Gateway Flows Logsは以下のように設定しました。

  • 出力先 : S3バケット
  • ログフォーマット : デフォルトのものを明示的に指定
  • 最大集約期間 : 60秒 (固定値)
  • ファイルフォーマット : テキスト
  • Hive互換プレフィックス : false
  • 1時間ごとのパーティション : true

ログフォーマットはTransit Gateway Flow Logsは最大集約期間が最大60秒と言うこともありparquetを選択しても高圧縮が見込められないのではと思い、テキストを選択しました。(カラムナフォーマットである分クエリ速度及びスキャン速度についてはParquetに分があると思います)

また、今回はAthenaで分析する際にPartition Projectionのdateタイプを使用したかったのでHive互換プレフィックスは無効化しています。

Transit Gateway Flows Logs部分のコードは以下の通りです。

./lib/tgw-flow-logs-stack.ts

    new cdk.aws_ec2.CfnFlowLog(this, "Transit Gateway Flow Logs", {
      resourceId: tgw.ref,
      resourceType: "TransitGateway",
      logDestination: tgwFlowLogsBucket.bucketArn,
      logDestinationType: "s3",
      logFormat:
        "${version} ${resource-type} ${account-id} ${tgw-id} ${tgw-attachment-id} ${tgw-src-vpc-account-id} ${tgw-dst-vpc-account-id} ${tgw-src-vpc-id} ${tgw-dst-vpc-id} ${tgw-src-subnet-id} ${tgw-dst-subnet-id} ${tgw-src-eni} ${tgw-dst-eni} ${tgw-src-az-id} ${tgw-dst-az-id} ${tgw-pair-attachment-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${log-status} ${type} ${packets-lost-no-route} ${packets-lost-blackhole} ${packets-lost-mtu-exceeded} ${packets-lost-ttl-expired} ${tcp-flags} ${region} ${flow-direction} ${pkt-src-aws-service} ${pkt-dst-aws-service}",
      maxAggregationInterval: 60,
      destinationOptions: {
        FileFormat: "plain-text",
        HiveCompatiblePartitions: false,
        PerHourPartition: true,
      },
      tags: [
        {
          key: "Name",
          value: "tgw-flow-logs",
        },
      ],
    });

デプロイ後、マネジメントコンソールからTransit Gateway Flow Logsが設定されていることを確認します。

Transit Gateway Flow Logsが設定されていることを確認

確かに設定されていますね。

pingやnmapでEC2インスタンス間で通信をしばらくした後、s3-treeでS3バケットにログが出力されていることを確認します。

sh-4.2$ /home/ssm-user/.local/bin/s3-tree bucket-tgw-flow-logs
bucket-tgw-flow-logs
└── AWSLogs
    └── <AWSアカウントID>
        └── vpcflowlogs
            └── us-east-1
                └── 2022
                    └── 11
                        ├── 22
                        │   └── 23
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2330Z_01ac6ff9.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2330Z_c21b0aed.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2335Z_3bd3780b.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2335Z_719feec6.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2340Z_23c57c95.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2340Z_fcd89828.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2345Z_4029b3d8.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2345Z_56f92516.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2350Z_08d9b5cd.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2350Z_2b267d85.log.gz
                        │       ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2355Z_1f9bc820.log.gz
                        │       └── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221122T2355Z_909f0c30.log.gz
                        └── 23
                            └── 00
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0000Z_36fca142.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0000Z_eee0840f.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0005Z_601c28ab.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0005Z_8e2f45fb.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0010Z_70fad9b8.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0010Z_fd505e56.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0015Z_3f20b604.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0015Z_9d314a11.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0020Z_5050a3b5.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0020Z_edc56f27.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0025Z_215fbd9a.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0025Z_6d0e3b99.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0030Z_49adab97.log.gz
                                ├── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0030Z_d0acf554.log.gz
                                └── <AWSアカウントID>_vpcflowlogs_us-east-1_fl-000a735ab701aec34_20221123T0035Z_c8b93634.log.gz

1時間ごとにパーティションが分割されて出力されていますね。

Athenaで分析してみる

せっかくなので出力されたログに対してAthenaで分析してみます。

以下DDLでテーブルを定義します。

CREATE EXTERNAL TABLE `transit_gateway_flow_logs_partition_projection`(
  `version` int, 
  `resource_type` string, 
  `account_id` string, 
  `tgw_id` string, 
  `tgw_attachment_id` string, 
  `tgw_src_vpc_account_id` string, 
  `tgw_dst_vpc_account_id` string, 
  `tgw_src_vpc_id` string, 
  `tgw_dst_vpc_id` string, 
  `tgw_src_subnet_id` string, 
  `tgw_dst_subnet_id` string, 
  `tgw_src_eni` string, 
  `tgw_dst_eni` string, 
  `tgw_src_az_id` string, 
  `tgw_dst_az_id` string, 
  `tgw_pair_attachment_id` string, 
  `srcaddr` string, 
  `dstaddr` string, 
  `srcport` int, 
  `dstport` int, 
  `protocol` bigint, 
  `packets` bigint, 
  `bytes` bigint, 
  `start` bigint, 
  `end` bigint, 
  `log_status` string, 
  `type` string, 
  `packets_lost_no_route` bigint, 
  `packets_lost_blackhole` bigint, 
  `packets_lost_mtu_exceeded` bigint, 
  `packets_lost_ttl_expired` bigint, 
  `tcp_flags` int, 
  `region` string, 
  `flow_direction` string, 
  `pkt_src_aws_service` string, 
  `pkt_dst_aws_service` string
)
PARTITIONED BY (
  `aws_account_id` string,
  `aws_region` string,
  `datehour` string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION
  's3://bucket-tgw-flow-logs/AWSLogs/'
TBLPROPERTIES (
  'projection.enabled'='true', 
  'has_encrypted_data'='true', 
  "skip.header.line.count"="1",
  'projection.aws_account_id.type'='enum', 
  'projection.aws_account_id.values'='<AWSアカウントID>', 
  'projection.aws_region.type'='enum', 
  'projection.aws_region.values'='us-east-1,ap-northeast-1', 
  'projection.datehour.type'='date', 
  'projection.datehour.interval'='1',
  'projection.datehour.interval.unit'='HOURS',
  'projection.datehour.range'='NOW-1YEARS,NOW',
  'projection.datehour.format'='yyyy/MM/dd/HH', 
  'storage.location.template'='s3://bucket-tgw-flow-logs/AWSLogs/${aws_account_id}/vpcflowlogs/${aws_region}/${datehour}'
)

Partition Projectionを使って、直近1年間のログに対してクエリを実行できるようにします。

こちらのDDLをAthenaで実行します。すると、テーブル一覧に定義したテーブルが表示されるようになります。

Athenaのテーブル作成

あとは適当にクエリを実行します。

2022/11/22の0時から2022/11/23の0時までのログ10件を表示させてみます。

SELECT *
FROM 
  transit_gateway_flow_logs_partition_projection
WHERE
  aws_account_id='<AWSアカウントID>' and
  aws_region='us-east-1' and
  datehour>='2022/11/22/00' and
  datehour<='2022/11/23/00'
LIMIT 10

実行結果は以下の通りです。

#	version	resource_type	account_id	tgw_id	tgw_attachment_id	tgw_src_vpc_account_id	tgw_dst_vpc_account_id	tgw_src_vpc_id	tgw_dst_vpc_id	tgw_src_subnet_id	tgw_dst_subnet_id	tgw_src_eni	tgw_dst_eni	tgw_src_az_id	tgw_dst_az_id	tgw_pair_attachment_id	srcaddr	dstaddr	srcport	dstport	protocol	packets	bytes	start	end	log_status	type	packets_lost_no_route	packets_lost_blackhole	packets_lost_mtu_exceeded	packets_lost_ttl_expired	tcp_flags	region	flow_direction	pkt_src_aws_service	pkt_dst_aws_service	aws_account_id	aws_region	datehour
1	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
2	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164420	1669164479	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
3	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164420	1669164479	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
4	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
5	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
6	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
7	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164480	1669164539	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
8	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.1.15	10.0.2.23	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
9	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.2.23	10.0.1.15	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
10	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00

また、この際のスキャンしたデータ量は18.09 KBでした。

次に、2022/11/23の0時台のログ10件を表示させてみます。

SELECT *
FROM 
  transit_gateway_flow_logs_partition_projection
WHERE
  aws_account_id='<AWSアカウントID>' and
  aws_region='us-east-1' and
  datehour='2022/11/23/00'
LIMIT 10

実行結果は以下の通りです。

#	version	resource_type	account_id	tgw_id	tgw_attachment_id	tgw_src_vpc_account_id	tgw_dst_vpc_account_id	tgw_src_vpc_id	tgw_dst_vpc_id	tgw_src_subnet_id	tgw_dst_subnet_id	tgw_src_eni	tgw_dst_eni	tgw_src_az_id	tgw_dst_az_id	tgw_pair_attachment_id	srcaddr	dstaddr	srcport	dstport	protocol	packets	bytes	start	end	log_status	type	packets_lost_no_route	packets_lost_blackhole	packets_lost_mtu_exceeded	packets_lost_ttl_expired	tcp_flags	region	flow_direction	pkt_src_aws_service	pkt_dst_aws_service	aws_account_id	aws_region	datehour
1	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
2	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164420	1669164479	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
3	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164420	1669164479	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
4	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
5	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
6	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.2.23	10.0.1.15	0	0	1	59	4956	1669164300	1669164359	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
7	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.1.15	10.0.2.23	0	0	1	59	4956	1669164480	1669164539	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
8	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-062ed0e3a40e79be8	vpc-04a3b32cba00bbfe1	subnet-03061cb6b7710b3a5	subnet-0742e53662fb1dc12	eni-0ea3ebd26e4832b54	eni-040e203651b487792	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.1.15	10.0.2.23	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
9	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-0315056bf2c566107	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-039f737730c584a48	10.0.2.23	10.0.1.15	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	egress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00
10	6	TransitGateway	<AWSアカウントID>	tgw-081ba8a810489d200	tgw-attach-039f737730c584a48	<AWSアカウントID>	<AWSアカウントID>	vpc-04a3b32cba00bbfe1	vpc-062ed0e3a40e79be8	subnet-0742e53662fb1dc12	subnet-03061cb6b7710b3a5	eni-040e203651b487792	eni-0ea3ebd26e4832b54	use1-az6	use1-az6	tgw-attach-0315056bf2c566107	10.0.2.23	10.0.1.15	0	0	1	58	4872	1669164360	1669164419	OK	IPv4	0	0	0	0	0	us-east-1	ingress	-	-	<AWSアカウントID>	us-east-1	2022/11/23/00

こちらのスキャンしたデータ量は4.73 KBでした。スキャン量が減っていることからPartition Projectionによるパーティションの設定が上手く動作していそうです。パーティションdatehourのタイプをdateにして、範囲をNOW-1YEARS,NOWにしているので、時間が経過してもALTER TABLE ADD PARTITIONMSCK REPAIR TABLEの実行が不要なのはやはり便利です。

次に、送信元IPアドレス毎の件数を確認してみます。

SELECT 
  srcaddr,
  COUNT(srcaddr) as count
FROM 
  transit_gateway_flow_logs_partition_projection
WHERE
  aws_account_id='<AWSアカウントID>' and
  aws_region='us-east-1' and
  datehour>='2022/11/22/00' and
  datehour<='2022/11/23/00'
GROUP BY
  srcaddr

実行結果は以下の通りです。

#	srcaddr	count
1	10.0.1.15	10606
2	10.0.2.23	10568

最後に、Transit Gatewayへのingressの通信について、以下グループで発生件数の多かったもの10件を確認します。

  • 送信元IPアドレス
  • 送信先IPアドレス
  • プロトコル
  • 送信先ポート
  • 通信の方向
SELECT 
  srcaddr,
  dstaddr,
  protocol,
  dstport,
  flow_direction,
  COUNT(srcaddr) as count
FROM 
  transit_gateway_flow_logs_partition_projection
WHERE
  aws_account_id='<AWSアカウントID>' and
  aws_region='us-east-1' and
  datehour>='2022/11/22/00' and
  datehour<='2022/11/23/00' and
  flow_direction='ingress'
GROUP BY
  srcaddr,
  dstaddr,
  protocol,
  dstport,
  flow_direction
ORDER BY count DESC
LIMIT 10

実行結果は以下の通りです。

#	srcaddr	dstaddr	protocol	dstport	flow_direction	count
1	10.0.2.23	10.0.1.15	6	37920	ingress	1000
2	10.0.2.23	10.0.1.15	6	41213	ingress	1000
3	10.0.2.23	10.0.1.15	6	36941	ingress	1000
4	10.0.2.23	10.0.1.15	6	44305	ingress	1000
5	10.0.2.23	10.0.1.15	6	39819	ingress	1000
6	10.0.2.23	10.0.1.15	1	0	ingress	208
7	10.0.1.15	10.0.2.23	1	0	ingress	208
8	10.0.1.15	10.0.2.23	6	22	ingress	65
9	10.0.1.15	10.0.2.23	6	1	ingress	23
10	10.0.1.15	10.0.2.23	6	80	ingress	10

nmapでIPアドレスが10.0.1.15のEC2インスタンスからIPアドレスが10.0.2.23のEC2インスタンスに対してポートスキャンしたので、そのレスポンスの通信が大半を占めていそうです。次点でICMPのEcho Replyが続いていますね。

Transit Gateway Flow Logsを手作業で設定する世界線から脱却できる

CloudFormationがTransit Gateway Flow Logsをサポートされたアップデートを紹介しました。

これでTransit Gateway Flow Logsを手作業で設定する世界線から脱却できますね。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!