Bewerk gevoelige gegevens van streaminggegevens in bijna realtime met Amazon Comprehend en Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Bewerk gevoelige gegevens van streaminggegevens in bijna realtime met Amazon Comprehend en Amazon Kinesis Data Firehose

Bijna realtime levering van gegevens en inzichten stelt bedrijven in staat snel te reageren op de behoeften van hun klanten. Realtime gegevens kunnen afkomstig zijn van verschillende bronnen, waaronder sociale media, IoT-apparaten, infrastructuurbewaking, callcenterbewaking en meer. Vanwege de breedte en diepte van gegevens die uit meerdere bronnen worden opgenomen, zoeken bedrijven naar oplossingen om de privacy van hun klanten te beschermen en te voorkomen dat gevoelige gegevens toegankelijk zijn vanaf eindsystemen. Voorheen moest u vertrouwen op regels-engines voor persoonlijk identificeerbare informatie (PII) die valse positieven konden markeren of gegevens missen, of u moest aangepaste machine learning-modellen (ML) bouwen en onderhouden om PII in uw streaminggegevens te identificeren. U moest ook de infrastructuur implementeren en onderhouden die nodig is om deze motoren of modellen te ondersteunen.

Om dit proces te stroomlijnen en de kosten te verlagen, kunt u gebruik maken van: Amazon begrijpt het, een natuurlijke taalverwerkingsservice (NLP) die ML gebruikt om inzichten en relaties zoals mensen, plaatsen, gevoelens en onderwerpen in ongestructureerde tekst te vinden. Je kunt nu Amazon Comprehend ML-mogelijkheden gebruiken om PII te detecteren en te redigeren in e-mails van klanten, supporttickets, productrecensies, sociale media en meer. Er is geen ML-ervaring vereist. U kunt bijvoorbeeld ondersteuningstickets en kennisartikelen analyseren om PII-entiteiten te detecteren en de tekst te redigeren voordat u de documenten indexeert. Daarna zijn documenten vrij van PII-entiteiten en kunnen gebruikers de gegevens gebruiken. Door PII-entiteiten te redigeren, kunt u de privacy van uw klant beschermen en voldoen aan de lokale wet- en regelgeving.

In dit bericht leert u hoe u Amazon Comprehend in uw streaming-architecturen kunt implementeren om PII-entiteiten in bijna realtime te redigeren met behulp van Amazon Kinesis-gegevens Firehose Met AWS Lambda.

Dit bericht is gericht op het redigeren van gegevens uit geselecteerde velden die worden opgenomen in een streamingarchitectuur met behulp van Kinesis Data Firehose, waar u aanvullende afgeleide kopieën van de gegevens wilt maken, opslaan en onderhouden voor gebruik door eindgebruikers of downstream-toepassingen. Als je gebruikt Amazon Kinesis-gegevensstromen of aanvullende use-cases hebben buiten PII-redactie, zie: Vertalen, redigeren en analyseren van streaminggegevens met behulp van SQL-functies met Amazon Kinesis Data Analytics, Amazon Translate en Amazon Comprehend, waar we laten zien hoe u kunt gebruiken Amazon Kinesis Data Analytics Studio Mogelijk gemaakt door Apache Zeppelin en Apache Flink om tekstvelden in streaminggegevens interactief te analyseren, vertalen en redigeren.

Overzicht oplossingen

De volgende afbeelding toont een voorbeeldarchitectuur voor het uitvoeren van PII-redactie van streaminggegevens in realtime, met behulp van: Amazon eenvoudige opslagservice (Amazone S3), Kinesis Data Firehose-gegevenstransformatie, Amazon begrijpt het en AWS Lambda. Daarnaast gebruiken we de AWS SDK voor Python (Boto3) voor de Lambda-functies. Zoals aangegeven in het diagram, bevat de onbewerkte S3-bucket niet-geredigeerde gegevens en bevat de geredigeerde S3-bucket geredigeerde gegevens na gebruik van de Amazon Comprehend DetectPiiEntities API binnen een Lambda-functie.

Betrokken kosten

Naast de kosten van Kinesis Data Firehose, Amazon S3 en Lambda, brengt deze oplossing gebruikskosten met zich mee van Amazon Comprehend. Het bedrag dat u betaalt, is een factor van het totale aantal records dat PII bevat en de tekens die door de Lambda-functie worden verwerkt. Voor meer informatie, zie: Amazon Kinesis Data Firehose-prijzen, Amazon begrijpt prijzen en AWS Lambda-prijzen.

