使用している Amazon CloudFront API のバージョンが、CloudFront の代替ドメイン名 (CNAME) 検証プロセスをサポートしていない古いバージョンであるかどうかを知りたいと考えています。これらの API を呼び出すアプリケーションを更新したいと考えています。
解決方法
AWS CloudTrail ログと Amazon Athena クエリを使用して、CNAME 検証プロセスをサポートしていない古い CloudFront API バージョンを使用しているかどうかを判断します。
1. 米国東部 (バージニア北部) リージョン (us-east-1) でアカウントの CloudTrail のログ記録をオンにします。
注: 既に米国東部 (バージニア北部) リージョンのために CloudTrail のログ記録をオンにしていて、ログローテーションを設定していない場合は、現在のログのサブセットを新しいプレフィックスにコピーできます。これにより、データセット全体ではなく、ログのサブセットに対して Athena クエリを実行できます。Athena クエリの料金は、スキャンされたデータの各 GB に基づいて請求されます。これは、コストを削減するには、直近 30 日間のログのみを確認するのがベストプラクティスであることを意味しています。
2. CloudTrail ログが Amazon Simple Storage Service (Amazon S3) バケットに書き込まれたら、ログ用のテーブルを作成してください。
3. Athena コンソールを開き、[新規クエリ 1] ボックスに次のクエリを追加して、[クエリ実行] を選択します。
重要: $databaseName.$tableName をデータベースとテーブルの名前に置き換えてください。
SELECT apiversion, count() AS Total
FROM "default"."cloudtrail_logs_cloudtrail_awslogs_317431709534_6l2vpmtr_isengard_do_not_delete"
WHERE eventsource = 'cloudfront.amazonaws.com'
AND parse_datetime(apiversion, 'yyyy_MM_dd') < parse_datetime('2020_05_31', 'yyyy_MM_dd')
GROUP BY apiversion
ORDER BY Total Desc;
クエリは、CloudFront API の以前のバージョンを使用する API コールの数を返します。クエリが結果を返さない場合、ご利用のアカウントが使用しているのは以前の API バージョンではありません。
前のクエリで結果が返された場合は、この追加クエリを実行して個別の各 API コールに関する詳細情報を取得します。
重要: $databaseName.$tableName をデータベースとテーブルの名前に置き換えてください。
SELECT useridentity.arn, sourceipaddress, eventname, useragent,eventtime
FROM "default"."cloudtrail_logs_cloudtrail_awslogs_317431709534_6l2vpmtr_isengard_do_not_delete"
WHERE eventsource = 'cloudfront.amazonaws.com'
AND parse_datetime(apiversion, 'yyyy_MM_dd') < parse_datetime('2020_05_31', 'yyyy_MM_dd');
このクエリは、AWS Identity and Access Management (IAM) の ID、発信元 IP アドレス、API コール (イベント)、および API コールに関連付けられているユーザーエージェントを返します。この情報を使用して、新しい CloudFront API バージョンで更新するアプリケーションを決めます。