Amazon S3 Object Lambda と Amazon Comprehend を使ってリアルタイムで PIIデータ のマスキングを実践

記事タイトルとURLをコピーする

こんにちは、近藤(りょう)です!

AWS Data Engineering Associate(AWS-DEA)の学習中に、試してみたい機能を見つけたので、今回はその紹介と実際の動作確認(チュートリアル)をしてみました。

その機能が Amazon S3 Object Lambda です。

Amazon S3 Object Lambda とは?

Amazon S3 Object Lambda(以降、S3 Object Lambda) は、S3 バケットに格納されたデータを取り出す際に、そのデータを動的に加工できる便利な機能です。

この機能を使用すると、S3 GET リクエストによって返されるデータを変更し、アプリケーションの要件に応じた形で提供することができます。

たとえば、以下のような用途に対応することができます。

  • 行のフィルタリング
  • 画像の動的なリサイズや透かしの挿入
  • 機密データのマスキング

参考リンク:S3 Object Lambda を使用したオブジェクトの変換

今回、調べていて面白いと思ったのは「S3 Object Lambda を Amazon Comprehend と組み合わせた リアルタイムの PII データマスキング処理」です。
Amazon Comprehend は、機械学習(ML)を活用して非構造化データやドキュメントから情報を抽出する自然言語処理(NLP)サービスです。)

オリジンデータとマスキング後のデータを別々に保持する必要がなく、リアルタイムでデータを加工・提供できる点が魅力の1つかなと思います。

たとえば、マーケティングや分析アプリケーションで、顧客のクレジットカード情報やメールアドレスなどの PII をマスキングすることで、意図しないデータ漏洩を防ぎつつ、プライバシー要件を満たした形でデータを活用できます。

S3 Object Lambda と Amazon Comprehend の チュートリアル

チュートリアル: S3 Object Lambda と Amazon Comprehend を使用した PII データの検出と編集 を実施して動作を確認してみました。

チュートリアルでは、S3 Object Lambda アクセスポイント経由でS3 から取得した PII データをアプリケーション(今回はユーザー)に返す前に Amazon Comprehendを利用するLambda で機密データをマスキングする処理をします。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/ol-comprehend-image-global.png 画像引用元:S3 Object Lambda と Amazon Comprehend の構成

1. S3 バケットを作成する

Amazon S3 コンソールから「tutorial-bucket-任意」を作成します。
なお、S3の値は基本デフォルトです。

(参考)S3の設定内容

2. S3 バケットにファイルをアップロード

「tutorial.txt」を作成した S3バケットにファイルをアップロードします。
「tutorial.txt」の内容は、以下となります。(チュートリアル同様)

Hello Zhang Wei, I am John. Your AnyCompany Financial Services,
LLC credit card account 1111-0000-1111-0008 has a minimum payment
of $24.53 that is due by July 31st. Based on your autopay settings,
we will withdraw your payment on the due date from your
bank account number XXXXXX1111 with the routing number XXXXX0000.

Your latest statement was mailed to 100 Main Street, Any City,
WA 98121.
After your payment is received, you will receive a confirmation
text message at 206-555-0100.
If you have questions about your bill, AnyCompany Customer Service
is available by phone at 206-555-0199 or
email at [email protected].

以下は、アップロード後のバケット内の内容となります。

(参考)アップロード後のバケット内の内容

3. S3 アクセスポイントの作成

Amazon S3 コンソールの「アクセスポイント」ページで「アクセスポイントの作成」を押下します。

アクセスポイントの作成

以下の項目を入力して「アクセスポイントの作成」を押下します。

  • プロパティ
    • アクセスポイント名
       tutorial-pii-access-point ※任意
    • ネットワークオリジン
       インターネット を選択
    • その他の項目
       デフォルト


アクセスポイント名には命名規則がありますのでご確認お願いします。
参考サイト:Amazon S3 アクセスポイントの命名規則

以下は、アクセスポイントの設定内容となります。

(参考)アクセスポイントの設定内容

4. 事前構築された Lambda 関数の設定とデプロイ

AWS Management Console にサインインし、AWS Serverless Application Repository で ComprehendPiiRedactionS3ObjectLambda 関数を表示します。
詳しくは、Lambda 関数の設定とデプロイ を参考しながら作成してください。

以下、Lambda 関数の設定とデプロイの補足です。

(参考)Lambda 関数の設定とデプロイ

すべてデフォルト値で「デプロイ」を押下します。
(下の方のチェックボックスはオンで)

Lambda 関数のデプロイ


関数に設定できる変数は以下をご確認ください。
参考サイト:ComprehendPiiRedactionS3ObjectLambda

以下は、デフォルトの変数の値です。(参考程度に載せておきます。)

(参考)デフォルトの変数の値


少し時間が経つとLambdaが作成されます。
Lambda関数名:serverlessrepo-ComprehendPiiR-PiiRedactionFunction-文字列

(参考)Lambda関数

5. S3 Object Lambda アクセスポイントの作成

Amazon S3 コンソールの「Object Lambda アクセスポイント」ページで「Object Lambda アクセスポイントの作成」を押下します。

Object Lambda アクセスポイントの作成


以下の項目を入力して「Object Lambda アクセスポイントの作成」を押下する。
(記載項目以外はデフォルト)

  • 全般
    • Object Lambda アクセスポイント名
      tutorial-pii-object-lambda-accesspoint ※任意

Object Lambda アクセスポイント-1

  • サポートするアクセスポイントの設定
    • サポートするアクセスポイント
      作成した標準アクセスポイント を入力

