Logo Zephyrnet

Redactați datele sensibile din fluxul de date în timp aproape real folosind Amazon Comprehend și Amazon Kinesis Data Firehose

Data:

Livrarea datelor și a informațiilor în timp aproape real permite companiilor să răspundă rapid nevoilor clienților lor. Datele în timp real pot proveni dintr-o varietate de surse, inclusiv rețelele sociale, dispozitivele IoT, monitorizarea infrastructurii, monitorizarea centrului de apeluri și multe altele. Datorită amplorii și profunzimii datelor care sunt ingerate din mai multe surse, companiile caută soluții pentru a proteja confidențialitatea clienților și pentru a împiedica accesarea datelor sensibile din sistemele finale. Anterior, trebuia să te bazezi pe motoare de reguli pentru informații de identificare personală (PII) care puteau semnala false pozitive sau pierderea datelor sau a trebuit să creați și să mențineți modele personalizate de învățare automată (ML) pentru a identifica PII în datele dvs. de streaming. De asemenea, trebuia să implementați și să întrețineți infrastructura necesară pentru a susține aceste motoare sau modele.

Pentru a ajuta la eficientizarea acestui proces și la reducerea costurilor, puteți utiliza Amazon Comprehend, un serviciu de procesare a limbajului natural (NLP) care utilizează ML pentru a găsi informații și relații precum oameni, locuri, sentimente și subiecte în text nestructurat. Acum puteți utiliza capabilitățile Amazon Comprehend ML pentru a detecta și redacta informațiile personale în e-mailurile clienților, bilete de asistență, recenzii de produse, rețele sociale și multe altele. Nu este necesară experiența ML. De exemplu, puteți analiza biletele de asistență și articolele de cunoștințe pentru a detecta entitățile PII și a redacta textul înainte de a indexa documentele. După aceea, documentele sunt libere de entități PII și utilizatorii pot consuma datele. Redactarea entităților PII vă ajută să protejați confidențialitatea clientului și să respectați legile și reglementările locale.

În această postare, învățați cum să implementați Amazon Comprehend în arhitecturile dvs. de streaming pentru a redacta entitățile PII în timp aproape real, folosind Firehose Amazon Kinesis Data cu AWS Lambdas.

Această postare se concentrează pe redactarea datelor din câmpuri selectate care sunt ingerate într-o arhitectură de streaming folosind Kinesis Data Firehose, unde doriți să creați, să stocați și să mențineți copii derivate suplimentare ale datelor pentru consumul de către utilizatorii finali sau aplicațiile din aval. Dacă folosești Fluxuri de date Amazon Kinesis sau aveți cazuri de utilizare suplimentare în afara redacției PII, consultați Traduceți, redactați și analizați datele de streaming folosind funcții SQL cu Amazon Kinesis Data Analytics, Amazon Translate și Amazon Comprehend, unde vă arătăm cum puteți utiliza Amazon Kinesis Data Analytics Studio powered by Apache Zeppelin și Apache Flash pentru a analiza, traduce și redacta în mod interactiv câmpurile de text din fluxul de date.

Prezentare generală a soluțiilor

Următoarea figură prezintă un exemplu de arhitectură pentru efectuarea redacției PII a datelor în flux în timp real, folosind Serviciul Amazon de stocare simplă (Amazon S3), Transformarea datelor Kinesis Data Firehose, Amazon Comprehend, și AWS Lambdas. În plus, folosim SDK AWS pentru Python (Boto3) pentru funcțiile Lambda. După cum se indică în diagramă, compartimentul brut S3 conține date neexprimate, iar compartimentul redactat S3 conține date redactate după utilizarea Amazon Comprehend DetectPiiEntities API într-o funcție Lambda.

Costurile implicate

Pe lângă costurile Kinesis Data Firehose, Amazon S3 și Lambda, această soluție va suporta costuri de utilizare de la Amazon Comprehend. Suma pe care o plătiți este un factor al numărului total de înregistrări care conțin PII și caracterele care sunt procesate de funcția Lambda. Pentru mai multe informații, consultați Prețurile Amazon Kinesis Data Firehose, Prețurile Amazon Comprehend, și Prețuri AWS Lambda.

