はじめに
Amazon S3バケットにアップロードされたファイルに機密情報が含まれていないかを検知・通知する仕組みの構築手順をまとめました。
本記事では、Amazon Macieを利用してS3内のJSONデータをスキャンし、機密データを検出した際にEventBridgeとAmazon SNSを経由してメール通知を行う構成を作成します。また、通知されるデータがデフォルトでは読みにくいため、設定を追加して読みやすい形式に整形する手順も含めて解説します。
アーキテクチャ構成
- S3への配置: 検査対象のJSONファイルを対象のS3バケットへアップロード
- Amazon Macie: S3バケットを手動(ジョブ)でスキャンし、機密データを検出
- Amazon EventBridge: Macieの検出イベント(Finding)をキャッチ
- Amazon SNS: EventBridgeからのデータを受け取り、管理者にメール通知
1. 検査対象のJSONファイルをS3へアップロードする
テスト用の機密データ(ダミー)を含んだJSONファイルを作成し、対象のS3バケットへ配置します。
ダミーデータの作成
以下の内容で dummy-data.json を作成します。Macieが検知できる形式として、テスト用のクレジットカード番号やAWSのダミーアクセスキーを記載しています。
[
{
"Type": "Credentials",
"AWSAccessKeyId": "AKIAQR7BN2XPZM4KS9TV",
"AWSSecretAccessKey": "Rf3kL8mN+Q2pS5tU9vW1xZ4yA7bD0eE6fGhJiKn"
},
{
"Type": "PersonalInformation",
"FullName": "example test",
"Address": "東京都テスト区1-2-3",
"PhoneNumber": "03-1234-5678",
"Email": "test.test@example.com",
"DriverLicenseNumber": "D123456789012",
"PassportNumber": "AB1234567"
}
]
S3バケットへのアップロード
作成したファイルをS3バケットへアップロードします。検証時はAWSマネジメントコンソール画面から直接アップロードするか、AWS CLIを使用して配置してください。
2. 通知設定(Amazon SNS と EventBridge)
Macieが検知した結果をメールで受け取るための経路を設定します。
Amazon SNS の設定
- SNSコンソールから「トピックの作成」をクリックします。
- タイプは「スタンダード」を選択し、任意の名前(例:
macie-alerts-topic)を入力して作成します。 - 作成したトピックから「サブスクリプションの作成」をクリックします。
- プロトコルを「Eメール」に設定し、通知先のメールアドレスを入力して保存します。
- 入力したアドレス宛に届く確認メール内のリンクをクリックし、サブスクリプションを有効化します。
Amazon EventBridge の設定
- EventBridgeコンソールから「ルールの作成」をクリックします。
2.トリガーイベントにMacie findingを指定します。 - ターゲットに、先ほど作成したSNSトピックを指定します。
- ルール名を入力してルールの作成を完了します。
3. Macieで手動スキャンを実行する
S3に配置されたファイルに対して、Macieのジョブを作成しスキャンを実行します。
検証を目的とするため今回は手動スキャン(1回限りのジョブ)を使用します。
基本的にはそのまま進めればOKです。
- Macieコンソールの左メニューから「ジョブ」を開き、「ジョブの作成」をクリックします。
- スキャン対象のS3バケットを選択して次へ進みます。
- 「1回限りのジョブ (One-time job)」を選択します。
-
オブジェクト条件の指定
不要なファイルのスキャンコストを抑えるため、「オブジェクト条件 (Object criteria)」で拡張子を絞ります。
5 マネージドデータ識別子の設定
「推奨」を選択します。
6. ジョブ名を入力して送信します。
4. デフォルト設定でのメール確認
ジョブが完了し、機密データが検出されると、EventBridgeを経由してメールが届きます。
しかし、デフォルトの設定では以下のように抽出された生データのJSONがそのまま送信されるため、非常に視認性が悪く、どのバケットの何が検知されたのかを瞬時に判断することが困難です。
5. 通知の整形(入力トランスフォーマー)と再確認
通知内容を人間が読みやすい形に整えるため、作成したEventBridgeルールを編集します。
- EventBridgeコンソールから、手順2で作成したルールを選択し「編集」をクリックします。
- ターゲットの項目の入力変換をクリックします。
- 「ターゲット入力を設定」から「入力トランスフォーマー」を選択し、以下の通り設定します。
入力パス (Input Path):
{
"accountId": "$.detail.accountId",
"bucketName": "$.detail.resourcesAffected.s3Bucket.name",
"objectKey": "$.detail.resourcesAffected.s3Object.key",
"findingType": "$.detail.type",
"severity": "$.detail.severity.description",
"region": "$.region",
"time": "$.time"
}
入力テンプレート (Input Template):
"AWS Macie が機密データを検出しました。"
""
"- 対象バケット: <bucketName>"
"- 対象オブジェクト: <objectKey>"
"- 検出タイプ: <findingType>"
"- 重要度: <severity>"
"- アカウントID: <accountId>"
"- リージョン: <region>"
"- 検出時刻: <time>"
""
"詳細についてはコンソールの Macie ダッシュボードをご確認ください。"
- ルールの編集を保存します。
- 再度Macieの画面に戻り、先ほどと同じ対象バケットに対して「1回限りのジョブ」を作成・実行します。
整形されたメールの確認
ジョブ完了後、今度は以下のような見やすい形式でアラートメールが届くようになります。
AWS Macie が機密データを検出しました。
- 対象バケット: your-target-bucket-name
- 対象オブジェクト: dummy-data.json
- 検出タイプ: Credentials:IAM/SecretAccessKey
- 重要度: High
- アカウントID: 123456789012
- リージョン: ap-northeast-1
- 検出時刻: 2026-02-22T04:30:00Z
詳細についてはコンソールの Macie ダッシュボードをご確認ください。
おわりに
SCSの復習も兼ねてやってみました。






