SNS データ保護ポリシー

# データ保護ポリシーとは

- データ保護ポリシーはどの機密データをモニタリングし、トピックを介してやり取りされないようにするかを定義します。

# 詳細

- 検出 ： PII や　PHI　が入っていないか、[**データ識別子**](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-message-data-protection-data-identifiers.html) を使用し、機械学習とパターンマッチングを使用して機密データを検出します。

- オペレーション : 見つかったデータ識別子に基づいて、Audit(監査) 、De-identify(識別解除) 、Deny(拒否) のオペレーションを定義できます。
  - Audit(監査) : 機密データの結果を AWS の送信先にロギングします。
  - De-identify(識別解除） : 公開されたメッセージから機密データをマスクまたは編集します。インバウンドにのみ使用できます。
  - Deny(拒否): メッセージに機密データが含まれている場合に Publish API リクエストまたはメッセージの配信のいずれかを中断します。

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-message-data-protection-operations.html

![スクリーンショット 2023-05-25 18.34.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/6b1f647d-295a-53ae-ab1f-1961a816d48b.png)

# やってみる

設定モードには、「ベーシック」 と 「アドバンスト」　があります。

![スクリーンショット 2023-05-25 18.44.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/6eb2958c-3bb3-3983-0ce1-dcd1b0679ca5.png)

「ベーシック」 と 「アドバンスト」　の説明は図の通りですが、JSON のサンプルがドキュメントにあるの今回はそちらを利用し検証してみたいと思います。

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-message-data-protection-examples.html

## 監査ポリシー

次の例では、インバウンドでクレジットカード番号をモニタリングし、その結果を CloudWatch Logs　に送信することで、トピックを通過するメッセージの 99% を監査します。

なお、CloudWatch Logs　に送信する場合は、ロググループが、 `/aws/vendedlogs/` で始まる必要があります。

```json:監査ポリシー
{
  "Name": "__example_data_protection_policy",
  "Description": "Example data protection policy",
  "Version": "2021-06-01",
  "Statement": [
    {
      "DataDirection": "Inbound",
      "Principal": ["*"],
      "DataIdentifier": [
        "arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"
      ],
      "Operation": {
        "Audit": {
          "SampleRate": "99",
          "FindingsDestination": {
            "CloudWatchLogs": {
              "LogGroup": "/aws/vendedlogs/test"
            }
          }
        }
      }
    }
  ]
}
```

[こちら](https://www.getcreditcardnumbers.com/)のページにあるダミーのクレジットカード番号を　SNS　からメッセージを発行して確認してみると、次の通り、CloudWatch Logs　で検出されました。

```json
{
    "messageId": "36b8a2f3-2930-5697-bf06-fe19a9b37864",
    "auditTimestamp": "2023-05-26T09:39:15Z",
    "callerPrincipal": "arn:aws:iam::XXXXXXXXXXXX:user/XXX",
    "resourceArn": "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:test",
    "dataIdentifiers": [
        {
            "name": "CreditCardNumber",
            "count": 2,
            "detections": [
                {
                    "start": 6,
                    "end": 21
                },
                {
                    "start": 103,
                    "end": 118
                }
            ]
        }
    ],
    "policyName": "__example_data_protection_policy"
}
```

## 識別解除ポリシー

次の例では、メッセージの内容から機密データをマスキング（#）して、クレジット番号 によりユーザーがメッセージをトピックに発行するのを防ぎます。　　

```json:識別解除ポリシー
{
  "Name": "__example_data_protection_policy",
  "Description": "Example data protection policy",
  "Version": "2021-06-01",
  "Statement": [
    {
      "DataDirection": "Inbound",
      "Principal": [
        "arn:aws:iam::123456789012:user/ExampleUser"
      ],
      "DataIdentifier": [
        "arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"
      ],
      "Operation": {
        "Deidentify": {
          "MaskConfig": {
            "MaskWithCharacter": "#"
          }
        }
      }
    }
  ]
}
```

同じように、ダミーのクレジットカード番号を　SNS　からメッセージを発行して確認して、サブスクライブしている　Email を確認してみましたが、1　行目はマスク化してくれましたが、2 行目はマスクしてくれませんでした。

```
Visa
################
44XXXXXXXXXXXXXX
```

## 拒否ポリシー

次の例では、クレジットカード番号 を含むメッセージを受信しないようにブロックします。


```json:拒否ポリシー
{
  "Name": "__example_data_protection_policy",
  "Description": "Example data protection policy",
  "Version": "2021-06-01",
  "Statement": [
    {
      "DataDirection": "Outbound",
      "Principal": [
        "arn:aws:iam::123456789012:user/ExampleUser"
      ],
      "DataIdentifier": [
        "arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"
      ],
      "Operation": {
        "Deny": {}
      }
    }
  ]
}
```

同じように、ダミーのクレジットカード番号を　SNS　からメッセージを発行して確認して、サブスクライブしている　Email を確認してみましたが、今回はアウトバウンドですのでもちろんメッセージは届いていません。
[配信ステータスをログに記録](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-topic-attributes.html)することで、詳細を確認可能ですが、今回は　Email にサブスクライブしているので、割愛させていただきます。