yuj1osm's tech blog

クラウド、セキュリティ、AIなど

Amazon Macieで機密情報を検出する方法

クラウドやAIの技術的な発達により、データセキュリティの重要性はますます増加し、DSPMという概念が注目されています。
今回はAWSのDSPM機能である、Amazon Macieについて紹介します。

DSPMとは

2022年にGartnerがData Security Posture Management (DSPM)の概念を提唱しました。
DSPMは、機密データがどこに保存されているか、誰がそのデータにアクセスできるのか、どのように使用されているのか、そして保存されているデータやアプリケーションのセキュリティ態勢はどのようなものなのかを可視化します。
これにより、データセキュリティの現状を評価し、潜在的な脅威を特定・分類することが可能になります。 DSPMが提唱されてからは、様々なDSPM製品が流通しています。

www.gartner.com

Amazon Macieとは

Amazon Macieは、機械学習とパターンマッチングを使用して、S3バケットに保存されているオブジェクトを精査し、機密情報を検出できるサービスです。
機密データを自動的に検出する方法と、ジョブを作成して実行する方法があります。
検出には、AWSが標準で用意してあるマネージドな識別子と、ユーザが自由に定義できるカスタムデータ識別子が使えます。
また、EventBridgeにより検知時のアクションを定義したり、検知情報をSecurity Hubに連携することができます。

aws.amazon.com

サポートされているストレージクラスとオブジェクトのフォーマットは、以下のドキュメントに記載されています。

docs.aws.amazon.com

Amazon Macieのセットアップ

Amazon Macieの画面を表示し、「ご利用開始にあたって」をクリックします。

「Macieを有効化」をクリックします。

初回は48時間以内で結果が表示されます。
概要では検出されたバケットやオブジェクトの統計が表示されます。
「データのセキュリティ」ではバケットの公開状況、暗号化状況、共有状況が確認できます。

ほかにも、検出結果の統計が確認できます。

もともとMacieは、ジョブを設定してスキャンをする必要がありましたが、アップデートにより「機密データ自動検出」ができるようになっています。
Macie有効化直後にスキャンが開始されていたのは、自動検出機能がデフォルトで有効になっているためです。

Macieの画面では、アカウントごとのバケットの機密性をヒートマップで表示してくれます。

「凡例」でアイコンの意味を確認できます。
赤は機密性が高く、青は非機密性が高いことを示しています。

バケットの機密スコアを確認することができ、スコアが高いほど多くの機密データが含まれていることを示しています。

スキャンした結果を保存するためのS3バケットが必要になります。
検出結果から「今すぐ設定」をクリックします。

バケットを作成し、暗号化のためのKMSキーを作成します。

流れに沿ってキーを作成します。

MacieがKMSを利用できるように、キーポリシーに追記する必要があります。

公式ドキュメントを参考に、以下のポリシーのリージョンとアカウントIDを自身の環境に合わせて変更し、KMSポリシーに追記します。

docs.aws.amazon.com

{
    "Sid": "Allow Macie to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "macie.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Encrypt"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "111122223333"
         },
         "ArnLike": {
             "aws:SourceArn": [
                 "arn:aws:macie2:Region:111122223333:export-configuration:*",
                 "arn:aws:macie2:Region:111122223333:classification-job/*"
             ]
         }
    }
}

作成したKMSキーを指定したら保存します。

機密情報を検出させてみる

事前準備

以下のダミーデータを検出させます。

Name,Birthday,CreditCardNumber,PassportNumber,PhoneNumber,Email,AWSAccessKeyId,AWSSecretAccessKey
John Smith,1992/10/11,4012888888881881,TA1234567,03-1234-5679,john@example.com,AKIAIOSFODNN7EXAMPLE,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

ダミーデータをバケットにアップロードします。

のちほど、具体的に何が検出されたのかを確認するために、「サンプルを公開」を有効にしておきます。

マネージドデータ識別子で検出させる

デフォルトで用意されているマネージドデータ識別子を使って、ダミーデータを検出させます。
ジョブの画面で「ジョブを作成」をクリックします。

対象として、機密情報が格納されたバケットを選択します。

設定した頻度でスケジュールが可能ですが、ここではワンタイムジョブを選択します。

すべてのマネージドデータ識別子を使うため、「推奨」を選択します。

あとはデフォルトのままです。

ジョブ名を入力します。

最後に「送信」をクリックします。

10分ほどでステータスが完了になります。

検出結果を確認すると、Mediumで1件あがっています。

こちらが詳細な検出結果です。
検出されたオブジェクトや理由が確認できます。

今回は個人情報の分類で、イタリアのパスポート番号が検知されたようです。

詳細な結果の場所を確認すると、2行目4列目のカラム名がPassportNumberの値が検出されたようです。

