ちょっと話題の記事

S3のサーバアクセスログで署名バージョンの確認ができるようになりました

2019.03.25

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

はじめに

AWSチームのすずきです。

Amazon S3、サーバアクセスログの項目が追加され、APIリクエストの署名バージョンなどの確認が可能になりました。

今回、追加されたログ項目について確認する機会がありましたので、紹介させて頂きます。

S3 Developer Guide Document History

設定

S3バケットのプロパティ、「サーバアクセスのログ記録」でアクセスログの出力が有効となります。

Amazon S3 でアクセスロギング

  • サーバアクセスのログ記録

解析対象のS3バケットのプロパティより、ログ出力先のS3バケット(ターゲットバケット)を指定します。

  • ログ出力先S3

オブジェクト一覧

  • ログファイルのプレビュー(S3 Select)

S3のアクセスログ、ターゲットのS3に出力されるまで1時間前後のタイムラグが生じる場合もあります。

追加項目

項目名 サンプル 備考
principal Id AI0000000000000000000 呼び出しを行ったエンティティの一意の識別子
Host Id s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= リクエストID
Signature Version SigV2 署名バージョン(SigV2/SigV4)
Cipher Suite ECDHE-RSA-AES128-GCM-SHA256 暗号スイート
Authentication Type AuthHeader 認証タイプ
Host Header s3-us-west-2.amazonaws.com 接続先S3エンドポイント
Ssl Protocol TLSv1.2 SSLプロトコル

確認

Regex101 を利用して、S3のアクセスログのパースに利用できる正規表現を確認してみました。

正規表現のデバッグに重宝した神サイトを紹介してみる

  • 正規表現
(\S+) (\S+) (\S+ \S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)
  • サンプルログ
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com TLSV1.1
  • パース結果

バリエーション

2019年3月25日時点では、項目数が23個、25個のログが存在しました。

S3のアクセスログ項目、アクセスログレコード形式の拡張の可能性について案内されています。

最新情報は、公式ドキュメントの「English」ページでご確認ください。

Amazon S3 Server Access Log Format

ログ項目23個

(\S+) (\S+) (\S+ \S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com

ログ項目25個

(\S+) (\S+) (\S+ \S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\"[^\"]*\") (\"[^\"]*\") (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com

まとめ

「サーバアクセスのログ記録」で設定できるS3のアクセスログより、API署名バージョンを確認する事ができました。

Amazon S3、2019年6月24日に署名バーション2の廃止が予告されています。

【超重要】対応しないと使えなくなるかも?!今、全S3ユーザがチェックすべき署名バージョン2の廃止について

CloudTrailのオブジェクトログを有効化する事で、S3利用時の署名バーションを確認する事が可能です。

全S3バケットのオブジェクトログを一発で出力するツールを作りました

廃止予定のS3署名バージョン2API利用をCloudWatchEventで検出してみた

しかし、S3 APIが大量に実行されているシステムでは、CloudTrail (100,000 件あたり、0.1USD)や、Guard Duty ( CloudTrail 1,000,000 イベントあたり 4.40 USD) の費用がネックとなり、オブジェクトログの設定が難しい事がありました。

S3 のサーバーアクセスのログ記録は、ログ出力先のS3料金のみで利用する事が可能です。 署名バージョンを確認する手段の一つとしてお試しください。

また、S3のアクセスログ、FirehoseとLambdaを利用して前処理を行うことで、Amazon Athena を利用した解析が可能になります。 下記記事も参考に頂ければと思います。

S3のアクセスログをサーバレスに処理してAthenaで解析してみた