Amazon Macieのマネージドデータ識別子を試してみた

# 背景・目的
[Amazon Macieを試してみた](https://qiita.com/zumax/items/f3dc4653d05f5c56b73e)では、Amazon Macie（Macieという。）の基本的な特徴を整理し、簡単なセットアップを行いました。

本書では、マネージドデータ識別子の挙動を確認します。

# まとめ

マネージドデータ識別子は、下記の特徴を有します。

|特徴 |説明|
|:--|:--|
|手法|Macieは、機械学習やパターンマッチングなどの基準と手法|
|ロジック|データの近くにキーワードが必要|
|多くの国またはリージョンの機密データを検出|・財務データ<BR>・PHI<BR>・PII|
|特定の種類の機密データも検出|・AWS シークレットアクセスキー<BR>・クレジットカード番号<BR>・パスポート番号|


# 概要
## Amazon Macie でのマネージドデータ識別子の使用
> Amazon Macie は、機械学習やパターンマッチングなどの基準と手法の組み合わせを使用して、Amazon Simple Storage Service (Amazon S3) オブジェクトの機密データを検出します。これらの基準と手法は、総称してマネージドデータ識別子と呼ばれ、複数のタイプの財務データ、個人健康情報 (PHI)、個人を特定できる情報 (PII) など、多くの国またはリージョンの機密データタイプの大規模かつ増加しているリストを検出できます。各マネージドデータ識別子は、特定の種類の機密データ (たとえば、AWS シークレットアクセスキー、クレジットカード番号、または特定の国またはリージョンのパスポート番号) を検出するように設計されています。

> Macie は、マネージドデータ識別子を使用して、次のカテゴリの機密データを検出できます。
> - プライベートキーや AWS シークレットアクセスキーなどの認証情報データに関する認証情報
> - クレジットカード番号や銀行口座番号などの財務データに関する財務情報
> - 医療保険や医療識別番号などの PHI、および運転免許証識別番号やパスポート番号などの PII に関する個人情報

- Macieは、機械学習やパターンマッチングなどの基準と手法を組み合わせて検出する
- S3のデータが対象
- 下記のような多くの国またはリージョンの機密データを検出できる
    - 財務データ
    - PHI
    - PII
- また、特定の種類の機密データも検出できる
    - AWS シークレットアクセスキー
    - クレジットカード番号
    - パスポート番号

## Amazon Macie マネージドデータ識別子のキーワード要件
> マネージドデータ識別子を使用して特定のタイプの機密データを検出するには、Amazon Macie ではデータの近くにあるキーワードが必要です。特定のタイプのデータに当てはまる場合、このセクションのその後のトピックでは、そのデータのキーワード要件を示します。

- データの近くにキーワードが必要

> キーワードが特定のタイプのデータの近くにある必要がある場合は、通常、キーワードはデータから 30 文字以内 (包括的) になければなりません。追加の近接要件は、Amazon Simple Storage Service (Amazon S3) オブジェクトのファイルタイプまたはストレージ形式によって異なります。

- キーワードからデータは30文字以内にある必要がある
- その他はS3のファイルタイプや、ストレージ形式により異なる

### Structured, columnar data (構造化された列指向データ)
> 列指向データでは、キーワードは同じ値の一部であるか、値を格納する列またはフィールドの名前内にある必要があります。これは、Microsoft Excel ワークブック、CSV ファイル、および TSV ファイルに当てはまります。

> たとえば、フィールドの値に SSN と米国社会保障番号 (SSN) の構文を使用する 9 桁の番号の両方が含まれている場合、Macie はフィールド内の SSN を検出できます。同様に、列の名前に SSN が含まれている場合、Macie は列内の各 SSN を検出できます。Macie は、その列内の値を、キーワード SSN の近くにあるものとして扱います。

- フィールドの値に、SSNと9桁の番号が両方含まれている場合、MacieはSSNを検出できる
- 列の名前にSSNが含まれる場合、Macieは列内の各SSNを検出できる


### Structured, record-based data (構造化されたレコードベースのデータ)
> レコードベースのデータでは、キーワードは同じ値の一部であるか、値を格納するフィールドまたは配列へのパス内の要素の名前内にある必要があります。これは Apache Avro オブジェクトコンテナ、Apache Parquet ファイル、JSON ファイル、および JSON Lines ファイルに当てはまります。

-　キーワードは同じ値の一部
-　値を格納するフィールド、配列へのパス内の要素の名前内にある必要がある。

> たとえば、フィールドの値に credentials (認証情報) と AWS シークレットアクセスキーの構文を使用する文字シーケンスの両方が含まれている場合、Macie はフィールド内のキーを検出できます。同様に、フィールドへのパスが $.credentials.aws.key である場合、Macie はフィールド内の AWS シークレットアクセスキーを検出できます。Macie は、そのフィールド内の値を、キーワード credentials (認証情報) の近くにあるものとして扱います。


- フィールドにCredentialsとAWSシークレットアクセスキーの構文を使用する文字シーケンスの両方が含まれる

### Unstructured data (非構造化データ)
> Adobe Portable Document Format ファイル、Microsoft Word ドキュメント、E メールメッセージ、および CSV、JSON、JSON Lines、および TSV ファイル以外の非バイナリテキストファイルでは、追加の近接要件はありません。通常、キーワードはデータから 30 文字以内 (包括的) になければなりません。これには、これらのタイプのファイルに含まれるテーブルなどの構造化データが含まれます。

- Adobe、Word、Eメールなどは、近接要件はない

## クイックリファレンス: Amazon Macie マネージドデータ識別子




# 実践
## 前提
下記の3種類のデータを用意し、S3バケットにアップロードします。
- PII
    ```
    {"Type": "PersonalInformation", "FullName": "山田 XXXX", "Address": "東京都渋谷区", "PhoneNumber": "03-1234-5678", "Email": "xxx.yyyyy@example.com", "DriverLicenseNumber": "D123456789012", "PassportNumber": "AB1234567"}
    ```
- finance
    ```
    {"Type": "FinancialInformation", "CreditCardNumber": "4111 1111 1111 1111", "BankAccountNumber": "123-456789-01", "BankRoutingNumber": "210-12345"}
    ```
- Credential
    ```
    {"Type": "Credentials", "AWSAccessKeyId": "ABCDEFGAIOSFODNN7EXAMPLE", "AWSSecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}
    ```

## ジョブを作成
1. ナビゲーションペインで「ジョブ」を選択します
1. 画面右上の「ジョブを作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/74c3b41a-89ee-df2d-19b7-c7ef86e8f0b2.png)