Laten we als voorbeeld aannemen dat u 10,000 logboekrecords hebt en dat de sleutelwaarde waarvan u PII wilt redigeren 500 tekens is. Van de 10,000 logboekrecords zijn er 50 geïdentificeerd met PII. De kostendetails zijn als volgt:

Bevat PII-kosten:

  • Grootte van elke sleutelwaarde = 500 tekens (1 eenheid = 100 tekens)
  • Aantal eenheden (100 tekens) per record (minimaal 3 eenheden) = 5
  • Totaal aantal eenheden = 10,000 (records) x 5 (eenheden per record) x 1 (Amazon Comprehend-verzoeken per record) = 50,000
  • Prijs per stuk = $ 0.000002
    • Totale kosten voor het identificeren van logboekrecords met PII met behulp van de BevatPiiEntities-API = $ 0.1 [50,000 eenheden x $ 0.000002] 

PII-kosten bewerken:

  • Totaal aantal eenheden met PII = 50 (records) x 5 (eenheden per record) x 1 (Amazon Comprehend-verzoeken per record) = 250
  • Prijs per stuk = $ 0.0001
    • Totale kosten voor het identificeren van de locatie van PII met behulp van de DetectPiiEntities API = [aantal eenheden] x [kosten per eenheid] = 250 x $ 0.0001 = $ 0.025

Totale kosten voor identificatie en redactie:

  • Totale kosten: $ 0.1 (validatie als veld PII bevat) + $ 0.025 (bewerk velden die PII bevatten) = $ 0.125

Implementeer de oplossing met AWS CloudFormation

Voor dit bericht geven we een AWS CloudFormatie bewerking van streaminggegevens sjabloon, dat de volledige details van de implementatie biedt om herhaalbare implementaties mogelijk te maken. Na implementatie maakt deze sjabloon twee S3-buckets: één om de onbewerkte voorbeeldgegevens op te slaan die zijn opgenomen uit de Amazon Kinesis Data Generator (KDG), en één om de geredigeerde gegevens op te slaan. Bovendien creëert het een Kinesis Data Firehose-leveringsstroom met: DirectPUT als invoer, en een Lambda-functie die de Amazon Comprehend . aanroept Bevat PiiEntities en DetectPiiEntiteiten API om PII-gegevens te identificeren en te redigeren. De Lambda-functie is afhankelijk van gebruikersinvoer in de omgevingsvariabelen om te bepalen welke sleutelwaarden moeten worden geïnspecteerd voor PII.

De Lambda-functie in deze oplossing heeft een beperkte laadcapaciteit tot 100 KB. Als er een payload wordt opgegeven waarvan de tekst groter is dan 100 KB, zal de Lambda-functie deze overslaan.

Voer de volgende stappen uit om de oplossing te implementeren:

  1. Start de CloudFormation-stack in US East (N. Virginia) us-east-1:
    Bewerk gevoelige gegevens van streaminggegevens in bijna realtime met Amazon Comprehend en Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  2. Voer een stapelnaam in en laat andere parameters op hun standaard
  3. kies Ik erken dat AWS CloudFormation IAM-bronnen met aangepaste namen kan maken.
  4. Kies Maak een stapel.

Resources handmatig implementeren

Als u de architectuur liever handmatig bouwt in plaats van AWS CloudFormation te gebruiken, voert u de stappen in deze sectie uit.

Maak de S3-buckets

Maak uw S3-buckets met de volgende stappen:

  1. Kies op de Amazon S3-console Emmers in het navigatievenster.
  2. Kies Maak een bucket.
  3. Maak één bucket voor uw onbewerkte gegevens en één voor uw geredigeerde gegevens.
  4. Noteer de namen van de buckets die u zojuist hebt gemaakt.

De Lambda-functie maken

