Logo Zephyrnet

Redaguj wrażliwe dane z danych przesyłanych strumieniowo w czasie zbliżonym do rzeczywistego za pomocą Amazon Comprehend i Amazon Kinesis Data Firehose

Data:

Dostarczanie danych i spostrzeżeń w czasie zbliżonym do rzeczywistego umożliwia firmom szybkie reagowanie na potrzeby klientów. Dane w czasie rzeczywistym mogą pochodzić z różnych źródeł, w tym z mediów społecznościowych, urządzeń IoT, monitorowania infrastruktury, monitorowania call center i innych. Ze względu na rozległość i głębokość danych pobieranych z wielu źródeł, firmy poszukują rozwiązań chroniących prywatność swoich klientów i uniemożliwiających dostęp do danych wrażliwych z systemów końcowych. Wcześniej trzeba było polegać na mechanizmach reguł dotyczących informacji umożliwiających identyfikację osób, które mogły oznaczać fałszywe alarmy lub pominąć dane, lub trzeba było tworzyć i utrzymywać niestandardowe modele uczenia maszynowego (ML) w celu identyfikowania informacji umożliwiających identyfikację w danych przesyłanych strumieniowo. Trzeba było również wdrożyć i utrzymywać infrastrukturę niezbędną do obsługi tych silników lub modeli.

Aby usprawnić ten proces i obniżyć koszty, możesz użyć Amazon Comprehend, usługa przetwarzania języka naturalnego (NLP), która używa ML do znajdowania informacji i relacji, takich jak ludzie, miejsca, nastroje i tematy w tekście nieustrukturyzowanym. Możesz teraz korzystać z funkcji Amazon Comprehend ML do wykrywania i redagowania danych osobowych w wiadomościach e-mail klientów, zgłoszeniach pomocy technicznej, recenzjach produktów, mediach społecznościowych i nie tylko. Nie jest wymagane doświadczenie w ML. Na przykład można analizować zgłoszenia pomocy technicznej i artykuły merytoryczne, aby wykryć jednostki umożliwiające identyfikację i redagować tekst przed zindeksowaniem dokumentów. Po tym czasie dokumenty są wolne od jednostek PII, a użytkownicy mogą korzystać z danych. Redagowanie informacji umożliwiających identyfikację pomaga chronić prywatność klienta i przestrzegać lokalnych przepisów i regulacji.

W tym poście dowiesz się, jak wdrożyć Amazon Comprehend do swoich architektur strumieniowych, aby redagować jednostki PII w czasie zbliżonym do rzeczywistego Wąż strażacki Amazon Kinesis Data w AWS Lambda.

Ten post koncentruje się na redagowaniu danych z wybranych pól, które są pozyskiwane w architekturze przesyłania strumieniowego przy użyciu Kinesis Data Firehose, w której chcesz tworzyć, przechowywać i utrzymywać dodatkowe kopie pochodne danych do wykorzystania przez użytkowników końcowych lub dalsze aplikacje. Jeśli używasz Strumienie danych Amazon Kinesis lub mieć dodatkowe przypadki użycia poza redakcją PII, patrz Tłumacz, redaguj i analizuj dane strumieniowe za pomocą funkcji SQL za pomocą Amazon Kinesis Data Analytics, Amazon Translate i Amazon Comprehend, gdzie pokazujemy, jak możesz użyć Studio analizy danych Amazon Kinesis zasilany przez Apache Zeppelina i Apache Flash do interaktywnego analizowania, tłumaczenia i redagowania pól tekstowych w danych przesyłanych strumieniowo.

Omówienie rozwiązania

Poniższy rysunek przedstawia przykładową architekturę do przeprowadzania redakcji danych umożliwiających identyfikację osób przesyłanych strumieniowo w czasie rzeczywistym przy użyciu Usługa Amazon Simple Storage (Amazonka S3), Transformacja danych Kinesis Data Firehose, Amazon Comprehend, AWS Lambda. Dodatkowo używamy AWS SDK dla Pythona (Boto3) dla funkcji Lambda. Jak pokazano na diagramie, surowy zasobnik S3 zawiera niezredagowane dane, a zredagowany zasobnik S3 zawiera zredagowane dane po użyciu Amazon Comprehend DetectPiiEntities API w ramach funkcji Lambda.

Związane koszty

Oprócz kosztów Kinesis Data Firehose, Amazon S3 i Lambda, to rozwiązanie będzie wiązało się z kosztami użytkowania z Amazon Comprehend. Kwota, którą płacisz, jest czynnikiem całkowitej liczby rekordów zawierających informacje umożliwiające identyfikację użytkownika oraz znaki przetwarzane przez funkcję Lambda. Aby uzyskać więcej informacji, zobacz Cennik Amazon Kinesis Data Firehose, Cennik Amazon Comprehend, Cennik AWS Lambda.

