Amazon SNSのデータ保護ポリシーを試してみる

2022/11/04に公開

2022/11/03から一般公開(GA)となりました。(9月からパブリックプレビューでした)

https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-sns-message-data-protection-available-real-time-data-redaction-masking/

データ保護ポリシーについて

https://dev.classmethod.jp/articles/amazon-sns-data-protection-policies-public-preview/

こちら↑を見ていただくと早いですが、、、。

仕組み

(画像は公式docより)

インバウンド(SNSトピックまで)とアウトバウンド(SNSトピックから出る側)で、それぞれデータをモニターできます。アウトバウンドの場合、SNSが送信するときの情報が追加されているので、それらを組み合わせた確認ができそうです。

データ保護ポリシーはSNSトピックに1つで、ステートメントを複数追加できます。ステートメントはJSONで書けます。例はここ

データ保護アクション

保護データが見つかったときに、どう対応するかを設定します。

  • Audit(監査) ... 一部を抜き出して確認してログを出す。(S3、CloudWatch、Firehose)
  • De-identify(識別解除) ... 当該データ部分をマスクしたり(例えば「#」に置き換える)、削除したりする。(GAで追加された機能)
  • Deny(拒否) ... 保護データが見つかった場合にブロックする

コンソール上で、De-identifyが「識別解除」と日本語訳されていますが、非特定化あるいは非識別化のほうが良さそうです(個人の意見です)。

やってみる

コンソール上で、トピックの新規作成または編集画面に入り、データ保護のところにBasicモードで作ります。JSONで作るときはAdvancedです。

こちらでダミーのクレジットカード番号を拾ってきます。

Deny(拒否)

これは単純というか普通にエラーが出るだけなので割愛。

De-identify

クレジットカード番号が入っていたらマスクするように設定します。

SNSから送る文です。

マスクしたメールが届きます。

Audit(監査)

レートを99%、宛先をS3にして、クレジットカード番号が入っていたらログを出す設定にします。かなり深いフォルダの中にlog.gzが保存されていますね。

Amazon S3 > Buckets> bucket/AWSLogs/111122223333/AuditLogs/SNS/ap-northeast-1/my-test-data-protection/2022/11/03/findings/20221103T2205Z_739c6ca9.log.gz

中を見てみると、start endというのが見つかった箇所です。

{
  "messageId": "a49067bf-8dd8-5717-bad4-3c61b04c2783",
  "auditTimestamp": "2022-11-03T22:06:12Z",f27977
  "callerPrincipal": "arn:aws:iam::111122223333:user/user",
  "resourceArn": "arn:aws:sns:ap-northeast-1:111122223333:my-test-data-protection",
  "dataIdentifiers": [
    {
      "name": "CreditCardNumber",
      "count": 1,
      "detections": [
        {
          "start": 26,
          "end": 41
        }
      ]
    }
  ]
}

エラー

途中でこういうエラーが出ましたが、これはconfiguration(Denyとか)の設定を空の状態で保存しようとしていました。このエラー文ではワカラン。。

Couldn't put the topic data protection policy.
Error code: InvalidParameter - Error message: An error occurred while putting data protection policy on resource. Invalid parameter: DataProtectionPolicy Reason: Statement DataIdentifier cannot be empty

まとめ

  • SNSのデータ保護機能がGAされたのでやってみました。
  • 個人的には、マスクしてくれる非識別化の機能が使いどころありそうで面白いなと思います。

Discussion