1. ポップアップが表示されるので、「はい」をクリックします。※機密データ検出ジョブは無料トライアルには含まれていません。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0cfab6da-bf45-0633-de10-270295983bd4.png)

1. 検出対象のバケットを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a3c649aa-5bfd-8a09-5d3a-0e8701483c87.png)

1. 「次へ」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fd478760-5592-3eaa-7c87-c346a28beec0.png)

1. 機密データ検出オプションで、「ワンタイムジョブ」を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bb890c6a-17c2-e1c2-c5ef-274403baaf2f.png)
1. サンプリング深度は「100%」とします
1. その他設定で、ファイル拡張子にjsonを含め、「次へ」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/790edcae-32d6-a1df-1353-6e3f1c90f08d.png)


1. マネージドデータ識別子のオプションで「推奨」を選択し、「次へ」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fbe52c72-7445-48a4-c0ad-855d06aec762.png)

1. カスタムデータ識別子を選択では、何も設定せずに、「次へ」をクリックします
1. 許可リストの選択で「次へ」をクリックします
1. 一般設定では、ジョブ名を入力し、「次へ」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b7d49e65-7192-eda6-8bd7-3270f388b0dc.png)

1. 確認画面で、「送信」をクリックします
1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e198502c-bdc5-e727-3949-535c869d695f.png)

## ジョブの実行
1. 上記で作成後、自動で実行されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e479adf6-f604-3d83-9009-ae7e175097b4.png)

1. しばらくすると完了します。「結果を表示」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0c584b3d-1c78-c393-a512-236306eb3ea3.png)

## 確認
### 検出結果
1. 検出結果タイプが「SensitiveData:S3Object/Personal」で重要度「Medium」で検出されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/888a7ec4-0e0e-35f7-ab31-da8b3cf1e75a.png)
1. 「検出結果タイプ」をクリックすると、右に詳細な情報が表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/809d204e-71db-86e5-3a41-208e7811f244.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/754072ca-9253-8d18-358f-79ada702ba51.png)

1. 詳細な結果の場所をクリックすると、S3が表示されます
1. ①「オブジェクトアクション」＞②「S3 Selectを使用したクエリ」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b7cb1cf9-de6e-7f83-f728-833a239a1a85.png)
1. 「JSON」で読み込み出力すると詳細な結果がわかります。PIIのパスポート番号（イタリア）に引っかかったようです
    ```
      "category": "CLASSIFICATION",
      "classificationDetails": {
        "jobArn": "arn:aws:macie2:ap-northeast-1:xxxxxxxx:classification-job/xxxxxxxxx",
        "result": {
          "status": {
            "code": "COMPLETE"
          },
          "sizeClassified": "228",
          "mimeType": "application/json",
          "sensitiveData": [
            {
              "category": "PERSONAL_INFORMATION",
              "totalCount": "1",
              "detections": [
                {
                  "type": "ITALY_PASSPORT_NUMBER",
                  "count": "1",
                  "occurrences": {
                    "lineRanges": [],
                    "pages": [],
                    "records": [
                      {
                        "recordIndex": "0",
                        "jsonPath": "$.PassportNumber"
                      }
                    ],
                    "cells": []
                  }
                }
              ]
            }
          ]
        },
    ```


#### バケット別
1. ナビゲーションペインで「バケット別」をクリックします。バケットごとの検出結果がわかります
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/7f1926cc-9fda-f081-daaa-fe598ed3eddf.png)

#### タイプ別
1. ナビゲーションペインで「タイプ別」をクリックします。検出結果タイプごとの検出結果がわかります
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4d836b9a-e0c2-6439-2b36-1d556c329b9c.png)

#### ジョブ別
1. ナビゲーションペインで「ジョブ別」をクリックします。検出結果タイプごとの検出結果がわかります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9467529e-56b8-2025-a9f7-f2b6cde0bb8a.png)

# 考察
今回、テストデータを作成し、マネージドデータ識別子で検出の検査を行いました。
次回は、カスタム識別子を試してみます。

# 参考
https://docs.aws.amazon.com/ja_jp/macie/latest/user/mdis-reference-quick.html

https://docs.aws.amazon.com/ja_jp/macie/latest/user/managed-data-identifiers.html