AWS SDK Rubyを使うときはログレベルの設定に注意

2022/04/03に公開

概要

AWS SDK Rubyを使用した時にデフォルトのログ出力設定ではAPIリクエストの中身を出力してしまいます。

そのため個人情報などのログに出してはいけない情報をログに思いがけず出力してしまうことになります。

ログレベルの設定方法が分かりにくかったのでこの記事でまとめます

結論

このように設定します

AWS.config(:log_formatter => AWS::Core::LogFormatter.default(max_string_size: 0))

AWS SDK Rubyのログ出力の設定

ログレベル

AWS SDK Rubyのログでは一般的に考えられる以下のような出しわけができません。

  • エラーならエラーレベルの出力
  • 重要でない情報ならdebugレベルでの出力

実はAWS SDK Rubyからのログ出力は全て同じログレベルで出力されます

All AWS SDK log lines will come out at the same log level, but it is configurable. By default, it is :debug.

https://github.com/aws/aws-sdk-rails/issues/3#issuecomment-171752470

実際の使い道としては、debuginfoしか設定できないと思います、

リクエストパラメーター

AWS SDK Rubyでログを出力するとPOSTメソッドでのリクエストでさえも、リクエストパラメーターがログに出力されてしまいます。

I, [2013-02-14T09:49:12.856086 #31922]  INFO -- : [AWS S3 200 0.194491 0 retries] head_object(:bucket_name=>"aws-sdk",:key=>"key")

引用:AWS Developer Tools Blog Logging Requests

対処法

こちらのドキュメントに書かれている方法で、ログの書式を設定することで、リクエストパラメーターの中身が出力されてしまうのを防ぐことができます。

また、大半のケースでは書式設定まで細かにする必要もないので、その時のための書式設定も用意されています。

Instead of providing your own pattern, you can choose a canned log formatter.

Formatter.default
Formatter.colored
Formatter.short

shortを使うとリクエストパラメーターが出力されなくなります。

しかし同時にリトライ回数もログに出力されなくなってしまうので、僕は以下のようにしています。

AWS.config(:log_formatter => AWS::Core::LogFormatter.default(max_string_size: 0))

max_string_size (Integer) — default: 1000 — When summarizing request parameters, strings longer than this value will be truncated.

こうすることでリクエストパラメーターのログ出力が0文字(出力しない)になります。

Discussion