Amazon Comprehend 및 Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence를 사용하여 스트리밍 데이터의 민감한 데이터를 거의 실시간으로 수정합니다. 수직 검색. 일체 포함.

Amazon Comprehend 및 Amazon Kinesis Data Firehose를 사용하여 거의 실시간으로 스트리밍 데이터의 민감한 데이터 수정

데이터 및 통찰력의 거의 실시간 제공을 통해 기업은 고객의 요구 사항에 신속하게 대응할 수 있습니다. 실시간 데이터는 소셜 미디어, IoT 장치, 인프라 모니터링, 콜 센터 모니터링 등을 포함한 다양한 소스에서 가져올 수 있습니다. 다양한 소스에서 수집되는 데이터의 폭과 깊이로 인해 기업은 고객의 개인 정보를 보호하고 민감한 데이터가 최종 시스템에서 액세스되지 않도록 하는 솔루션을 찾고 있습니다. 이전에는 가양성 또는 누락 데이터를 표시할 수 있는 PII(개인 식별 정보) 규칙 엔진에 의존해야 했으며 스트리밍 데이터에서 PII를 식별하기 위해 사용자 지정 기계 학습(ML) 모델을 구축 및 유지 관리해야 했습니다. 또한 이러한 엔진 또는 모델을 지원하는 데 필요한 인프라를 구현하고 유지 관리해야 했습니다.

이 프로세스를 간소화하고 비용을 줄이기 위해 다음을 사용할 수 있습니다. 아마존 이해, ML을 사용하여 구조화되지 않은 텍스트에서 사람, 장소, 감정 및 주제와 같은 통찰력과 관계를 찾는 자연어 처리(NLP) 서비스입니다. 이제 Amazon Comprehend ML 기능을 사용하여 고객 이메일, 지원 티켓, 제품 리뷰, 소셜 미디어 등에서 PII를 감지하고 수정할 수 있습니다. ML 경험이 필요하지 않습니다. 예를 들어 지원 티켓 및 지식 문서를 분석하여 문서를 색인화하기 전에 PII 엔터티를 감지하고 텍스트를 수정할 수 있습니다. 그 후에는 문서에 PII 엔터티가 없으며 사용자는 데이터를 사용할 수 있습니다. PII 엔티티를 수정하면 고객의 개인 정보를 보호하고 현지 법률 및 규정을 준수하는 데 도움이 됩니다.

이 게시물에서는 Amazon Comprehend를 스트리밍 아키텍처에 구현하여 다음을 사용하여 거의 실시간으로 PII 엔터티를 수정하는 방법을 배웁니다. 아마존 키네 시스 데이터 파이어 호스AWS 람다.

이 게시물은 최종 사용자 또는 다운스트림 애플리케이션이 사용할 데이터의 추가 파생 복사본을 생성, 저장 및 유지하려는 Kinesis Data Firehose를 사용하여 스트리밍 아키텍처로 수집되는 선택 필드의 데이터를 수정하는 데 중점을 둡니다. 사용하는 경우 Amazon Kinesis 데이터 스트림 또는 PII 수정 이외의 추가 사용 사례가 있는 경우 다음을 참조하십시오. Amazon Kinesis Data Analytics, Amazon Translate 및 Amazon Comprehend와 함께 SQL 기능을 사용하여 스트리밍 데이터 번역, 수정 및 분석, 사용 방법을 보여주는 곳 Amazon Kinesis 데이터 분석 스튜디오 에서 제공 아파치 제플린아파치 플 링크 스트리밍 데이터의 텍스트 필드를 대화식으로 분석, 번역 및 수정합니다.

솔루션 개요

다음 그림은 다음을 사용하여 실시간으로 스트리밍 데이터의 PII 수정을 수행하기 위한 아키텍처의 예를 보여줍니다. 아마존 단순 스토리지 서비스 (아마존 S3), Kinesis Data Firehose 데이터 변환, 아마존 이해AWS 람다. 또한, 우리는 Python 용 AWS SDK (Boto3) 람다 함수용. 다이어그램에 표시된 대로 S3 원시 버킷에는 수정되지 않은 데이터가 포함되고 S3 수정된 버킷에는 Amazon Comprehend 사용 후 수정된 데이터가 포함됩니다. DetectPiiEntities Lambda 함수 내의 API.

관련 비용

