S3のサーバアクセスログで署名バージョンの確認ができるようになりました
はじめに
AWSチームのすずきです。
Amazon S3、サーバアクセスログの項目が追加され、APIリクエストの署名バージョンなどの確認が可能になりました。
今回、追加されたログ項目について確認する機会がありましたので、紹介させて頂きます。
S3 Developer Guide Document History
設定
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」ページでご確認ください。
ログ項目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の廃止が予告されています。
CloudTrailのオブジェクトログを有効化する事で、S3利用時の署名バーションを確認する事が可能です。
しかし、S3 APIが大量に実行されているシステムでは、CloudTrail (100,000 件あたり、0.1USD)や、Guard Duty ( CloudTrail 1,000,000 イベントあたり 4.40 USD) の費用がネックとなり、オブジェクトログの設定が難しい事がありました。
S3 のサーバーアクセスのログ記録は、ログ出力先のS3料金のみで利用する事が可能です。 署名バージョンを確認する手段の一つとしてお試しください。
また、S3のアクセスログ、FirehoseとLambdaを利用して前処理を行うことで、Amazon Athena を利用した解析が可能になります。 下記記事も参考に頂ければと思います。