Amazon Web Services ブログ
AWS Shield Advanced のフローログで DDoS 攻撃を可視化する
本稿は、2026 年 06 月 04 日に公開された “Gain visibility into DDoS attacks with flow logs in AWS Shield Advanced” を翻訳したものです。
これまで、分散型サービス妨害 (DDoS) 攻撃のトラフィックを再構成するには、事後に複数のデータソースを組み合わせる必要がありました。AWS Shield Advanced の攻撃フローログは、これを変革します。攻撃中にトラフィックのメタデータをキャプチャするため、送信元の特定、緩和策の検証、既存の分析パイプラインへのデータ投入が可能になります。
Shield は、他の AWS フローログと同じ CloudWatch Logs の配信インフラストラクチャを使用して、Amazon Simple Storage Service (Amazon S3)、Amazon CloudWatch Logs、または Amazon Data Firehose にログを発行します。そのため、すでに使用しているモニタリングおよび分析ツールに直接組み込めます。
この記事では、Shield Advanced 攻撃フローログが DDoS イベント中にどのようにメタデータをキャプチャするか、フローログエントリの各フィールドが何を意味するか、そして保護対象リソースに対してフローログを有効化および設定する方法を説明します。
DDoS 攻撃がアプリケーションに与える影響
DDoS 攻撃は、アプリケーションをトラフィックであふれさせ、ユーザーが利用できない状態にします。インフラストラクチャ層の攻撃は帯域幅を飽和させ、接続テーブルを枯渇させるため、パケットロスやタイムアウトが発生します。
Shield Advanced は、Amazon CloudFront ディストリビューション、Elastic Load Balancing のロードバランサー、Amazon Route 53 のホストゾーン、AWS Global Accelerator の標準アクセラレーター、および Elastic IP (EIP) アドレスに対して、攻撃を検出して緩和するマネージド型の DDoS 保護サービスです。対応範囲の詳細については、AWS Shield Advanced のドキュメントを参照してください。 Shield Advanced では、まず EIP 保護を対象としたインフラストラクチャレイヤーの攻撃フローログが提供され、その後、対応するリソースタイプが順次拡大される予定です。
主な利点
フローログは、攻撃を以下のようなさまざまな観点から理解するのに役立ちます。
- トラフィックパターンの再構築 – 攻撃発生後にログをクエリすることで、トラフィック量、送信元の分布、プロトコルの構成比を分析でき、CloudWatch の集約メトリクスだけに頼る必要がなくなります。
- 攻撃元の特定 –
srccountryおよびlocationフィールドは、トラフィックがどこから発生し、どの AWS エッジロケーションに入ってきたかを示します。 - 緩和動作の検証 –
actionフィールドは、Shield が各フローに対して行った処理を記録します。
ログは Amazon S3、CloudWatch Logs、または Data Firehose に送られます。その後、新しいインフラストラクチャをデプロイすることなく、Amazon Athena (Amazon S3 内のデータを分析するためのサーバーレスのクエリサービス) でクエリしたり、サードパーティのセキュリティ情報イベント管理 (SIEM) プラットフォームにルーティングしたり、CloudWatch Logs Insights (対話型のログ分析機能) のクエリを構築したりできます。
攻撃フローログがキャプチャする内容
ログレコードは、送信元と送信先の IP アドレスおよびポート、プロトコル、パケット数とバイト数、Shield Advanced が実行したアクション、TCP フラグをキャプチャします。また、トラフィックが入ってきた AWS イングレスロケーションと、可能な場合はトラフィック送信元の 2 文字の国コードも含まれます。ログは 5 分間隔で書き込まれ、攻撃の進行中および終了後に利用できます。
ファイルの最大サイズは 75 MB です。5 分間のウィンドウ内にファイルがその上限に達した場合、そのファイルはクローズされて転送され、新しいファイルが開始されます。フローログは JSON、プレーンテキスト、W3C、Parquet の出力形式に対応しており、以下のフィールドを含みます。
| フィールド | 説明 |
| protection_arn | Shield 保護の Amazon リソースネーム (ARN) |
| event_timestamp | ログ生成のタイムスタンプ |
| version | フローログのバージョン番号 |
| srcaddr | 送信元 IP アドレス |
| dstaddr | 送信先 IP アドレス |
| srcport | 送信元ポート |
| dstport | 送信先ポート |
| protocol | プロトコル番号 |
| packets | 集約ウィンドウ内のパケット数 |
| bytes | 集約ウィンドウ内のバイト数 |
| starttime | 集約ウィンドウの開始時刻 |
| endtime | 集約ウィンドウの終了時刻 |
| action | Shield が実行したアクション |
| location | AWS イングレスロケーション |
| sampling_rate | パケット処理中に使用されたサンプリングレート |
| tcp_flags | パケットの TCP フラグ |
| srccountry | トラフィック送信元の 2 文字の国コード |
Shield Advanced 保護対象リソースに対するフローログの設定方法
以下の手順では、Shield Advanced 保護を任意のログ送信先に接続する CloudWatch Logs 配信リソースの作成方法を説明します。
前提条件
フローログを設定する前に、以下を準備してください。
- 有効な Shield Advanced サブスクリプション
- 少なくとも 1 つの既存の Shield Advanced 保護
- CloudWatch Logs 配信リソースを作成するための AWS Identity and Access Management (IAM) 権限 (
logs:PutDeliverySource、logs:PutDeliveryDestination、logs:CreateDelivery)
フローログには標準の CloudWatch Logs のベンドログ料金が発生し、送信先リソース (S3 バケットのストレージ、CloudWatch Logs のロググループのストレージ、または Firehose のデータ処理) には別途料金が発生します。トラフィックの多いリソースでフローログを有効化する前に、CloudWatch の料金ページのベンドログの項目と、選択した送信先サービスの料金を確認してください。
仕組み
ログ配信には 3 つのオブジェクトが必要です。
- DeliverySource – ログを生成する Shield Advanced 保護を表します
- DeliveryDestination – ログの送信先 (Amazon S3、CloudWatch Logs、または Amazon Data Firehose) を表します
- Delivery – ソースと送信先を接続します
この 3 オブジェクトモデルにより、複数のソース間で送信先を再利用したり、配信パイプラインを個別に管理したりできます。たとえば、同じ DeliveryDestination を参照する複数の DeliverySource オブジェクトを作成することで、複数の Shield 保護からのログを同じ S3 バケットに送信できます。
Shield Advanced 攻撃フローログは CloudWatch Logs 配信インフラストラクチャを使用するため、他のベンドログと同様に、アカウントやリージョンをまたいで集約できます。クロスアカウントポリシーを使用して一元管理された S3 バケットへ直接配信したり、クロスアカウント・クロスリージョンの集約ルールを使用して CloudWatch Logs のロググループをレプリケートしたり、クロスアカウントサブスクリプションを使用して共有 Firehose ストリームにストリーミングしたりできます。これらのオプションを活用して、マルチアカウント・マルチリージョン環境全体にわたる DDoS 攻撃トラフィックの統合ビューを構築することができます。
ステップ 1: 送信先リソースを作成する
送信先を選択します。
- オプション A – S3 バケット: 長期保存と Athena クエリに最適です。S3 バケットの作成を参照してください。
- オプション B – CloudWatch Logs ロググループ: リアルタイムモニタリングと CloudWatch Logs Insights に最適です。CloudWatch Logs でのロググループの作成を参照してください。
- オプション C – Data Firehose 配信ストリーム: サードパーティツールや SIEM へのストリーミングに最適です。Firehose ストリームの作成を参照してください。
ステップ 2: 送信先リソースポリシーを設定する (必要な場合)
送信先リソースには、CloudWatch Logs 配信サービスに書き込み権限を付与するポリシーが必要です。ポリシーは送信先のタイプによって異なります。詳細については、Amazon S3 に送信されるログ、CloudWatch Logs に送信されるログ、または Firehose に送信されるログを参照してください。
Amazon S3 を送信先とする場合は、2 つのオプションがあります。
- 自動ポリシー作成: バケットに既存のリソースポリシーがなく、
s3:GetBucketPolicyおよびs3:PutBucketPolicy権限を持っている場合、ステップ 6 で配信を作成する際に AWS が必要なポリシーを自動的に作成します。ステップ 3 に進んでかまいません。 - 手動ポリシー更新: ポリシーをカスタマイズする必要がある場合や、組織で事前承認済みのポリシーが必要な場合は、Amazon S3 に送信されるログの手順に従って手動でポリシーを作成してください。
ステップ 3: 保護 ARN を取得する
Shield Advanced はグローバルサービスであり、管理には us-east-1 リージョンを使用します。次のコマンドを実行して、Shield Advanced 保護の一覧を表示します。
aws shield list-protections \
--region us-east-1
出力から、ログを記録したい保護の ProtectionArn の値をコピーします。
ステップ 4: 配信ソースを作成する
次のコマンドを実行して配信ソースを作成します。<protection-arn> をステップ 3 の ProtectionArn の値に置き換えてください。
aws logs put-delivery-source \
--name my-shield-delivery-source \
--resource-arn <protection-arn> \
--log-type FLOW_LOGS \
--region us-east-1
--resource-arn には、保護対象のリソースそのものの ARN ではなく、Shield Advanced の保護オブジェクトの ARN を指定します。Shield Advanced は、リソースをラップする個別の保護オブジェクトを作成し、フローログはその保護レイヤーから生成されます (基盤となるリソースからではありません)。
ステップ 5: 配信先を作成する
次のコマンドを実行して配信先を作成します。<resource-arn> をステップ 1 で作成した送信先リソースの ARN に置き換えてください。
aws logs put-delivery-destination \
--name my-shield-delivery-destination \
--output-format plain \
--delivery-destination-configuration '{"destinationResourceArn":"<resource-arn>"}' \
--region us-east-1
--delivery-destination-configuration パラメーターは、destinationResourceArn キーを持つ JSON オブジェクトを指定します。
その値には、S3 バケット、ロググループ、または Firehose ストリームの ARN を設定します。
出力結果から、トップレベル (レスポンス直下) の ARN フィールドの値をコピーしてください。これは配信先 ARN (バケット ARN とは異なります) です。この値はステップ 6 で使用します。
ステップ 6: 配信を作成する
次のコマンドを実行して、配信ソースと配信先を接続します。<delivery-destination-arn> をステップ 5 の配信先 ARN に置き換えてください。
aws logs create-delivery \
--delivery-source-name my-shield-delivery-source \
--delivery-destination-arn <delivery-destination-arn> \
--region us-east-1
ステップ 7: 配信を検証する
次のコマンドを実行して、配信が有効であることを確認します。
aws logs describe-deliveries \
--region us-east-1
配信が有効になると、Shield Advanced は DDoS イベント中にフローログレコードを送信先に転送します。
クリーンアップ
継続的な料金が発生しないように、作成したリソースを削除します。
- 配信を削除します。
aws logs delete-delivery \
--id <delivery-id> \
--region us-east-1
- 配信ソースを削除します。
aws logs delete-delivery-source \
--name my-shield-delivery-source \
--region us-east-1
- 配信先を削除します。
aws logs delete-delivery-destination \
--name my-shield-delivery-destination \
--region us-east-1
- (任意) コンプライアンスや分析のためにログを保持する必要がある場合は、フローログのデータをバックアップします。
- 送信先リソースを削除します。警告: 送信先リソースを削除すると、すべてのフローログデータが完全に削除されます。
S3 バケットの場合:
aws s3 rb s3://<bucket-name> \
--force \
--region <region>
CloudWatch Logs のロググループの場合:
aws logs delete-log-group \
--log-group-name <log-group-name> \
--region <region>
Firehose ストリームの場合:
aws firehose delete-delivery-stream \
--delivery-stream-name <stream-name> \
--region <region>
まとめ
Shield Advanced の攻撃フローログは、DDoS 攻撃を効果的に理解し対応するために必要な可視性を提供します。既存のオブザーバビリティ基盤と統合できるため、新しいツールの導入や複雑なセットアップを必要とせず、すぐに活用できるインサイトを得ることができます。今すぐ Shield Advanced の保護でフローログを有効にして、攻撃パターンへの即時の可視性を確保し、DDoS 防御態勢を強化しましょう。
次のステップ
- Amazon S3 内のログをクエリするための Athena テーブルの構築
- Amazon CloudWatch Logs でのログデータの対話的な検索と分析
- 攻撃パターンに対する CloudWatch アラームの作成
フローログ設定に関する完全なリファレンスについては、AWS Shield Advanced のドキュメントを参照してください。
翻訳は Solutions Architect の 長谷川 純也 が担当しました。