Jako przykład załóżmy, że masz 10,000 500 rekordów dzienników, a wartość klucza, z której chcesz zredagować informacje umożliwiające identyfikację, to 10,000 znaków. Spośród 50 XNUMX rekordów dziennika XNUMX zidentyfikowano jako zawierające informacje umożliwiające identyfikację. Szczegóły kosztów są następujące:

Zawiera koszt PII:

  • Rozmiar każdej wartości klucza = 500 znaków (1 jednostka = 100 znaków)
  • Liczba jednostek (100 znaków) na rekord (minimum to 3 jednostki) = 5
  • Łączna liczba jednostek = 10,000 5 (rekordy) x 1 (jednostki na rekord) x 50,000 (żądania Amazon Comprehend na rekord) = XNUMX XNUMX
  • Cena za jednostkę = 0.000002 USD
    • Całkowity koszt identyfikacji rekordów dziennika z informacjami umożliwiającymi identyfikację użytkownika przy użyciu interfejsu API ContainsPiiEntities = 0.1 USD [50,000 0.000002 jednostek x XNUMX] 

Redaguj koszt PII:

  • Łączna liczba jednostek zawierających PII = 50 (rekordy) x 5 (jednostki na rekord) x 1 (żądania Amazon Comprehend na rekord) = 250
  • Cena za jednostkę = 0.0001 USD
    • Całkowity koszt identyfikacji lokalizacji PII za pomocą DetectPiiEntities API = [liczba jednostek] x [koszt na jednostkę] = 250 x 0.0001 USD = 0.025 USD

Całkowity koszt identyfikacji i redakcji:

  • Całkowity koszt: 0.1 USD (walidacja, jeśli pole zawiera PII) + 0.025 USD (redagowanie pól, które zawierają PII) = 0.125 USD

Wdróż rozwiązanie z AWS CloudFormation

W tym poście zapewniamy Tworzenie chmury AWS redakcja danych strumieniowych szablon, który zawiera pełne szczegóły implementacji, aby umożliwić powtarzalne wdrożenia. Po wdrożeniu ten szablon tworzy dwa zasobniki S3: jeden do przechowywania nieprzetworzonych danych próbek pobranych z generatora danych Amazon Kinesis (KDG), a drugi do przechowywania zredagowanych danych. Dodatkowo tworzy strumień dostarczania Kinesis Data Firehose z DirectPUT jako dane wejściowe i funkcję Lambda, która wywołuje Amazon Comprehend ZawieraPiiEntities i WykryjPiiEntities API do identyfikacji i redagowania danych PII. Funkcja Lambda opiera się na danych wprowadzonych przez użytkownika w zmiennych środowiskowych, aby określić, jakie wartości kluczy należy sprawdzić pod kątem PII.

Funkcja Lambda w tym rozwiązaniu ma ograniczone rozmiary ładunku do 100 KB. Jeśli podano ładunek, w którym tekst jest większy niż 100 KB, funkcja Lambda go pominie.

Aby wdrożyć rozwiązanie, wykonaj następujące czynności:

  1. Uruchom stos CloudFormation we wschodnich stanach USA (Płn. Wirginia) us-east-1:
  2. Wprowadź nazwę stosu i pozostaw inne parametry jako domyślne
  3. Wybierz Przyjmuję do wiadomości, że AWS CloudFormation może tworzyć zasoby IAM z niestandardowymi nazwami.
  4. Dodaj Utwórz stos.

Wdrażaj zasoby ręcznie

Jeśli wolisz skompilować architekturę ręcznie zamiast używać AWS CloudFormation, wykonaj kroki opisane w tej sekcji.

Utwórz zasobniki S3

Utwórz zasobniki S3, wykonując następujące czynności:

  1. Na konsoli Amazon S3 wybierz Wiadra w okienku nawigacji.
  2. Dodaj Utwórz wiadro.
  3. Utwórz jeden zasobnik na surowe dane i jeden na dane zredagowane.
  4. Zanotuj nazwy utworzonych właśnie zasobników.

Utwórz funkcję Lambda