Voer de volgende stappen uit om de Lambda-functie te maken en te implementeren:

  1. Kies op de Lambda-console Maak functie.
  2. Kies Auteur vanaf nul.
  3. Voor Functie Naam, ga naar binnen AmazonComprehendPII-Redact.
  4. Voor Runtime, kiezen Python 3.9.
  5. Voor Architectuurselecteer x86_64.
  6. Voor Uitvoeringsrolselecteer Een nieuwe rol maken met Lambda-machtigingen.
  7. Nadat u de functie hebt gemaakt, voert u de volgende code in:
    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. Kies Implementeren.
  9. Kies in het navigatievenster Configuratie.
  10. Navigeer naar Omgevingsvariabelen.
  11. Kies Edit.
  12. Voor sleutel, ga naar binnen keys.
  13. Voor Waarde, voer de sleutelwaarden in waarvan u PII wilt redigeren, gescheiden door een komma en spatie. Voer bijvoorbeeld in Tweet1, Tweet2 als u de voorbeeldtestgegevens gebruikt die in het volgende gedeelte van dit bericht worden verstrekt.
  14. Kies Bespaar.
  15. Navigeer naar Algemene configuratie.
  16. Kies Edit.
  17. Wijzig de waarde van Timeout tot 1 minuut.
  18. Kies Bespaar.
  19. Navigeer naar machtigingen.
  20. Kies de rolnaam onder Uitvoeringsrol.
    U wordt doorgestuurd naar de AWS Identiteits- en toegangsbeheer (IAM)-console.
  21. Voor Machtigingen toevoegen, kiezen Voeg beleid toe.
  22. Enter Comprehend in de zoekbalk en kies het beleid ComprehendFullAccess.
  23. Kies Voeg beleid toe.

Creëer de Firehose-bezorgstroom

Voer de volgende stappen uit om uw Firehose-leveringsstroom te maken:

  1. Kies op de Kinesis Data Firehose-console Maak een leveringsstroom.
  2. Voor bronselecteer Directe PUT.
  3. Voor Bestemmingselecteer Amazon S3.
  4. Voor Naam van bezorgstroom, ga naar binnen ComprehendRealTimeBlog.
  5. Onder Transformeer bronrecords met AWS Lambdaselecteer ingeschakeld.
  6. Voor AWS Lambda-functie, voer de ARN in voor de functie die u hebt gemaakt, of blader naar de functie AmazonComprehendPII-Redact.
  7. Voor Buffer grootte, stel de waarde in op 1 MB.
  8. Voor Bufferinterval, laat het op 60 seconden staan.
  9. Onder Bestemmingsinstellingen, selecteert u de S3-bucket die u hebt gemaakt voor de geredigeerde gegevens.
  10. Onder Back-upinstellingen, selecteert u de S3-bucket die u voor de onbewerkte records hebt gemaakt.
  11. Onder Toestemming, maak of update een IAM-rol of kies een bestaande rol met de juiste machtigingen.
  12. Kies Maak een leveringsstroom.

Implementeer de streaming data-oplossing met de Kinesis Data Generator

U kunt de Kinesis Data Generator (KDG) gebruiken om voorbeeldgegevens op te nemen in Kinesis Data Firehose en de oplossing te testen. Om dit proces te vereenvoudigen, bieden we een Lambda-functie en CloudFormation-sjabloon om een Amazon Cognito gebruiker en wijs de juiste machtigingen toe om de KDG te gebruiken.

  1. Op de Amazon Kinesis Data Generator-pagina, kiezen Maak een Cognito-gebruiker met CloudFormation.U wordt doorgestuurd naar de AWS CloudFormation-console om uw stapel te maken.
  2. Geef een gebruikersnaam en wachtwoord op voor de gebruiker waarmee u inlogt op de KDG.
  3. Laat de andere instellingen op hun standaardwaarden staan ​​en maak je stapel aan.
  4. Op de Uitgangen tabblad, kies de KDG UI-link.
  5. Voer uw gebruikersnaam en wachtwoord in om in te loggen.

Stuur testrecords en valideer redactie in Amazon S3