Kinesis Data Firehose, Amazon S3 및 Lambda 비용 외에도 이 솔루션에는 Amazon Comprehend의 사용 비용이 발생합니다. 지불하는 금액은 PII가 포함된 총 레코드 수와 Lambda 함수에서 처리하는 문자의 비율입니다. 자세한 내용은 Amazon Kinesis Data Firehose 요금, 아마존 종합 요금AWS Lambda 요금.

예를 들어 10,000개의 로그 레코드가 있고 PII를 수정하려는 키 값이 500자라고 가정해 보겠습니다. 10,000개의 로그 레코드 중 50개가 PII를 포함하는 것으로 식별됩니다. 비용 내역은 다음과 같습니다.

PII 비용 포함:

  • 각 키 값의 크기 = 500자(1단위 = 100자)
  • 레코드당 단위 수(100자)(최소 3단위) = 5
  • 총 단위 = 10,000(레코드) x 5(레코드당 단위) x 1(레코드당 Amazon Comprehend 요청) = 50,000
  • 단위당 가격 = $ 0.000002
    • ContainsPiiEntities API를 사용하여 PII로 로그 레코드를 식별하기 위한 총 비용 = $0.1[50,000단위 x $0.000002] 

PII 비용 수정:

  • PII를 포함하는 총 단위 = 50(레코드) x 5(레코드당 단위) x 1(레코드당 Amazon Comprehend 요청) = 250
  • 단위당 가격 = $ 0.0001
    • DetectPiiEntities API를 사용하여 PII 위치를 식별하기 위한 총 비용 = [단위 수] x [단위당 비용] = 250 x $0.0001 = $0.025

식별 및 수정을 위한 총 비용:

  • 총 비용: $0.1(필드에 PII가 포함된 경우 유효성 검사) + $0.025(PII가 포함된 필드 수정) = $0.125

AWS CloudFormation을 사용하여 솔루션 배포

이 게시물을 위해 우리는 AWS 클라우드 포메이션 스트리밍 데이터 수정 이 템플릿, 반복 가능한 배포를 가능하게 하는 구현의 전체 세부 정보를 제공합니다. 배포 시 이 템플릿은 두 개의 S3 버킷을 생성합니다. 하나는 Amazon Kinesis Data Generator(KDG)에서 수집된 원시 샘플 데이터를 저장하기 위한 것이고 다른 하나는 수정된 데이터를 저장하기 위한 것입니다. 또한 다음을 사용하여 Kinesis Data Firehose 전송 스트림을 생성합니다. DirectPUT 입력으로, Amazon Comprehend를 호출하는 Lambda 함수 포함PiiEntitiesDetectPii엔티티 PII 데이터를 식별하고 수정하는 API. Lambda 함수는 PII에 대해 검사해야 하는 키 값을 결정하기 위해 환경 변수의 사용자 입력에 의존합니다.

이 솔루션의 Lambda 함수는 페이로드 크기를 100KB로 제한합니다. 텍스트가 100KB보다 큰 페이로드가 제공되면 Lambda 함수는 이를 건너뜁니다.

솔루션을 배치하려면 다음 단계를 완료하십시오.

  1. 미국 동부(버지니아 북부)에서 CloudFormation 스택 시작 us-east-1:
    Amazon Comprehend 및 Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence를 사용하여 스트리밍 데이터의 민감한 데이터를 거의 실시간으로 수정합니다. 수직 검색. 일체 포함.
  2. 스택 이름을 입력하고 다른 매개변수는 기본값으로 둡니다.
  3. 선택 AWS CloudFormation이 사용자 지정 이름으로 IAM 리소스를 생성 할 수 있음을 인정합니다.
  4. 왼쪽 메뉴에서 스택 생성.

수동으로 리소스 배포

AWS CloudFormation을 사용하는 대신 아키텍처를 수동으로 구축하려는 경우 이 섹션의 단계를 완료하십시오.

S3 버킷 생성

다음 단계에 따라 S3 버킷을 생성합니다.

  1. Amazon S3 콘솔에서 버킷 탐색 창에서
  2. 왼쪽 메뉴에서 버킷 만들기.
  3. 원시 데이터용 버킷 하나와 수정된 데이터용 버킷 하나를 생성합니다.
  4. 방금 생성한 버킷의 이름을 기록해 둡니다.

Lambda 함수 생성