De exemplu, să presupunem că aveți 10,000 de înregistrări de jurnal, iar valoarea cheii din care doriți să redactați informațiile personale este de 500 de caractere. Din cele 10,000 de înregistrări de jurnal, 50 sunt identificate ca conținând PII. Detaliile costurilor sunt următoarele:

Conține costul IPI:

  • Dimensiunea fiecărei valori cheie = 500 de caractere (1 unitate = 100 de caractere)
  • Număr de unități (100 de caractere) per înregistrare (minimum 3 unități) = 5
  • Unități totale = 10,000 (înregistrări) x 5 (unități pe înregistrare) x 1 (solicitări Amazon Comprehend per înregistrare) = 50,000
  • Preț per unitate = 0.000002 USD
    • Costul total pentru identificarea înregistrărilor de jurnal cu PII utilizând API ContainsPiiEntities = 0.1 USD [50,000 de unități x 0.000002 USD] 

Costul redacției PII:

  • Total de unități care conțin PII = 50 (înregistrări) x 5 (unități per înregistrare) x 1 (solicitări Amazon Comprehend per înregistrare) = 250
  • Preț per unitate = 0.0001 USD
    • Costul total pentru identificarea locației PII folosind DetectPiiEntities API = [număr de unități] x [cost pe unitate] = 250 x 0.0001 USD = 0.025 USD

Costul total pentru identificare și redactare:

  • Cost total: 0.1 USD (validare dacă câmpul conține PII) + 0.025 USD (câmpurile redactate care conțin PII) = 0.125 USD

Implementați soluția cu AWS CloudFormation

Pentru această postare, oferim un Formarea AWS Cloud redarea datelor în flux șablon, care oferă detaliile complete ale implementării pentru a permite implementări repetabile. La implementare, acest șablon creează două compartimente S3: unul pentru a stoca datele de eșantion brute ingerate din Amazon Kinesis Data Generator (KDG) și unul pentru a stoca datele redactate. În plus, creează un flux de livrare Kinesis Data Firehose cu DirectPUT ca intrare și o funcție Lambda care apelează Amazon Comprehend ConținePiiEntities și DetectPiiEntities API pentru a identifica și redacta datele PII. Funcția Lambda se bazează pe intrarea utilizatorului în variabilele de mediu pentru a determina ce valori cheie trebuie inspectate pentru PII.

Funcția Lambda din această soluție are dimensiuni limitate ale încărcăturii utile la 100 KB. Dacă este furnizată o sarcină utilă în care textul este mai mare de 100 KB, funcția Lambda o va omite.

Pentru a implementa soluția, parcurgeți următorii pași:

  1. Lansați stiva CloudFormation în estul SUA (N. Virginia) us-east-1:
  2. Introduceți un nume de stivă și lăsați alți parametri la valoarea implicită
  3. Selectați Recunosc că AWS CloudFormation ar putea crea resurse IAM cu nume personalizate.
  4. Alege Creați stivă.

Implementați resursele manual

Dacă preferați să construiți arhitectura manual în loc să utilizați AWS CloudFormation, parcurgeți pașii din această secțiune.

Creați gălețile S3

Creați-vă gălețile S3 cu următorii pași:

  1. În consola Amazon S3, alegeți Cupă în panoul de navigare.
  2. Alege Creați găleată.
  3. Creați un grup pentru datele dvs. brute și unul pentru datele dvs. redactate.
  4. Notați numele găleților pe care tocmai le-ați creat.

Creați funcția Lambda

