Amazon Macieを検証してみた

記事タイトルとURLをコピーする

CI部の村上です。

唐突ですがS3 情報流出と検索すると怖いニュースがいっぱい出てきますね。 AWSのストレージサービスであるS3から情報が漏れた事例ですが、主な原因はヒューマンエラーによる設定ミスのようです。

というわけで今回はS3にある大切な情報を守るのに役立つかもしれないAmazon Macieを検証してみます。

Amazon Macieとは?

以下ドキュメントの抜粋です。

Amazon Macie は、機械学習とパターンマッチングを使用して AWS の機密データを検出して保護する、フルマネージドのデータセキュリティとデータプライバシーのサービスです。

一言で言うとS3に保存されているデータから機微情報が含まれたファイルを検出するサービスです。

設定方法の手順や機微情報の検出方法については下記のブログをご参照ください。

blog.serverworks.co.jp

Amazon Macieで全バケットの状態を可視化

上記のブログでも紹介されていますが、Amazon Macieを使用すると以下のようにS3バケットの状況を一元管理できます。

https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712024440.png

マルチアカウントでの設定も可能ですので、なるほど、これは意図しない情報流出を防ぐのに有用ですね。

機微情報の検出

Amazon Macieはバケット内に含まれる機微情報(名前、電話番号、クレジットカード番号など)を検出することもできます。

様々な人やリソースが日々S3にデータをアップロードしている環境で、いちいち保存されているデータの内容まで把握してられませんよね。これは魅力的な機能です。

ただし制約として、マネージドな識別子の場合では日本語の検出ができません。

とはいえ英数字なら名前やクレジットカード番号はすべてのリージョンで使用できるようなので、さっそく試してみます。

今回試したのは以下の情報です。

  • 名前
  • 携帯電話番号(ハイフンあり・なし)
  • クレジットカード番号

名前

Macieで検出する名前はフルネームに限る

いきなり名前でハマりました。

アメリカ人の人気の名前TOP10(MichaelChristopherなど)、日本人に多い苗字TOP10(Suzukiなど)を試してみたのですが何も検出されませんでした。

ドキュメントを読むとこのように記載があります。

Macie detects full names only.

はい、すいませんでした。あらためてフルネームを含むファイルで試してみます。

姓名の間にはスペースがないと検出されない

今回試したのは以下のような2つの.xlsxファイルです。赤枠で囲った部分が検出された機微情報です。

f:id:swx-murakami:20201223192716p:plain

Macieのコンソール画面には以下のように表示されます。2cellsPersonalな情報が検出されたことが分かりますね。

f:id:swx-murakami:20201223191507p:plain

また、2cellsの部分をクリックすると、どのセルで検出されたのかも教えてくれます。

f:id:swx-murakami:20201223191811p:plain

ただし、アメリカの名前も日本の名前も姓名の間にスペースを入れないと検出してくれないようです。

電話番号

つづいて電話番号です。ハイフンの有無など、計4パターンを検証しました。

f:id:swx-murakami:20201223213302p:plain

結果は以下です。ひとつのセルの中に別の情報があっても検出してくれたものの、ハイフンつきの電話番号は検出してくれませんでした。

f:id:swx-murakami:20201223213613p:plain

ただ、これはあくまでマネージドな識別子のみを使っての検出結果です。後ほど、カスタムデータ識別子を定義してハイフンつきの電話番号も検出されるよう設定してみます。

クレジットカード番号

最後にクレジットカード番号です。

クレジットカード番号はルーンアルゴリズムによるチェックディジットを含む13-19桁のフォーマットが必要です(要はランダムな数字は検出しない)。

また、クレジットカード番号は頭の6桁が発行会社を表しています。

今回は実在する発行会社の番号である場合と、テキトーに1111から始まる数字を試してみました。

f:id:swx-murakami:20201223230257p:plain

結果はどちらも検出されませんでした。

実在する発行会社の番号を使用しましたが、おそらく末尾を任意の数字にしたことで、ルーンアルゴリズムによるチェックディジットの判定でクレジットカード番号ではないと判断されたと考えています。

カスタムデータ識別子を使ってハイフンつきの電話番号も検出する

カスタムデータ識別子とは?

カスタムデータ識別子とはユーザーが定義する識別子です。正規表現を使用することができますので、さきほど検出できなかったハイフンつきの電話番号も検出することができます。また、これを使えば日本語の検出も可能になります。

カスタムデータ識別子を定義する

カスタムデータ識別子のメニューから簡単に作成できます。

ただし、作成後は編集することができませんので作成前にテストするようにしましょう。

f:id:swx-murakami:20201223223007p:plain

これでハイフンつきの電話番号も検出することができました。

f:id:swx-murakami:20201223223823p:plain

ちなみにカスタムデータ識別子の場合、重要度は一律Mediumになるそうです。

For this type of finding, the severity level is always Medium.

docs.aws.amazon.com

まとめ

いかがでしたでしょうか。簡単にまとめると、

  • 全S3バケットの状況(パブリックアクセスかどうか、暗号化されているか等)が可視化できる
    • マルチアカウントにも対応
  • 各バケットに格納されている機微情報を検出できる
    • ただしマネージドな識別子の場合、日本語非対応などの制約がある

というような感じです。冒頭に紹介したブログにあるとおり、アップデートによって料金がかなりリーズナブルになっているので、試しに使ってみるのは大いにアリだと思います。

ただ制約もあるので、検出されなかったからといって安心できる訳ではなさそうですね、今後のアップデートにも期待したいところです。

以上です、ありがとうございました。

村上博哉 (執筆記事の一覧)

2020年4月入社。機械学習が好きです。記事へのご意見など:hiroya.murakami@serverworks.co.jp