Lambda 함수를 생성 및 배포하려면 다음 단계를 완료하십시오.

  1. Lambda 콘솔에서 기능 만들기.
  2. 왼쪽 메뉴에서 처음부터 저자.
  3. 럭셔리 기능 명, 입력 AmazonComprehendPII-Redact.
  4. 럭셔리 런타임선택한다. 파이썬 3.9.
  5. 럭셔리 아키텍처, 고르다 x86_64.
  6. 럭셔리 실행 역할, 고르다 Lambda 권한이 있는 새 역할 생성.
  7. 함수를 생성한 후 다음 코드를 입력합니다.
    import json
    import boto3
    import os
    import base64
    import sys
    
    def lambda_handler(event, context):
        
        output = []
        
        for record in event['records']:
            
            # Gathers keys from enviroment variables and makes a list of desired keys to check for PII
            rawkeys = os.environ['keys']
            splitkeys = rawkeys.split(", ")
            print(splitkeys)
            #decode base64
            #Kinesis data is base64 encoded so decode here
            payloadraw=base64.b64decode(record["data"]).decode('utf-8')
            #Loads decoded payload into json
            payloadjsonraw = json.loads(payloadraw)
            
            # Creates Comprehend client
            comprehend_client = boto3.client('comprehend')
            
            
            # This codes handles the logic to check for keys, identify if PII exists, and redact PII if available. 
            for i in payloadjsonraw:
                # checks if the key found in the message matches a redact
                if i in splitkeys:
                    print("Redact key found, checking for PII")
                    payload = str(payloadjsonraw[i])
                    # check if payload size is less than 100KB
                    if sys.getsizeof(payload) < 99999:
                        print('Size is less than 100KB checking if value contains PII')
                        # Runs Comprehend ContainsPiiEntities API call to see if key value contains PII
                        pii_identified = comprehend_client.contains_pii_entities(Text=payload, LanguageCode='en')
                        
                        # If PII is not found, skip over key
                        if (pii_identified['Labels']) == []:
                            print('No PII found')
                        else:
                        # if PII is found, run through redaction logic
                            print('PII found redacting')
                            # Runs Comprehend DetectPiiEntities call to find exact location of PII
                            response = comprehend_client.detect_pii_entities(Text=payload, LanguageCode='en')
                            entities = response['Entities']
                            # creates redacted_payload which will be redacted
                            redacted_payload = payload
                            # runs through a loop that gathers necessary values from Comprehend API response and redacts values
                            for entity in entities:
                                char_offset_begin = entity['BeginOffset']
                                char_offset_end = entity['EndOffset']
                                redacted_payload = redacted_payload[:char_offset_begin] + '*'*(char_offset_end-char_offset_begin) + redacted_payload[char_offset_end:]
                            # replaces original value with redacted value
                            payloadjsonraw[i] = redacted_payload
                            print(str(payloadjsonraw[i]))
                    else:
                        print ('Size is more than 100KB, skipping inspection')
                else:
                    print("Key value not found in redaction list")
            
            redacteddata = json.dumps(payloadjsonraw)
            
            # adds inspected record to record
            output_record = {
                'recordId': record['recordId'],
                'result': 'Ok',
                'data' : base64.b64encode(redacteddata.encode('utf-8'))
            }
            output.append(output_record)
            print(output_record)
            
        print('Successfully processed {} records.'.format(len(event['records'])))
        
        return {'records': output}

  8. 왼쪽 메뉴에서 배포.
  9. 탐색 창에서 구성.
  10. 로 이동 환경 변수.
  11. 왼쪽 메뉴에서 편집.
  12. 럭셔리 , 입력 keys.
  13. 럭셔리 가치관, PII를 수정할 키 값을 쉼표와 공백으로 구분하여 입력합니다. 예를 들어 Tweet1, Tweet2 이 게시물의 다음 섹션에 제공된 샘플 테스트 데이터를 사용하는 경우.
  14. 왼쪽 메뉴에서 찜하기.
  15. 로 이동 일반 구성.
  16. 왼쪽 메뉴에서 편집.
  17. 가치를 바꾼다. 시간 초과 1분으로.
  18. 왼쪽 메뉴에서 찜하기.
  19. 로 이동 권한.
  20. 아래에서 역할 이름을 선택하십시오. 실행 역할.
    귀하는 AWS 자격 증명 및 액세스 관리 (IAM) 콘솔.
  21. 럭셔리 권한 추가선택한다. 정책 첨부.
  22. 엔터 버튼 Comprehend 검색 창에 정책을 선택 ComprehendFullAccess.
  23. 왼쪽 메뉴에서 정책 첨부.

Firehose 전송 스트림 생성