"classificationDetails": {
    "jobArn": "arn:aws:macie2:us-west-2:xxxxxxxxxxxx:classification-job/1cffe3888b93782070235bfb63eb6601",
    "result": {
      "status": {
        "code": "COMPLETE"
      },
      "sizeClassified": "239",
      "mimeType": "text/csv",
      "sensitiveData": [
        {
          "category": "PERSONAL_INFORMATION",
          "totalCount": "1",
          "detections": [
            {
              "type": "ITALY_PASSPORT_NUMBER",
              "count": "1",
              "occurrences": {
                "lineRanges": [],
                "pages": [],
                "records": [],
                "cells": [
                  {
                    "row": "2",
                    "column": "4",
                    "columnName": "PassportNumber"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "detailedResultsLocation": "s3://macie-result-bucket-20250521/AWSLogs/xxxxxxxxxxxx/Macie/us-west-2/1cffe3888b93782070235bfb63eb6601/614213050910/7155e0d0-a848-3b36-ba77-677c20ebce3a.jsonl.gz",
    "jobId": "1cffe3888b93782070235bfb63eb6601",
    "originType": "SENSITIVE_DATA_DISCOVERY_JOB"
  }

サンプルを公開の「確認」をクリックすると、以下の画面に遷移します。
ここで、「サンプルを公開」をクリックします。

すると、実際に検出された情報を確認することができました。

なお、マネージドデータ識別子にはキーワードが必須のものもあります。
キーワードとは、特定のタイプの機密データを検出するために、データに近い場所に配置される文字列のことで、Macieはこれらのキーワードを基に機密データを識別します。

docs.aws.amazon.com

カスタムデータ識別子で検出させる

カスタムデータ識別子を作成して、ダミーデータを検出させます。
「カスタムデータ識別子」から「作成」をクリックします。

今回はクレジットカード番号のみ検出させます。
以下はVISAのクレジットカード番号を検出する正規表現の例です。

4[0-9]{12}(?:[0-9]{3})?$

正規表現を入力します。
右の画面で、正規表現が正しく動作するか、実際のデータを入力して確認できます。   また、キーワードと最大一致距離を設定することで、キーワードから近い位置に機微情報があるかチェックできます。 設定できたら「完了」をクリックします。

ジョブを作成していきます。
途中までは前述のマネージドデータ識別子と同じです。
ここでは、「カスタム」と「マネージドデータ識別子を使用しない」を選択します。

先ほど作成したカスタムデータ識別子を選択します。

ジョブ名を入力します。

最後に「送信」をクリックします。

10分ほどでステータスが完了になります。   検出結果を確認すると、Highで1件あがっています。

こちらが詳細な検出結果です。
検出されたオブジェクトや理由が確認できます。

今回はカスタムデータ識別子の分類で、クレジットカード番号が検知されており、想定通りの検出です。

詳細な結果の場所を確認すると、2行目3列目のカラム名がCreditCardNumberの値が検出されたようです。

"classificationDetails": {
    "jobArn": "arn:aws:macie2:us-west-2:xxxxxxxxxxxx:classification-job/5bff942cb02ba5ddb8bb8dd6d4dbf10c",
    "result": {
      "status": {
        "code": "COMPLETE"
      },
      "sizeClassified": "239",
      "mimeType": "text/csv",
      "sensitiveData": [],
      "customDataIdentifiers": {
        "totalCount": "1",
        "detections": [
          {
            "arn": "f0001335-946b-4467-ad57-c1f01d7a558d",
            "name": "test-creditcard",
            "count": "1",
            "occurrences": {
              "lineRanges": [],
              "pages": [],
              "records": [],
              "cells": [
                {
                  "row": "2",
                  "column": "3",
                  "columnName": "CreditCardNumber"
                }
              ]
            }
          }
        ]
      }
    },
    "detailedResultsLocation": "s3://macie-result-bucket-20250521/AWSLogs/614213050910/Macie/us-west-2/5bff942cb02ba5ddb8bb8dd6d4dbf10c/xxxxxxxxxxxx/753c9f5f-928c-378e-93bb-2ee1fc452539.jsonl.gz",
    "jobId": "5bff942cb02ba5ddb8bb8dd6d4dbf10c",
    "originType": "SENSITIVE_DATA_DISCOVERY_JOB"
  }

サンプルを公開の「確認」をクリックすると、以下の画面に遷移します。
ここで、「サンプルを公開」をクリックします。

すると、実際に検出された情報を確認することができました。

サンプル検出結果の生成

すぐにデータが用意できないけど検出結果を見てみたいときは、サンプル検出結果を生成できます。
設定にある「サンプル調査結果の生成」をクリックします。

すると、検出結果でサンプル調査結果を確認することができます。

まとめ

Amazon Macieで機密情報を検出する方法を紹介しました。
手軽にDSPMを始めることができて良いサービスだと思います。
日本語には対応していないものの、カスタムデータ識別子で検出させることはできます。
S3バケットから情報流出してセキュリティインシデントになってしまうケースは多々あるので、試してみる価値はあるかと思います。
今後のリスクに備えてMacieの活用を検討してみてはいかがでしょうか。