Pentru a crea și implementa funcția Lambda, parcurgeți următorii pași:

  1. În consola Lambda, alegeți Funcție Creare.
  2. Alege Autor de la zero.
  3. Pentru Numele funcției, introduce AmazonComprehendPII-Redact.
  4. Pentru Runtime, alege Python 3.9.
  5. Pentru Arhitectură, Selectați x86_64.
  6. Pentru Rolul de execuție, Selectați Creați un rol nou cu permisiuni Lambda.
  7. După ce creați funcția, introduceți următorul cod:
    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. Alege Lansa.
  9. În panoul de navigare, alegeți Configurare.
  10. Navigheaza catre Variabile de mediu.
  11. Alege Editati.
  12. Pentru Cheie, introduce keys.
  13. Pentru Valoare, introduceți valorile cheie din care doriți să redactați informațiile personale, separate prin virgulă și spațiu. De exemplu, introduceți Tweet1, Tweet2 dacă utilizați probele de date de testare furnizate în următoarea secțiune a acestei postări.
  14. Alege Economisiți.
  15. Navigheaza catre Configurație generală.
  16. Alege Editati.
  17. Modificați valoarea Pauză la 1 minut.
  18. Alege Economisiți.
  19. Navigheaza catre Permisiuni.
  20. Alegeți numele rolului de sub Rolul de execuție.
    Sunteți redirecționat către Gestionarea identității și accesului AWS (IAM) consola.
  21. Pentru Adăugați permisiuni, alege Atașați politicile.
  22. Intrați Comprehend în bara de căutare și alegeți politica ComprehendFullAccess.
  23. Alege Atașați politicile.

Creați fluxul de livrare Firehose

Pentru a crea fluxul de livrare Firehose, parcurgeți următorii pași:

  1. Pe consola Kinesis Data Firehose, alegeți Creați un flux de livrare.
  2. Pentru Sursă, Selectați PUNERE Direct.
  3. Pentru Destinaţie, Selectați Amazon S3.
  4. Pentru Numele fluxului de livrare, introduce ComprehendRealTimeBlog.
  5. În Transformați înregistrările sursă cu AWS Lambda, Selectați Activat.
  6. Pentru Funcția AWS Lambda, introduceți ARN-ul pentru funcția pe care ați creat-o sau navigați la funcție AmazonComprehendPII-Redact.
  7. Pentru Dimensiunea memoriei tampon, setați valoarea la 1 MB.
  8. Pentru Interval tampon, lăsați-l ca 60 de secunde.
  9. În Setări de destinație, selectați compartimentul S3 pe care l-ați creat pentru datele redactate.
  10. În Setări de rezervă, selectați compartimentul S3 pe care l-ați creat pentru înregistrările brute.
  11. În permisiune, fie creați sau actualizați un rol IAM, fie alegeți un rol existent cu permisiunile corespunzătoare.
  12. Alege Creați un flux de livrare.

Implementați soluția de streaming de date cu Kinesis Data Generator

Puteți utiliza Kinesis Data Generator (KDG) pentru a ingera date mostre în Kinesis Data Firehose și a testa soluția. Pentru a simplifica acest proces, oferim o funcție Lambda și un șablon CloudFormation pentru a crea un Amazon Cognito utilizator și atribuiți permisiunile corespunzătoare pentru a utiliza KDG.

  1. Pe Pagina Amazon Kinesis Data Generator, alege Creați un utilizator Cognito cu CloudFormation.Sunteți redirecționat către consola AWS CloudFormation pentru a vă crea stiva.
  2. Furnizați un nume de utilizator și o parolă pentru utilizatorul cu care vă conectați la KDG.
  3. Lăsați celelalte setări la valorile implicite și creați-vă stiva.
  4. Pe ieşiri fila, alegeți linkul KDG UI.
  5. Introduceți numele de utilizator și parola pentru a vă autentifica.

Trimiteți înregistrări de testare și validați redactarea în Amazon S3

