[アップデート] Amazon Comprehend がテキストドキュメントから個人識別可能情報の検出/マスクのサポートしています

2020.09.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2週間前くらいのアップデートをいまさらですいませんが、ずっと書けずにいたため、このタイミングとなりました。

ごめんなさい。

何ができるようになったか

タイトル通りですが、テキストドキュメントから個人識別可能情報(PII)を検出すること、およびマスク加工することができます。

S3に蓄積されているデータレイクから、ドキュメント分類やETL処理時のマスキングを行う際などにも利用できそうですね。

ETL_image

個人識別可能情報((PII) )とは

個人識別可能情報とは Personally-Identifiable-Information(PII)とは、そのまんま訳されただけですが、個人を識別できるような情報を指します。個人名やクレジットカード番号、E メールアドレス、社会保障番号などです。

Amazon Comprehend で検出するPIIエンティティは下記に記載されています。

Detect Personally Identifiable Information (PII)

名前、年齢、住所、生年月日、電話番号、クレジットカード番号パスポート番号、Eメールアドレス、MACアドレス、AWS_ACCESS_KEY、AWS_SECRET_KEY など多々あります。

ただし、現状(2020年9月29日時点)は英語のテキストでのみPII検出をサポートしてますのでご注意下さい。

対応リージョン(2020年9月29日時点)

  • 米国東部(オハイオ)
  • 米国東部(バージニア州北部)
  • 米国西部(オレゴン)、
  • アジアパシフィック(ムンバイ)
  • アジア太平洋(ソウル)
  • アジアパシフィック(シンガポール)
  • アジア太平洋(シドニー)
  • アジアパシフィック(東京)
  • EU(フランクフルト)
  • EU(アイルランド)
  • EU(ロンドン)
  • AWS GovCloud(US-West)

できること

コンソール, AWS CLI, AWS SDKを使って、リアルタイム検出および非同期のPII編集バッチ処理が使えます。 *1

やってみる

本稿では、ブログと同様、コンソールおよびAWS CLI を使って対応してみます。

コンソールでやってみる

Amazon Comprehendコンソールにいけばすぐリアルタイムで試用できます。

Real-time analysis から Input text に文を入力して Analyze を押すだけです。

real-time-analyze

結果はすぐ下に表示され、Type や Confidence(信頼度)を出力してくれます。

realtime-analyze

Application integrationを開くと、入力と出力内容が表示されます。最初に検出されたEntityである Moqrin Moqmoqは10文字目から23文字目までと、BeginOffsetEndOffset が示されてますね。

api_integration

今度はバッチジョブを使ってみます。

S3バケットにPIIが含まれたテキストドキュメントを適当に作成して格納しておきます。

# demo-pii.txt
Hello Moqrin Moqmoq. 
Your AnyCompany Financial Services, LLC credit card account 1111-0000-1111-0000 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 XXXXXX1111 with the routing number XXXXX0000. 

Your latest statement was mailed to 100 Main Street, Anytown, 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 support@anycompany.com.

s3_bucket_object

Analysis jobs から Create job を押下します。

comprehend_create_job

Job settings ですが、job の名前を適当に入力して、Analysis type は PII にします。

現状、 Language は English しか選択できません。

job_setting

PII detection settings の Output mode は 先ほどのように PII entity を検出するか、置換して編集することが選択できます。

今回は置換することにします。

PII Entity を選択することが出来ますが、とりあえず Personal と Financial を選択してみます。

置換のモードでは、 PII entity type と任意の文字(!、#、$、%、&、*、または@)で置き換えることができます。デフォルトは * です。

detect_setting

Input data には先ほど格納したファイルを、 Output data は適当なS3バケットを選択します。

入力フォーマットは One document per file と One document per line を選択できます。 各ファイルがSNSのテキストメッセージのような単行で作成されている場合は、One document per line を選択、各ファイルが新聞記事や科学論文などの大きな1つのドキュメントとなっている場合は One document per file を選択するようです。

今回は1ファイルで1ドキュメントなので、 One document per file にします。

input_output_data

Access permissions は Comprehend がS3にアクセスして出力できる権限を新規作成します。

create_roll

権限としては下記になりました。指定バケットからオブジェクトを取得、更新できるようになってます。

信頼されたentity: comprehend.amazonaws.com

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::INPUT_BUCKET_NAME*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::INPUT_BUCKET_NAME"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::OUTPUT_BUCKET_NAME/*"
            ],
            "Effect": "Allow"
        }
    ]
}