Voer de volgende stappen uit om de oplossing te testen:

  1. Log in op de KDG-URL die u in de vorige stap hebt gemaakt.
  2. Kies de regio waar de AWS CloudFormation-stack is geïmplementeerd.
  3. Voor Stream/bezorgstream, kies de bezorgstroom die je hebt gemaakt (als je de sjabloon hebt gebruikt, heeft deze de indeling accountnumber-awscomprehend-blog).
  4. Laat de andere instellingen op hun standaardwaarden staan.
  5. Voor de recordsjabloon kunt u uw eigen tests maken of de volgende sjabloon gebruiken. Als u de onderstaande voorbeeldgegevens gebruikt voor het testen, moet u bijgewerkte omgevingsvariabelen hebben in de AmazonComprehendPII-Redact Lambda-functie om Tweet1, Tweet2. Indien geïmplementeerd via CloudFormation, update omgevingsvariabelen naar Tweet1, Tweet2 binnen de gecreëerde Lambda-functie. De voorbeeldtestgegevens staan ​​hieronder:
    {"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. Kies Verstuur dataen wacht een paar seconden totdat de records naar uw stream worden verzonden.
  7. Stop na enkele seconden de KDG-generator en controleer uw S3-buckets op de geleverde bestanden.

Het volgende is een voorbeeld van de onbewerkte gegevens in de onbewerkte S3-bucket:

{"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"}

Het volgende is een voorbeeld van de geredigeerde gegevens in de geredigeerde S3-bucket:

{"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"}

De gevoelige informatie is verwijderd uit de geredigeerde berichten, zodat u erop kunt vertrouwen dat u deze gegevens kunt delen met eindsystemen.

Opruimen

Wanneer u klaar bent met experimenteren met deze oplossing, ruimt u uw resources op door de AWS CloudFormation-console te gebruiken om alle resources te verwijderen die in dit voorbeeld zijn geïmplementeerd. Als u de handmatige stappen hebt gevolgd, moet u de twee buckets handmatig verwijderen, de AmazonComprehendPII-Redact functie, de ComprehendRealTimeBlog stream, de loggroep voor de ComprehendRealTimeBlog stream en alle IAM-rollen die zijn gemaakt.

Conclusie

Dit bericht liet u zien hoe u PII-redactie kunt integreren in uw bijna realtime streaming-architectuur en de verwerkingstijd van gegevens kunt verkorten door redactie tijdens de vlucht uit te voeren. In dit scenario levert u de geredigeerde gegevens aan uw eindgebruikers en een data lake-beheerder beveiligt de onbewerkte bucket voor later gebruik. Je zou ook extra verwerking kunnen bouwen met Amazon Comprehend om toon of sentiment te identificeren, entiteiten in de gegevens te identificeren en elk bericht te classificeren.

We hebben voor elke service afzonderlijke stappen gegeven als onderdeel van dit bericht en hebben ook een CloudFormation-sjabloon opgenomen waarmee u de vereiste bronnen in uw account kunt voorzien. Deze sjabloon mag alleen worden gebruikt voor proof of concept of testscenario's. Raadpleeg de handleidingen voor ontwikkelaars voor: Amazon begrijpt het, Lambda en Kinesis Data-brandslang voor eventuele servicelimieten.

Om aan de slag te gaan met PII-identificatie en redactie, zie Persoonlijk identificeerbare informatie (PII). Met de voorbeeldarchitectuur in dit bericht zou je elk van de Amazon Comprehend-API's kunnen integreren met bijna realtime gegevens met behulp van Kinesis Data Firehose-gegevenstransformatie. Voor meer informatie over wat u kunt bouwen met uw bijna realtime gegevens met Kinesis Data Firehose, raadpleegt u de: Amazon Kinesis Data Firehose-ontwikkelaarsgids. Deze oplossing is beschikbaar in alle AWS-regio's waar Amazon Comprehend en Kinesis Data Firehose beschikbaar zijn.


Over de auteurs

Bewerk gevoelige gegevens van streaminggegevens in bijna realtime met Amazon Comprehend en Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai. Joe Morotti is Solutions Architect bij Amazon Web Services (AWS) en helpt Enterprise-klanten in het middenwesten van de VS. Hij heeft een breed scala aan technische rollen vervuld en geniet ervan om de kunst van de klant van het mogelijke te laten zien. In zijn vrije tijd brengt hij graag quality time door met zijn gezin om nieuwe plaatsen te verkennen en de prestaties van zijn sportteam te overanalyseren

Bewerk gevoelige gegevens van streaminggegevens in bijna realtime met Amazon Comprehend en Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Sriharsh Adari is Senior Solutions Architect bij Amazon Web Services (AWS), waar hij klanten helpt terug te werken vanuit bedrijfsresultaten om innovatieve oplossingen op AWS te ontwikkelen. In de loop der jaren heeft hij meerdere klanten geholpen bij transformaties van dataplatforms in verschillende branches. Zijn kernexpertise omvat technologiestrategie, data-analyse en datawetenschap. In zijn vrije tijd speelt hij graag tennis, bingewatcht hij tv-shows en speelt hij graag Tabla.

Tijdstempel:

Meer van AWS-machine learning