Object Lambda アクセスポイント-2

  • オブジェクト変換の設定
    • S3 API
      GetObject を選択
    • Lambda 関数の呼び出し
      アカウントの関数から選択 を選択
    • Lambda 関数
      デプロイしたLambda関数 を選択
    • Lambda 関数のバージョン
      $LATEST を選択

Object Lambda アクセスポイント-3


Object Lambda アクセスポイントが作成されます。

Object Lambda アクセスポイント-4

6. S3 Object Lambda アクセスポイントを使用して、編集されたファイルを取得する

作成したS3 Object Lambda アクセスポイントを選択します。

S3 Object Lambda アクセスポイントからのファイル取得-1


作成した「tutorial.txt」を選択して「開く」を押下します。

S3 Object Lambda アクセスポイントからのファイル取得-2


ダウンロードしたファイルがマスキングされていました。

S3 Object Lambda アクセスポイントからのファイル取得-3

以下は、マスキング前とマスキング後の比較となります。

マスキング前とマスキング後の比較

実験①:一部マスキングするように変更

今はすべてマスキングをしているので一部マスキングするように変更してみます。

作成したLambda関数の環境変数を開きPII_ENTITY_TYPESを変更します。
以下の項目をマスキングするようにします。

  • 変更前
    ALL
  • 変更後
    NAME,CREDIT_DEBIT_NUMBER,BANK_ACCOUNT_NUMBER,BANK_ROUTING


変更後に設定した値について

  • NAME
    個人の氏名
  • CREDIT_DEBIT_NUMBER
    クレジットカードまたはデビットカードの番号
  • BANK_ACCOUNT_NUMBER
    米国の銀行口座番号
  • BANK_ROUTING
    米国の銀行口座の支店コード

PII_ENTITY_TYPES で指定できる値については、Detecting PII entitiesをご確認ください。
参考サイト:Detecting PII entities - Amazon Comprehend

以下は、変更前と変更前の内容となります。
変更前

PII_ENTITY_TYPES 変更前

変更後

PII_ENTITY_TYPES 変更後


値を変更して再度「tutorial.txt」を開いてみると。
思っていた箇所がマスキングできました!(赤線の箇所)

PII_ENTITY_TYPES 変更後 取得データ

実験②: 日本語の場合でもマスキングできるのか確認

  • 2025/01/10 update
    • 英語またはスペイン語のテキストドキュメントで個人を特定できる情報 (PII) を検出できるようでした。
    • そのため、本実験は参考として眺めていただければと思います。
    • 参考サイト:個人を特定できる情報 (PII)
      • 抜粋
        Amazon Comprehend コンソールまたは を使用してAPIs、英語またはスペイン語のテキストドキュメントで個人を特定できる情報 (PII) を検出できます。

日本語でも試してみました。
以下のように「tutorial_ja.txt」を作成して、S3にアップロードします。

こんにちは、太郎さん。私は次郎です。
AnyCompany Financial Services、LLC のクレジットカード アカウント 1111-0000-1111-0008 の最低支払額は 24.53 ドルで、
支払期限は 7 月 31 日です。自動支払い設定に基づいて、
支払期限に銀行口座番号 XXXXXX1111、ルーティング番号 XXXXX0000 から支払いが引き落とされます。

最新の明細書は、100 Main Street、Any City、WA 98121 に郵送されました。
支払いが受領されると、206-555-0100 に確認のテキスト メッセージが届きます。
請求書についてご質問がある場合は、AnyCompany カスタマー サービスまで
お電話 (206-555-0199) またはメール ([email protected]) でお問い合わせください。

「tutorial_ja.txt」を開いてみると。マスキングされていましたが「次郎」のところがNAMEとして扱われていなかったです。まだまだ精度はよくなさそうですね。

日本語 取得データ

補足①
日本語の場合、S3コンソールからアップロードすると文字化けしてしまったのでAWSCLIからアップロードして実験をしていました。

▼ 参考コマンド
aws s3 cp tutorial.ja.txt s3://tutorial-bucket-`任意`/ \
  --content-type "text/plain; charset=utf-8"

なお、S3コンソールからアップロードされたファイルのメタデータを確認したところ Content-Typeにcharset=utf-8が指定されていませんでしたのでブラウザがファイルの文字エンコーディングを正しく判断できず、表示が文字化けしていたようでした。


補足②
DEFAULT_LANGUAGE_CODE を ja に設定して実行も試してみましたが、以下のようにエラーが発生するので en で実行しました。

(参考)DEFAULT_LANGUAGE_CODE jaにした場合のエラー

7. クリーンアップする

お遊びが終わったら作ったリソースの削除をお願いします。

参考 ステップ 7: クリーンアップする

まとめ

S3 Object Lambda が Amazon Athena と統合されているので、これなら大量データを処理する時でも意図しないデータ流出を防げそうだなと感じました。
参考リンク:S3 Object Lambda と Amazon Athena が統合

S3 Object Lambda と Amazon Comprehend を組み合わせることで、自然言語データに含まれる個人情報のマスキングがサクッとできるのが 便利!と思いました。

AI 技術がどんどん進化している中で、「この技術をどう活用するのか?」「どうセキュリティや効率性とバランスを取るのか?」みたいな部分を考えるのが今後ますます重要になってきそうです。

とはいえ、こうした仕組みを考えるのは結構楽しい作業ですよね。新しいアーキテクチャを組むのが楽しみになりました。

近藤 諒都

(記事一覧)

カスタマーサクセス部CS5課

夜行性ではありません。朝活派です。

趣味:お酒、旅行、バスケ、掃除、家庭用パン作り(ピザも)など

"; doc.innerHTML = entry_notice + doc.innerHTML; }
' } }) e.innerHTML = codeBlock; });