AWS SDK Rubyを使うときはログレベルの設定に注意
概要
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.
実際の使い道としては、debug
かinfo
しか設定できないと思います、
リクエストパラメーター
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