実行します。

サイズにもよるかと思いますが、10分くらいで完了しました。

complete_job

出力バケット先に見に行ってみます。

result_object

comprehend_result

中身を確認するとこんな感じです。イイ感じですね〜〜。

Hello *************. 
Your AnyCompany Financial Services, LLC credit card account ******************* 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 ********** with the routing number *********. 

Your latest statement was mailed to **********************************. 

After your payment is received, you will receive a confirmation text message at ************. 

If you have questions about your bill, AnyCompany Customer Service is available by phone at ************ or email at **********************.

同じ設定のバッチ処理をCLI(ver.2)で行ってみます。今回の検出対象は全部にしました。

aws/comprehend/start-pii-entities-detection-job

aws comprehend start-pii-entities-detection-job \
 --input-data-config S3Uri="s3://INPUT_BUCKET_NAME/demo-pii.txt",InputFormat="ONE_DOC_PER_FILE"  \
 --output-data-config S3Uri="s3://OUTPUT_BUCKET_NAME/"  \
 --mode "ONLY_REDACTION" \
 --redaction-config PiiEntityTypes="ALL",,MaskMode="MASK",MaskCharacter="#" \
 --data-access-role-arn "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonComprehendServiceRole-ComprehendPIIRole" \
 --job-name "demo-pii-cli-job" \
 --language-code "en"

レスポンスが返却されます。

{
    "JobId": "06xxxxxxxxxxxxxxx",
    "JobStatus": "SUBMITTED"
}

まだかなー、とジョブリクエストを確認するコードを入力します。

aws comprehend describe-pii-entities-detection-job --job-id "06xxxxxxxxxxxxxxx"

実行中です。

{
    "PiiEntitiesDetectionJobProperties": {
        "JobId": "06xxxxxxxxxxxxxxx",
        "JobName": "demo-pii-cli-job",
        "JobStatus": "IN_PROGRESS",
        "SubmitTime": "2020-09-30T08:35:27.609000+09:00",
        "InputDataConfig": {
            "S3Uri": "s3://INPUT_BUCKET_NAME/demo-pii.txt",
            "InputFormat": "ONE_DOC_PER_FILE"
        },
        "OutputDataConfig": {
            "S3Uri": "s3://OUTPUT_BUCKET_NAME/hogehoge/output/"
        },
        "RedactionConfig": {
            "PiiEntityTypes": [
                "ALL"
            ],
            "MaskMode": "MASK",
            "MaskCharacter": "#"
        },
        "LanguageCode": "en",
        "DataAccessRoleArn": "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonComprehendServiceRole-ComprehendPIIRole",
        "Mode": "ONLY_REDACTION"
    }
}

無事完了すると、ステータスは COMPLETED になります。

S3バケットに中身を確認しに行くとちゃんとマスキングが # になって保存されていました。

料金

いちおうお値段を掲載しておきます。

Amazon Comprehend の料金

Amazon Comprehend では、処理したテキストの量に基づいて使用した分のみ料金が発生します。

Amazon Comprehend のエンティティ認識、感情分析、構文解析、キーフレーズ抽出、言語検出のリクエストは、100 文字で 1 ユニットとして計算され、各リクエストにつき 3 ユニット (300 文字) が最低料金となります。

cost_table

個人的にはかなりお安くサービス利用ができる感じがしますが、いかがでしょうか。

最後に

英テキストでのみPII検出をサポートするので、まだ利用機会も多くないかも知れませんが、今後対応言語は増えるでしょうし、簡単にPII検出してマスキングできるサービスなので使う機会も増えてくるのではないでしょうか。簡単で便利なサービスだと感じました!

以上です。

どなたかのお役に立てば幸いです。

参考

脚注

  1. Python 向けの AWS SDK (Boto 3) で試そうとしましたが、現状(2020年9月29日)では、最新版のSDKが必要そうでした。