見出し画像

CloudWatch Logsが個人情報保護の盲点になっていませんか?

キャンサースキャンでSRE兼インフラ担当をしている保坂と申します。
先日JAWS-UG SRE支部 #6でLTしてきました 。JAWS-UGはAWSのユーザーグループで、色々なテーマで知見の共有などが行われております。せっかくなのでLTでは伝えきれなかった部分を解説してみようと思います。これまでnoteではあまり技術的なことには触れてきませんでしたが、キャンサースキャンのことをもっと知ってもらいつつ、誰かの参考になる記事が書きたいと思い今回は記事にしました。
発表資料は下記で公開しております。


JAWSUG SRE支部 #6「CloudWatch どこまで行けるか選手権」 LT発表資料


この記事の要約

  • ログも含めたデータのライフサイクルを把握しましょう。

  • ログも機密情報保護対策をしましょう。

    • 案1: data protection機能でデータをマスキングする。

    • 案2: Subscription Filterを使って、S3にログを転送しながら機密情報を削除して保存する。

    • 案3: サードパーティーサービスやS3に出力してから加工する。

    • その他の対策: ロググループ単位でKMS暗号化して、暗号化削除しましょう。

ログも含めたデータライフサイクルの把握

今回の発表の趣旨は、ログも含めて機密情報保護の対象にしたときに、どのように対策をするかというテーマでした。
そこでまず必要なのは、データのライフサイクルの整理です。これ自体は機密情報の保護を考える際に最初に着手することの一つですので、多くの方が取り組まれていると思います。
今回のポイントは、整理の中にCloudWatchを加えて検討して、どうしてもログに機密情報が出力されてしまう場合に正しく対策をとる必要がある点です。

CloudWatch Logsも機密情報保護の対策をする

そもそもの話、アプリケーション側で対応すれば機密情報を出力しないようにすることもできます。一方で例えばSagemakerを使ってデータを探索したり、機械学習のモデルを作成するなど、柔軟な分析をするためには逆にログに情報をある程度出すということが前提になるケースが出てきます。
こうした場合はログを適切に管理して、削除するなどの対策が必要となるわけですが、同時に監査ログとして長期保存したいという要望も出てきます。
そのためログに機密情報保護の対策しつつ保存する、という要件が生まれます。
弊社はここ数年で各種基盤やサービスをAWS上に移行を進めており、実際に一部のサービスについてアプリケーションでは制御仕切れない例が出てました。今回CloudWatch Logsに着目した機密情報の保護をテーマにしたのは、そういった背景があります。

ちなみに弊社はSagemakerを使った柔軟なデータ分析からシステム化されたデータ処理、ECSを使った行動変容を促すようなWebサービス(例えばSMSを使ったソーシャルマーケティングサービス)など幅広いサービスをAWS上で運用しております。
それぞれ要件や使うサービスが異なるため、多様な運用を支える基盤構築やSRE活動をするのが楽しさの一つです。データ分析の結果を社会実装していく一連の流れは考えることが多いので、幅広い知識をつけながら「人と社会を健康に」するというゴールベースの仕事に関わりたい方を弊社はお待ちしております!

案1: data protectionでデータをマスキング

前置きが長くなりましたが、機密情報保護の方法を見ていきましょう。
まず、CloudWatch Logsには機密情報保護のdata protection機能があります。2022年のre:inventで発表された比較的新しい機能で、ロググループ単位で有効化すると、出力されるログの中で機密情報を*(アスタリスク)に置換してマスクしてくれます。

ただしこの機能は日本語非対応です。クレカの番号などグローバルで同じ形式のデータは対応できますが、住所や名前等はマスクしてくれません。
弊社がSagemakerで保存しているデータの中には日本語の機密情報が含まれる場合があるため、これは機能しませんでした。
(余談ですがこの機能の存在自体がログのマスキングの需要を示しているので、そのうち日本語対応してくれないかな…と勝手に期待しております。)

案2: Subscription filterで機密情報以外をS3に転送して保存する