Aby utworzyć i wdrożyć funkcję Lambda, wykonaj następujące kroki:

  1. Na konsoli Lambda wybierz Utwórz funkcję.
  2. Dodaj Autor od zera.
  3. W razie zamówieenia projektu Nazwa funkcji, wchodzić AmazonComprehendPII-Redact.
  4. W razie zamówieenia projektu Czas pracywybierz Python 3.9.
  5. W razie zamówieenia projektu Architektura, Wybierz x86_64.
  6. W razie zamówieenia projektu Rola wykonawcza, Wybierz Utwórz nową rolę z uprawnieniami Lambda.
  7. Po utworzeniu funkcji wprowadź następujący kod:
    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. Dodaj Rozmieścić.
  9. W okienku nawigacji wybierz Konfiguracja.
  10. Nawigować do Zmienne środowiskowe.
  11. Dodaj Edytuj.
  12. W razie zamówieenia projektu Klawisz, wchodzić keys.
  13. W razie zamówieenia projektu wartość, wpisz wartości klucza, z których chcesz zredagować informacje umożliwiające identyfikację osoby, oddzielone przecinkiem i spacją. Na przykład wpisz Tweet1, Tweet2 jeśli korzystasz z przykładowych danych testowych podanych w następnej sekcji tego posta.
  14. Dodaj Zapisz.
  15. Nawigować do Ogólna konfiguracja.
  16. Dodaj Edytuj.
  17. Zmień wartość Timeout do 1 minuty.
  18. Dodaj Zapisz.
  19. Nawigować do Uprawnienia.
  20. Wybierz nazwę roli pod Rola wykonania.
    Zostaniesz przekierowany do AWS Zarządzanie tożsamością i dostępem (IAM) konsola.
  21. W razie zamówieenia projektu Dodaj uprawnieniawybierz Dołącz zasady.
  22. Wchodzę Comprehend w pasku wyszukiwania i wybierz politykę ComprehendFullAccess.
  23. Dodaj Dołącz zasady.

Utwórz strumień dostawy Firehose

Aby utworzyć strumień dostarczania Firehose, wykonaj następujące czynności:

  1. W konsoli Kinesis Data Firehose wybierz Utwórz strumień dostarczania.
  2. W razie zamówieenia projektu Źródło, Wybierz Bezpośrednie PUT.
  3. W razie zamówieenia projektu Cel, Wybierz Amazon S3.
  4. W razie zamówieenia projektu Nazwa strumienia dostawy, wchodzić ComprehendRealTimeBlog.
  5. Pod Przekształć rekordy źródłowe za pomocą AWS Lambda, Wybierz Włączone.
  6. W razie zamówieenia projektu AWS Funkcja lambda, wprowadź ARN dla utworzonej funkcji lub przejdź do funkcji AmazonComprehendPII-Redact.
  7. W razie zamówieenia projektu Rozmiar bufora, ustaw wartość na 1 MB.
  8. W razie zamówieenia projektu Interwał bufora, pozostaw to jako 60 sekund.
  9. Pod Ustawienia docelowe, wybierz zasobnik S3 utworzony dla zredagowanych danych.
  10. Pod Ustawienia kopii zapasowej, wybierz zasobnik S3 utworzony dla nieprzetworzonych rekordów.
  11. Pod pozwolenie, utwórz lub zaktualizuj rolę uprawnień albo wybierz istniejącą rolę z odpowiednimi uprawnieniami.
  12. Dodaj Utwórz strumień dostarczania.

Wdróż rozwiązanie przesyłania strumieniowego danych za pomocą generatora danych Kinesis

Możesz użyć generatora danych Kinesis (KDG), aby pobrać przykładowe dane do Kinesis Data Firehose i przetestować rozwiązanie. Aby uprościć ten proces, udostępniamy funkcję Lambda i szablon CloudFormation do tworzenia Amazon Cognito użytkownika i nadać odpowiednie uprawnienia do korzystania z KDG.

  1. Na Strona generatora danych Amazon Kinesiswybierz Utwórz użytkownika Cognito za pomocą CloudFormation.Zostajesz przekierowany do konsoli AWS CloudFormation, aby utworzyć swój stos.
  2. Podaj nazwę użytkownika i hasło dla użytkownika, za pomocą którego logujesz się do KDG.
  3. Pozostałe ustawienia pozostaw domyślne i utwórz swój stos.
  4. Na Wyjścia wybierz link KDG UI.
  5. Wpisz swoją nazwę użytkownika i hasło, aby się zalogować.

Wysyłaj rekordy testowe i weryfikuj redakcję w Amazon S3