Firehose 전송 스트림을 생성하려면 다음 단계를 완료하십시오.

  1. Kinesis Data Firehose 콘솔에서 배달 스트림 만들기.
  2. 럭셔리 출처, 고르다 직접 넣기.
  3. 럭셔리 목적지, 고르다 아마존 S3.
  4. 럭셔리 전송 스트림 이름, 입력 ComprehendRealTimeBlog.
  5. $XNUMX Million 미만 AWS Lambda로 소스 레코드 변환, 고르다 사용.
  6. 럭셔리 AWS Lambda 함수, 생성한 함수의 ARN을 입력하거나 함수를 찾습니다. AmazonComprehendPII-Redact.
  7. 럭셔리 버퍼 크기, 값을 1MB로 설정합니다.
  8. 럭셔리 버퍼 간격, 60초로 두십시오.
  9. $XNUMX Million 미만 목적지 설정, 수정된 데이터에 대해 생성한 S3 버킷을 선택합니다.
  10. $XNUMX Million 미만 백업 설정, 원시 레코드에 대해 생성한 S3 버킷을 선택합니다.
  11. $XNUMX Million 미만 허가, IAM 역할을 생성 또는 업데이트하거나 적절한 권한이 있는 기존 역할을 선택합니다.
  12. 왼쪽 메뉴에서 배달 스트림 만들기.

Kinesis Data Generator로 스트리밍 데이터 솔루션 배포

Kinesis Data Generator(KDG)를 사용하여 샘플 데이터를 Kinesis Data Firehose로 수집하고 솔루션을 테스트할 수 있습니다. 이 프로세스를 단순화하기 위해 Lambda 함수와 CloudFormation 템플릿을 제공하여 아마존 코 그니 토 사용자를 지정하고 KDG를 사용하기 위한 적절한 권한을 할당합니다.

  1. Amazon Kinesis 데이터 생성기 페이지선택한다. CloudFormation으로 Cognito 사용자 생성. 스택을 생성하기 위해 AWS CloudFormation 콘솔로 리디렉션됩니다.
  2. KDG에 로그인할 때 사용하는 사용자의 사용자 이름과 암호를 제공합니다.
  3. 다른 설정은 기본값으로 두고 스택을 생성합니다.
  4. 출력 탭에서 KDG UI 링크를 선택합니다.
  5. 사용자 이름과 암호를 입력하여 로그인합니다.

Amazon S3에서 테스트 레코드 전송 및 수정 검증

