Macieでできること

# はじめに
Amazon Macieを体験する機会があったので備忘のために。

気になっていたポイントは下記の2つ。
* 暗号化されたS3のデータをどうやってチェックできるのか
* 日本語で書かれた日本の個人情報でもチェックできるのか

## Macieとは

S3の中に個人情報などの機密データが入ってないかチェックするサービス。

https://aws.amazon.com/jp/macie/

## 暗号化されたS3のデータをどうやってチェックできるのか
S3に配置したデータは暗号化されています。とくにカスタマキーで暗号化した場合、Macieといえども中身を見られないはず。一体どうやって？
## 日本語で書かれた日本の個人情報でもチェックできるのか
こんな個人情報が検出できればありがたい。下記のようなjsonファイルを作りました。

```json:bushi001.json
{
    "name": "源 頼朝",
    "phone": "090-1192-1199",
    "email": "yoritomo.minamoto@kamakura.jp",
    "address": "神奈川県鎌倉市西御門２丁目５",
    "postalZip": "248-0004",
    "region": "Kanagawa"
}
```

もうひとつ、クレジットカード番号のサンプルデータです。

```json:card001.json
{
    "cardid": "0001",
    "no": "5105105105105100",
    "brand": "Mastercard"
}
```

# 実験したこと
カスタマー管理キーで暗号化したS3に個人情報やクレジットカード情報を入れて、Macieで検出を試みます。

### KMSでカスタマー管理キーを作成する
S3を暗号化するためKMSで下記のようなキーを作成します。

| 設定 | 設定値 |
|:-|:-|
| キーのタイプ  | 対象  |
|  キーの使用法 | 暗号化および複合化 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/8b21c59e-016c-1e6f-b159-f01614fe710e.png)

### KMSでMacie向けのキーポリシーを作成する。
作成したキーで暗号化されたデータをMacieが読むには複合化が必要になります。Macieが複合化できるようにキーポリシーを次のようにします。ここで[一つ目の疑問](暗号化されたS3のデータをどうやってチェックできるのか)は解消です。

```json:キーポリシー
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Enable IAM User Permissions",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::999999999999:root"
			},
			"Action": "kms:*",
			"Resource": "*"
		},
		{
			"Sid": "Enable explicit permissions for Macie service-role",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::999999999999:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie"
			},
			"Action": "kms:Decrypt",
			"Resource": "*"
		}
	]
}
```


## S3のデフォルト暗号化を設定する
S3バケットのプロパティからデフォルト暗号化を上記のKMSキーに設定します。



## Macieを有効化
いよいよMacieを設定します。対象のS3バケットを指定して、クロールジョブを作ります。

1. Macieを有効化 ボタンを押すと下記のような画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1b7f6b0e-0e43-b28c-4a65-7e866fff4489.png)
1. 「ジョブを作成」ボタンを押して、「特定のバケットを選択」を選んで先ほどのバケットを選択して「次へ」に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/a1da9b07-c767-44ed-f4ae-b2c911631822.png)
1. [ワンタイムジョブ]を選んで次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/f50397cf-0d2c-4117-4adb-efff0b3cba92.png)
1. マネージドデータ識別子で[カスタム]を選んでから、全マネージドデータ識別子を選択して次へ進みます。この検証時点では[推奨]で35個、[カスタム]では155個が選択されるので、よりいろいろなパターンを検索できるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/584360dc-f9e5-6f17-7642-f4a7d448b687.png)
1. あとは次へ次へと進めてジョブ名をつければOKでした。ワンタイムジョブの場合、作成が終わるとすぐにジョブが動き始めます。

## Macieの検証結果を見る

だいたい15分くらいでジョブの実行が完了して、こんな感じでチェック結果が出てきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/dc0236c6-1504-8976-ec1d-5782d4376d69.png)

検出された結果は下記のようなものでした。
```
The S3 object contains financial information such as bank account numbers or credit card numbers.
```

# おわりに
次のようなことがわかりました。

* Amazon Macieは、データを検出するための「識別子」というパターンを提供しており、推奨される識別子やカスタム識別子を利用できます。また、自分で正規表現を用いて識別子を作成することも可能です。
* 日本語の氏名や住所は、Macieの標準の識別子では正確に検出できない場合があります。
クレジットカード番号やAWSアクセスキーのような国際的に共通するデータは、既存の識別子で対応可能です。
* S3バケットがKMSで暗号化されている場合、Macieがデータを解析できるよう、カスタムキーのキーポリシーで複合化を許可する設定が必要です。
* S3に小さなテキストファイルが数個しかない場合でも、検出作業が完了するまで約15分かかることがあります。


触ってみる前のイメージではAIを駆使して魔法のように個人情報を見つけてくれるようなサービスだと思っていましたが、実際のところは検出するための条件（識別子）を作って泥臭く運用するもののようです。

# 参考文献

https://qiita.com/Masayuki-Goto/items/2138f2ff142ce8eee0e4

https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-macie-2020/

https://docs.aws.amazon.com/ja_jp/macie/latest/user/findings-types.html