Aby przetestować rozwiązanie, wykonaj następujące czynności:

  1. Zaloguj się do adresu URL KDG utworzonego w poprzednim kroku.
  2. Wybierz region, w którym wdrożono stos AWS CloudFormation.
  3. W razie zamówieenia projektu Strumień/strumień dostawy, wybierz utworzony strumień dostarczania (jeśli korzystałeś z szablonu, ma on format accountnumber-awscomprehend-blog).
  4. Pozostałe ustawienia pozostaw domyślne.
  5. W przypadku szablonu rekordu możesz utworzyć własne testy lub użyć następującego szablonu. Jeśli do testowania używasz podanych poniżej przykładowych danych, powinieneś mieć zaktualizowane zmienne środowiskowe w AmazonComprehendPII-Redact Funkcja lambda do Tweet1, Tweet2. W przypadku wdrożenia za pośrednictwem CloudFormation zaktualizuj zmienne środowiskowe do Tweet1, Tweet2 w ramach utworzonej funkcji Lambda. Przykładowe dane testowe znajdują się poniżej:
    {"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. Dodaj Wyślij danei poczekaj kilka sekund, aż rekordy zostaną wysłane do Twojego strumienia.
  7. Po kilku sekundach zatrzymaj generator KDG i sprawdź swoje wiadra S3 pod kątem dostarczonych plików.

Oto przykład nieprzetworzonych danych w nieprzetworzonym zasobniku 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"}

Oto przykład zredagowanych danych w zredagowanym zasobniku 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"}

Poufne informacje zostały usunięte z redagowanych wiadomości, dając pewność, że możesz udostępnić te dane systemom końcowym.

Oczyszczanie

Po zakończeniu eksperymentowania z tym rozwiązaniem wyczyść zasoby, korzystając z konsoli AWS CloudFormation, aby usunąć wszystkie zasoby wdrożone w tym przykładzie. Jeśli wykonałeś ręczne czynności, musisz ręcznie usunąć dwa zasobniki, AmazonComprehendPII-Redact funkcja, ComprehendRealTimeBlog strumień, grupa dzienników dla ComprehendRealTimeBlog strumienia i wszelkich utworzonych ról uprawnień.

Wnioski

W tym poście pokazano, jak zintegrować redakcję danych osobowych z architekturą przesyłania strumieniowego w czasie zbliżonym do rzeczywistego i skrócić czas przetwarzania danych, wykonując redakcję w locie. W tym scenariuszu udostępniasz zredagowane dane użytkownikom końcowym, a administrator usługi Data Lake zabezpiecza nieprzetworzony zasobnik do późniejszego użycia. Możesz także zbudować dodatkowe przetwarzanie za pomocą Amazon Comprehend, aby zidentyfikować ton lub nastroje, zidentyfikować jednostki w danych i sklasyfikować każdą wiadomość.

W ramach tego posta przedstawiliśmy indywidualne kroki dla każdej usługi, a także zawarliśmy szablon CloudFormation, który umożliwia udostępnienie wymaganych zasobów na Twoim koncie. Ten szablon powinien być używany wyłącznie do weryfikacji koncepcji lub scenariuszy testowania. Zapoznaj się z przewodnikami programisty dla Amazon Comprehend, Lambda, Wąż strażacki danych Kinesis dla wszelkich limitów usług.

Aby rozpocząć identyfikację i redakcję PII, zobacz Dane osobowe (PII). Dzięki przykładowej architekturze w tym poście możesz zintegrować dowolne interfejsy API Amazon Comprehend z danymi w czasie zbliżonym do rzeczywistego za pomocą transformacji danych Kinesis Data Firehose. Aby dowiedzieć się więcej o tym, co możesz zbudować z danych w czasie zbliżonym do rzeczywistego za pomocą Kinesis Data Firehose, zapoznaj się z Przewodnik dla programistów Amazon Kinesis Data Firehose. To rozwiązanie jest dostępne we wszystkich regionach AWS, w których dostępne są Amazon Comprehend i Kinesis Data Firehose.


O autorach

Joego Morottiego jest architektem rozwiązań w Amazon Web Services (AWS), pomagającym klientom korporacyjnym w Środkowym Zachodzie Stanów Zjednoczonych. Pełnił szeroki zakres ról technicznych i lubił pokazywać sztukę klienta tego, co możliwe. W wolnym czasie lubi spędzać czas z rodziną, odkrywając nowe miejsca i nadmiernie analizując wyniki swojej drużyny sportowej

Sriharsz Adari jest starszym architektem rozwiązań w Amazon Web Services (AWS), gdzie pomaga klientom pracować wstecz od wyników biznesowych do opracowywania innowacyjnych rozwiązań w AWS. Przez lata pomagał wielu klientom w transformacji platform danych w różnych branżach. Jego główne obszary specjalizacji obejmują strategię technologiczną, analizę danych i naukę o danych. W wolnym czasie lubi grać w tenisa, oglądać programy telewizyjne i grać w Tablę.

spot_img

Najnowsza inteligencja

spot_img

Czat z nami

Cześć! Jak mogę ci pomóc?