솔루션을 테스트하려면 다음 단계를 완료하십시오.

  1. 이전 단계에서 생성한 KDG URL에 로그인합니다.
  2. AWS CloudFormation 스택이 배포된 리전을 선택합니다.
  3. 럭셔리 스트림/전송 스트림, 생성한 전송 스트림을 선택합니다(템플릿을 사용한 경우 형식이 accountnumber-awscomprehend-blog).
  4. 다른 설정은 기본값으로 두십시오.
  5. 레코드 템플릿의 경우 고유한 테스트를 생성하거나 다음 템플릿을 사용할 수 있습니다. 테스트를 위해 아래 제공된 샘플 데이터를 사용하는 경우 업데이트된 환경 변수가 있어야 합니다. AmazonComprehendPII-Redact 람다 함수 Tweet1, Tweet2. CloudFormation을 통해 배포된 경우 환경 변수를 다음으로 업데이트합니다. Tweet1, Tweet2 생성된 Lambda 함수 내에서. 샘플 테스트 데이터는 다음과 같습니다.
    {"User":"12345", "Tweet1":" Good morning, everybody. My name is Van Bokhorst Serdar, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address SerdarvanBokhorst@dayrep.com. My address is 2657 Koontz Lane, Los Angeles, CA. My phone number is 818-828-6231.", "Tweet2": "My Social security number is 548-95-6370. My Bank account number is 940517528812 and routing number 195991012. My credit card number is 5534816011668430, Expiration Date 6/1/2022, my C V V code is 121, and my pin 123456. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

  6. 왼쪽 메뉴에서 데이터 보내기, 레코드가 스트림으로 전송될 때까지 몇 초 정도 기다립니다.
  7. 몇 초 후 KDG 생성기를 중지하고 S3 버킷에서 전달된 파일을 확인합니다.

다음은 원시 S3 버킷에 있는 원시 데이터의 예입니다.

{"User":"12345", "Tweet1":" Good morning, everybody. My name is Van Bokhorst Serdar, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address SerdarvanBokhorst@dayrep.com. My address is 2657 Koontz Lane, Los Angeles, CA. My phone number is 818-828-6231.", "Tweet2": "My Social security number is 548-95-6370. My Bank account number is 940517528812 and routing number 195991012. My credit card number is 5534816011668430, Expiration Date 6/1/2022, my C V V code is 121, and my pin 123456. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

다음은 수정된 S3 버킷에서 수정된 데이터의 예입니다.

{"User":"12345", "Tweet1":"Good morning, everybody. My name is *******************, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address ****************************. My address is ********************************** My phone number is ************.", "Tweet"2: "My Social security number is ***********. My Bank account number is ************ and routing number *********. My credit card number is ****************, Expiration Date ********, my C V V code is ***, and my pin ******. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

민감한 정보는 수정된 메시지에서 제거되어 최종 시스템과 이 데이터를 공유할 수 있다는 확신을 줍니다.

대청소

이 솔루션 실험을 마치면 AWS CloudFormation 콘솔을 사용하여 이 예제에 배포된 모든 리소스를 삭제하여 리소스를 정리하십시오. 수동 단계를 따랐다면 두 개의 버킷을 수동으로 삭제해야 합니다. AmazonComprehendPII-Redact 기능, ComprehendRealTimeBlog 스트림, 로그 그룹 ComprehendRealTimeBlog 스트림 및 생성된 모든 IAM 역할.

결론

이 게시물에서는 PII 수정을 거의 실시간 스트리밍 아키텍처에 통합하고 비행 중 수정을 수행하여 데이터 처리 시간을 줄이는 방법을 보여주었습니다. 이 시나리오에서는 최종 사용자에게 수정된 데이터를 제공하고 Data Lake 관리자는 나중에 사용할 수 있도록 원시 버킷을 보호합니다. 또한 Amazon Comprehend를 사용하여 추가 처리를 구축하여 어조 또는 감정을 식별하고, 데이터 내의 엔터티를 식별하고, 각 메시지를 분류할 수 있습니다.

이 게시물의 일부로 각 서비스에 대한 개별 단계를 제공했으며 계정에 필요한 리소스를 프로비저닝할 수 있는 CloudFormation 템플릿도 포함했습니다. 이 템플릿은 개념 증명 또는 테스트 시나리오에만 사용해야 합니다. 에 대한 개발자 가이드를 참조하십시오. 아마존 이해, 람다Kinesis 데이터 Firehose 모든 서비스 제한에 대해

PII 식별 및 수정을 시작하려면 다음을 참조하십시오. 개인 식별 정보 (PII). 이 게시물의 예제 아키텍처에서는 Kinesis Data Firehose 데이터 변환을 사용하여 Amazon Comprehend API를 거의 실시간 데이터와 통합할 수 있습니다. Kinesis Data Firehose를 사용하여 거의 실시간 데이터로 구축할 수 있는 것에 대해 자세히 알아보려면 다음을 참조하십시오. Amazon Kinesis Data Firehose 개발자 안내서. 이 솔루션은 Amazon Comprehend 및 Kinesis Data Firehose를 사용할 수 있는 모든 AWS 리전에서 사용할 수 있습니다.


저자 소개

Amazon Comprehend 및 Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence를 사용하여 스트리밍 데이터의 민감한 데이터를 거의 실시간으로 수정합니다. 수직 검색. 일체 포함. 조 모로티 Amazon Web Services(AWS)의 솔루션 설계자로 미국 중서부의 엔터프라이즈 고객을 지원하고 있습니다. 그는 광범위한 기술 역할을 맡아왔으며 고객의 가능성에 대한 예술을 보여주는 것을 즐깁니다. 여가 시간에 그는 가족과 함께 새로운 장소를 탐험하고 스포츠 팀의 성과를 과대 분석하는 양질의 시간을 보내는 것을 즐깁니다.

Amazon Comprehend 및 Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence를 사용하여 스트리밍 데이터의 민감한 데이터를 거의 실시간으로 수정합니다. 수직 검색. 일체 포함.스리하쉬 아다리 Amazon Web Services(AWS)의 수석 솔루션 설계자로, 고객이 비즈니스 결과에서 거꾸로 작업하여 AWS에서 혁신적인 솔루션을 개발하도록 돕습니다. 수년 동안 그는 산업 분야 전반에 걸쳐 데이터 플랫폼 혁신에 대해 여러 고객을 도왔습니다. 그의 핵심 전문 분야에는 기술 전략, 데이터 분석 및 데이터 과학이 있습니다. 여가 시간에는 테니스를 치고, TV 프로그램을 폭식하고, 타블라를 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습