CloudWatch Logsにログを出力する部分での対策が難しいことがわかったので、今度は出力後のデータを加工して保存する方法を試してみます。
CloudWatch LogsにはSubscription Filterという機能があり、ロググループに出力されたログをフィルタした上でKinesis Data Firehoseなどにストリームすることができます。Firehoseの出力先S3を指定することで、CloudWatch Logsからログを転送できます。
CloudWatch Logsは長期保存すると高くつくので、S3に転送した上でCloudWatch Logs側はライフサイクルを設定して削除してしまうのによく使われます。
ポイントはSubscription Filterは言葉通りフィルタすることができることです。特定の文字列を含む場合にのみストリームするなどの条件設定が可能です。そのため機密情報がログにどのように出力されるかがわかれば、フィルタをかけることで機密情報以外のログを転送することが可能です。
ただし下記の条件があり、複雑な条件は設定できないなどの課題があります。

  • Subscription Filterは簡単な条件しか設定できず、正規表現等は使えない。

  • ログストリーム単位でフィルタされるため、一行のログの一部だけをマスクするといった使い方はできない。

  • 一つのロググループに最大2つのSubscription Filterしか設定できない。

案3: サードパーティーサービスやS3に出力してから好きに加工する

案1でも案2でも対応できない場合、残る手段は結構コストがかかる面倒な話になります。一旦S3に転送した後に、なんらかの方法でさらに加工して別のバケットに保存用のログを出力する方法です。
AWSのサービスとしてはGlueやLamdbaがあり、サードパーティーでもいくつか選択肢が有りますが、いずれにせよ開発が面倒だったり導入にコストがかかってきたりします。
この方法は、それでも対応する価値がある場合は考えてみるという案になってきます。多くの場合は、案1・2で運用するのが現実的な選択肢になり、案3が視野に入る場合はそもそも機密情報をログに出力しないようにコードやアプリケーションを変更することになるかと思います。

ロググループをKMS暗号化して、暗号化消去に対応する

少し話が変わりデータのマスキングには関係ありませんが、データの厳格な消去に対応する必要がある場合は、暗号化消去を検討する手があります。

暗号化消去とは、データを暗号化した後で、暗号鍵を消去することでデータの復号を不可能にすることで、物理的な削除と同レベルのデータ削除を実現することです。
この削除方法は米国国立標準技術研究所(NIST)が公開しているNIST-SP-800-88という文書で規定されているものです。日本語訳をIPAが公開しているので、詳細は下記をご覧ください。
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

CloudWatch Logsではロググループ単位でKMSの暗号化に対応しているので、KMSで作成した鍵を使って暗号化しておいてデータ削除のタイミングで鍵ごと消すと、暗号化消去した状態を実現できます。
なお下記のようにいくつかのポイントがあるのでご注意ください。

  • 暗号鍵を削除すると、その鍵で暗号化したすべてのデータが復元できなくなるので、ライフサイクルに合わせて鍵を作成する必要がある。

  • 暗号化の対象となるのは、鍵を指定したタイミング以降に書き込まれるデータのみとなる。既存のロググループに鍵をかける場合、その時点で書き込まれているログイベントは暗号化の対象外となる。

  • Terraformなどでロググループを作成してこの機能を有効にする場合、/aws/で始まるロググループはAWS側で予約されているロググループとなるため、作成時にエラーが出てしまう。そのため一度作成されたロググループをimportする必要がある。

3点目だけ簡単に補足すると、例えばSagemakerなどのマネージドサービスなどのログは、ロググループの出力先を選べずデフォルトのAWS管理のロググループに出力されます。これを先回りしてterraformやAPI経由で作成しようとすると、予約されているから作れないというエラーが発生します。
そのため面倒ですが、一度何らかの形でロググループをマネージドサービス側から作成してあげて、importすることが必要となります。そうすることで初めてKMS暗号化やSubscription Filterなどをコード管理することができるようになります。ちょっとというか、かなり面倒ですが回避方法は見つけられませんでした…。

弊社はAWSやGCPがわかるSRE・インフラエンジニアを募集しております!

初めての記事で力んでしまいましたが、記事は以上となります。
改めまして、弊社はクラウド上でSRE活動やインフラ構築に取り組むエンジニアを募集しております!弊社は幅広いプロダクトをクラウド上で扱っており、取り組むテーマは多岐にわたります。弊社のミッションを達成するにはまだ解決すべき課題が盛りだくさんです。
クラウドの力で課題解決に関わりたい、技術力を高めて成長したいという方をお待ちしております。カジュアルなお話の場も積極的に作っておりますので、お気軽にご連絡ください!

(執筆:保坂将平)


この記事が気に入ったらサポートをしてみませんか?