【AWS】Amazon MacieはS3に潜む宇宙人を見抜けるのか試してみた
はじめに
こんにちは、ネクストモードの眞鍋です。
この記事では、まずAmazon Macieの基本を押さえたうえで、S3に人物のダミーデータと「宇宙人」を匂わせる文字列を配置し、Amazon Macieがそれを見分けられるかを検証します。

Amazon Macieとは
Amazon Macieは、機械学習とパターンマッチングを使って、Amazon S3内の機密データを自動的に検出・分類・保護するフルマネージドなデータセキュリティサービスです。
S3バケットに保存されたデータの中から、個人情報(PII)、認証情報、財務情報などの機密データを自動的にスキャンし、検出結果をダッシュボードで可視化します。
検出機能としては以下の2つとなります。
- 自動機密データ検出
- 有効化するだけで、自動的に機密データを検出する機能です。 オプションで、除外するS3バケットや検出対象のデータ識別子などの詳細設定も可能です。
- 細かい制御が不要な場合や、運用コストを抑えたい場合はこちらを利用します。
- 機密データ検出ジョブ
- ユーザーが明示的にスキャンジョブを作成する機能です。
- より細かく検出対象を指定したい場合や、即時に使用したい場合はこちらを利用します。
Amazon Macieのユースケース
Macieは「S3に何が入っているか分からない」「機密データが混ざっていないか不安」という状況で特に役立ちます。
代表的なユースケースは次のとおりです。
1. コンプライアンス対応
個人情報やカード情報がどこに保存されているかを把握し、適切に管理することが求められるケースです。
Macieを使うことで、S3バケット全体をスキャンし、対象データの保管場所を特定できます。
2. 認証情報の誤アップロード検出
開発者がAWSアクセスキーやAPIキーを誤ってS3にアップロードしてしまうケースは少なくありません。
Macieはこれらの認証情報を検出し、EventBridge経由でセキュリティチームに即座に通知できます。
3. データ移行時の事前調査
オンプレミスからS3へのデータ移行や、アカウント間のデータ移行を行う際に、移行対象データに機密情報が含まれていないかを確認できます。
移行前にMacieでスキャンすることで、適切なアクセス制御や暗号化を計画できます。
Amazon Macie運用における注意点
1. コスト管理
Macieの料金はスキャンしたデータ量に比例します。大量のデータを持つ環境では、コストが想定以上に膨らむ可能性があります。
対策として、スキャン対象をプレフィックスで絞り込む、サンプリング率を調整する、スキャン頻度を適切に設定するなどの工夫が必要です。
まずは小規模なバケットで試してからスケールアウトすることをおすすめします。
2. 誤検出への対応
Macieは機械学習とパターンマッチングで検出を行うため、誤検出が発生することがあります。
例えば、テストデータに含まれるダミーのクレジットカード番号や、ログファイル内のIPアドレスが個人情報として検出されるケースがあります。
許可リストやカスタムデータ識別子を活用して、誤検出を減らす運用が重要です。
3. 検出結果の保存期間
Macieの検出結果はデフォルトで90日間保存されます。
90日を超えると自動的に削除されるため、長期保存が必要な場合はS3への検出結果のエクスポート設定を行ってください。
Amazon MacieはS3に潜む宇宙人を見抜けるのか検証
今回の検証では、次の前提で進めます。
- Macieを有効化済みであること。
- 検証用のS3バケットを用意し、ダミーデータだけを投入すること。
1. S3にダミーデータを仕込む
ダミーデータとして、people_dummy.csvを用意し、検証用S3に設置します。

「宇宙」という単語をNGワードとし、即宇宙人の疑いをかけます。
ただし、「宇宙」という言葉は個人情報ではないため、そのままだとMacieが機密データとして扱わない可能性があります。
その場合は、後述のカスタムデータ識別子で「宇宙」を検知対象にします。
2. 「宇宙人」を見抜くためにカスタムデータ識別子を作成する
「宇宙人」という特定の文字列を確実に検知したい場合は、カスタムデータ識別子を使います。
たとえば、次のような方針が考えられます。
- キーワード一致(
宇宙)で検知する。 - もう少し現実的にするなら「宇宙人ID:XXXX」など、決まった形式を作り、正規表現で検知する。
Macieのサービスページ左ペインの「カスタムデータ識別子」→「作成」を順次クリックします。

「正規表現」に「宇宙」を入力し、「送信」をクリックします。

今回は未設定ですが、オプション項目については下記の通りです。
- キーワード
- 正規表現パターンの近くに存在する必要がある単語やフレーズを指定します。
キーワードを設定すると、正規表現にマッチしただけでは検出されず、その近くにキーワードも存在する場合のみ検出されます。
- 正規表現パターンの近くに存在する必要がある単語やフレーズを指定します。
- 単語を無視
- 正規表現にマッチしても、指定した単語が近くにある場合は検出対象から除外します。
キーワードとは逆の動きをする除外フィルターです。
- 正規表現にマッチしても、指定した単語が近くにある場合は検出対象から除外します。
- 最大一致距離
- キーワードまたは無視する単語が、正規表現のマッチ箇所からどれだけ離れていても有効とするかを文字数で指定します。
これらのオプションを組み合わせると、より検出精度を高めることが可能です。
3. Macieで機密データ検出ジョブを実行する
次に、Macieのジョブを作成して、対象バケットをスキャンします。
Macieのサービスページ左ペインの「ジョブ」→「ジョブを作成」を順次クリックします。

「S3バケットを選択画面」で検証用のS3バケットを選択し、「次へ」をクリックします。

「範囲を絞り込む」画面で「ワンタイムジョブ」を選択し、「次へ」をクリックします。
補足として、サンプリング深度を調整することにより、対象バケット内のオブジェクトのうち、何パーセントをスキャンするかを指定することが可能です。

「マネージドデータ識別子を選択する」画面では「カスタム」→「マネージドデータ識別子を使用しない」→「次へ」を順次クリックします。
今回は使用しませんが、基本的にはマネージドデータ識別子を使用し、カスタムデータ識別子で補う併用構成が一般的です。

「カスタムデータ識別子を選択」画面で、先ほど作成したものを選択し、「次へ」をクリックします。

一般設定の入力画面で、ジョブ名を入力し「次へ」をクリックします。

設定の確認画面にて「送信」をクリックすると、ジョブが開始されます。
4. 検出結果の確認
ジョブが完了したら、Macieのサービスページ左ペインの「検出結果」をクリックし、結果を確認します。

people_dummy.csv に関して、合計4つのワードが検出されていることが分かります。
5. 宇宙人の特定
Macieの検出結果をもとにpeople_dummy.csvを調査すると、以下の4名に宇宙人の疑いがかけられました。

この中で、大野さんについてはただの天体観測好きが引っかかっただけのようですが、他3人は明らかに宇宙人であることが分かりました。

さいごに
今回はAmazon Macieの概要と構成要素を整理したうえで、S3に仕込んだ人物データと「宇宙人」を示す文字列を検知し、件数を特定できるかという流れで検証手順をまとめました。
標準のマネージドデータ識別子に加え、カスタムデータ識別子を作成することで、組織固有の検知ルールを柔軟に実装できます。
本番運用では、検出対象の範囲やサンプリング深度を調整しながら、コストとセキュリティのバランスを取ることが重要です。
まずは小規模なバケットで検証を重ね、誤検出や除外設定を調整したうえで、全体に展開することをおすすめします。