Pentru a testa soluția, parcurgeți următorii pași:

  1. Conectați-vă la adresa URL KDG pe care ați creat-o la pasul anterior.
  2. Alegeți regiunea în care a fost implementată stiva AWS CloudFormation.
  3. Pentru Flux/flux de livrare, alegeți fluxul de livrare pe care l-ați creat (dacă ați folosit șablonul, acesta are formatul accountnumber-awscomprehend-blog).
  4. Lăsați celelalte setări la valorile implicite.
  5. Pentru șablonul de înregistrare, puteți să vă creați propriile teste sau să utilizați următorul șablon. Dacă utilizați eșantionul de date furnizat mai jos pentru testare, ar trebui să aveți variabile de mediu actualizate în AmazonComprehendPII-Redact Funcția lambda la Tweet1, Tweet2. Dacă este implementat prin CloudFormation, actualizați variabilele de mediu la Tweet1, Tweet2 în cadrul funcției Lambda creată. Eșantionul de date de testare este mai jos:
    {"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. Alege Trimite dateși lăsați câteva secunde pentru ca înregistrările să fie trimise în fluxul dvs.
  7. După câteva secunde, opriți generatorul KDG și verificați-vă gălețile S3 pentru fișierele livrate.

Următorul este un exemplu de date brute din compartimentul S3 brut:

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

Următorul este un exemplu de date redactate din compartimentul S3 redactat:

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

Informațiile sensibile au fost eliminate din mesajele redactate, oferind încredere că puteți partaja aceste date cu sistemele finale.

A curăța

Când ați terminat de experimentat cu această soluție, curățați-vă resursele utilizând consola AWS CloudFormation pentru a șterge toate resursele implementate în acest exemplu. Dacă ați urmat pașii manuali, va trebui să ștergeți manual cele două găleți, the AmazonComprehendPII-Redact funcția, ComprehendRealTimeBlog stream, grupul de jurnal pentru ComprehendRealTimeBlog flux și orice rol IAM care au fost create.

Concluzie

Această postare v-a arătat cum să integrați redarea PII în arhitectura dvs. de streaming aproape în timp real și să reduceți timpul de procesare a datelor prin efectuarea redactării în zbor. În acest scenariu, furnizați datele redactate utilizatorilor finali, iar un administrator al lacului de date securizează compartimentul brut pentru o utilizare ulterioară. De asemenea, puteți crea procesări suplimentare cu Amazon Comprehend pentru a identifica tonul sau sentimentul, pentru a identifica entitățile din date și pentru a clasifica fiecare mesaj.

Am furnizat pași individuali pentru fiecare serviciu ca parte a acestei postări și am inclus, de asemenea, un șablon CloudFormation care vă permite să furnizați resursele necesare în contul dvs. Acest șablon ar trebui utilizat numai pentru dovezi de concept sau scenarii de testare. Consultați ghidurile pentru dezvoltatori pentru Amazon Comprehend, Lambda, și Kinesis Data Firehose pentru orice limite de serviciu.

Pentru a începe cu identificarea și redactarea PII, consultați Informații de identificare personală (PII). Cu exemplul de arhitectură din această postare, puteți integra oricare dintre API-urile Amazon Comprehend cu date aproape în timp real, folosind transformarea datelor Kinesis Data Firehose. Pentru a afla mai multe despre ceea ce puteți construi cu datele dvs. aproape în timp real cu Kinesis Data Firehose, consultați Ghid pentru dezvoltatori Amazon Kinesis Data Firehose. Această soluție este disponibilă în toate regiunile AWS în care sunt disponibile Amazon Comprehend și Kinesis Data Firehose.


Despre autori

Joe Morotti este arhitect de soluții la Amazon Web Services (AWS), ajutând clienții Enterprise din Midwest SUA. El a ocupat o gamă largă de roluri tehnice și îi place să arate arta posibilului clienților. În timpul liber, îi place să petreacă timp de calitate cu familia, explorând locuri noi și supraanalizând performanța echipei sale sportive.

Sriharsh Adari este arhitect senior de soluții la Amazon Web Services (AWS), unde îi ajută pe clienți să lucreze înapoi de la rezultatele afacerii pentru a dezvolta soluții inovatoare pe AWS. De-a lungul anilor, el a ajutat mai mulți clienți cu privire la transformările platformei de date pe verticalele industriei. Domeniul său de bază de expertiză include strategia tehnologiei, analiza datelor și știința datelor. În timpul liber, îi place să joace tenis, să se uite la emisiuni TV și să joace Tabla.

spot_img

Ultimele informații

spot_img

Chat cu noi

Bună! Cu ce ​​​​vă pot ajuta?