לוגו זפירנט

צור נתונים רגישים מזרימת נתונים כמעט בזמן אמת באמצעות Amazon Comprehend ו- Amazon Kinesis Data Firehose

תאריך:

אספקת נתונים ותובנות כמעט בזמן אמת מאפשרים לעסקים להגיב במהירות לצרכי הלקוחות שלהם. נתונים בזמן אמת יכולים להגיע ממגוון מקורות, כולל מדיה חברתית, מכשירי IoT, ניטור תשתיות, ניטור מוקד טלפוני ועוד. בשל הרוחב והעומק של הנתונים הנקלטים ממקורות רבים, עסקים מחפשים פתרונות להגנה על פרטיות הלקוחות שלהם ולמנוע גישה לנתונים רגישים ממערכות קצה. בעבר היית צריך להסתמך על מנועי חוקים לזיהוי אישי (PII) שיכולים לסמן תוצאות חיוביות שגויות או להחמיץ נתונים, או שהיית צריך לבנות ולתחזק מודלים מותאמים אישית של למידת מכונה (ML) כדי לזהות PII בנתוני הסטרימינג שלך. אתה גם צריך ליישם ולתחזק את התשתית הדרושה כדי לתמוך במנועים או בדגמים אלה.

כדי לעזור לייעל תהליך זה ולהפחית עלויות, אתה יכול להשתמש אמזון להתבונן, שירות עיבוד שפה טבעית (NLP) המשתמש ב-ML כדי למצוא תובנות וקשרים כמו אנשים, מקומות, סנטימנטים ונושאים בטקסט לא מובנה. כעת אתה יכול להשתמש ביכולות Amazon Comprehend ML כדי לזהות ולבטל PII בהודעות דוא"ל של לקוחות, כרטיסי תמיכה, ביקורות מוצרים, מדיה חברתית ועוד. אין צורך בניסיון ב-ML. לדוגמה, אתה יכול לנתח כרטיסי תמיכה ומאמרי ידע כדי לזהות ישויות PII ולערוך את הטקסט לפני שאתה מוסיף את המסמכים לאינדקס. לאחר מכן, המסמכים נקיים מישויות PII ומשתמשים יכולים לצרוך את הנתונים. עיבוד ישויות PII עוזר לך להגן על פרטיות הלקוח שלך ולציית לחוקים ולתקנות המקומיים.

בפוסט זה, אתה לומד כיצד ליישם את Amazon Comprehend בארכיטקטורות הסטרימינג שלך כדי לבטל ישויות PII בזמן כמעט אמת באמצעות צינור אש נתונים של אמזון קינסי עם AWS למבדה.

פוסט זה מתמקד בעיבוד נתונים משדות נבחרים המוכנסים לארכיטקטורת סטרימינג באמצעות Kinesis Data Firehose, שם ברצונך ליצור, לאחסן ולתחזק עותקים נגזרים נוספים של הנתונים לצריכה על ידי משתמשי קצה או יישומים במורד הזרם. אם אתה משתמש זרמי נתונים של אמזון קינסי או שיש לך מקרי שימוש נוספים מחוץ לעיבוד PII, עיין ב תרגם, ערוך ונתח נתונים זורמים באמצעות פונקציות SQL עם Amazon Kinesis Data Analytics, Amazon Translate ו-Amazon Comprehend, שבו אנו מראים כיצד אתה יכול להשתמש Amazon Kinesis Data Analytics Studio מופעל על ידי אפאצ'י זפלין ו אפצ'י פלינק לנתח, לתרגם ולערוך באופן אינטראקטיבי שדות טקסט בזרימת נתונים.

סקירת פתרונות

האיור הבא מציג ארכיטקטורה לדוגמה לביצוע עריכת PII של נתונים זורמים בזמן אמת, באמצעות שירות אחסון פשוט של אמזון (אמזון S3), שינוי נתונים של Kinesis Data Firehose, אמזון להתבונן, ו AWS למבדה. בנוסף, אנו משתמשים ב- AWS SDK עבור Python (Boto3) עבור פונקציות למבדה. כפי שצוין בתרשים, דלי S3 הגולמי מכיל נתונים שאינם מודחים, והדלי S3 המודפס מכיל נתונים ערוכים לאחר שימוש ב- Amazon Comprehend DetectPiiEntities API בתוך פונקציית Lambda.

עלויות הכרוכות בכך

בנוסף לעלויות Kinesis Data Firehose, Amazon S3 ולמבדה, פתרון זה יגרום בעלויות שימוש מאמזון Comprehend. הסכום שאתה משלם הוא פקטור של המספר הכולל של רשומות המכילות PII והתווים המעובדים על ידי פונקציית Lambda. למידע נוסף, עיין ב תמחור Amazon Kinesis Data Firehose, אמזון להבין מחירים, ו תמחור AWS Lambda.

כדוגמה, נניח שיש לך 10,000 רשומות יומנים, וערך המפתח שממנו אתה רוצה לבטל PII הוא 500 תווים. מתוך 10,000 רשומות היומן, 50 מזוהות כמכילות PII. פרטי העלות הם כדלקמן:

מכיל עלות PII:

  • גודל של כל ערך מפתח = 500 תווים (יחידה אחת = 1 תווים)
  • מספר יחידות (100 תווים) לרשומה (מינימום הוא 3 יחידות) = 5
  • סך היחידות = 10,000 (רשומות) x 5 (יחידות לרשומה) x 1 (בקשות הבנת אמזון לכל רשומה) = 50,000
  • מחיר ליחידה = $ 0.000002
    • עלות כוללת לזיהוי רשומות יומן עם PII באמצעות ContainsPiiEntities API = $0.1 [50,000 יחידות x $0.000002] 

עריכת עלות PII:

  • סה"כ יחידות המכילות PII = 50 (רשומות) x 5 (יחידות לרשומה) x 1 (בקשות Amazon Comprehend לרשומה) = 250
  • מחיר ליחידה = $ 0.0001
    • עלות כוללת לזיהוי מיקום של PII באמצעות DetectPiiEntities API = [מספר יחידות] x [עלות ליחידה] = 250 x $0.0001 = $0.025

עלות כוללת עבור זיהוי ועיבוד:

  • עלות כוללת: $0.1 (אימות אם השדה מכיל PII) + $0.025 (עריכת שדות המכילים PII) = $0.125

פרוס את הפתרון באמצעות AWS CloudFormation

עבור פוסט זה, אנו מספקים AWS CloudFormation עריכת נתונים זורם תבנית, המספק את הפרטים המלאים של היישום כדי לאפשר פריסות הניתנות לחזרה. עם הפריסה, תבנית זו יוצרת שני דליים של S3: אחד לאחסון נתוני הדגימה הגולמיים שנקלטו מ-Amazon Kinesis Data Generator (KDG), ואחד לאחסון הנתונים שנעשו. בנוסף, זה יוצר זרם משלוח Kinesis Data Firehose עם DirectPUT כקלט, ופונקציית Lambda שקוראת ל- Amazon Comprehend מכילPiiEntities ו DetectPiiEntities API לזיהוי ולתיקון נתוני PII. הפונקציה Lambda מסתמכת על קלט המשתמש במשתני הסביבה כדי לקבוע אילו ערכי מפתח יש לבדוק עבור PII.

לפונקציית Lambda בפתרון זה יש גדלי עומס מוגבלים ל-100 KB. אם מסופק מטען שבו הטקסט גדול מ-100 KB, פונקציית Lambda תדלג עליו.

כדי לפרוס את הפתרון, בצע את השלבים הבאים:

  1. הפעל את ערימת CloudFormation במזרח ארה"ב (מדינת וירג'יניה) us-east-1:
  2. הזן שם מחסנית, והשאר פרמטרים אחרים כברירת מחדל
  3. בחר אני מאשר ש- AWS CloudFormation עשוי ליצור משאבי IAM עם שמות מותאמים אישית.
  4. לבחור צור ערימה.

פרוס משאבים באופן ידני

אם אתה מעדיף לבנות את הארכיטקטורה באופן ידני במקום להשתמש ב-AWS CloudFormation, השלם את השלבים בסעיף זה.

צור את הדליים של S3

צור את דלי ה-S3 שלך עם השלבים הבאים:

  1. במסוף S3 של אמזון בחר דליים בחלונית הניווט.
  2. לבחור צור דלי.
  3. צור דלי אחד לנתונים הגולמיים שלך ואחד לנתונים שנמחקו.
  4. שימו לב לשמות הדליים שיצרתם זה עתה.

צור את פונקציית Lambda

כדי ליצור ולפרוס את פונקציית Lambda, בצע את השלבים הבאים:

  1. במסוף למבה, בחרו צור פונקציה.
  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. שנה את הערך של פסק זמן עד דקה אחת.
  18. לבחור שמור.
  19. נווט אל הרשאות.
  20. בחר את שם התפקיד מתחת תפקיד ביצוע.
    אתה מופנה מחדש אל AWS זהות וניהול גישה קונסולת (IAM).
  21. בעד הוסף הרשאות, בחר צרף מדיניות.
  22. זן Comprehend לתוך סרגל החיפוש ובחר את המדיניות ComprehendFullAccess.
  23. לבחור צרף מדיניות.

צור את זרם המסירה של Firehose

כדי ליצור את זרם המסירה של Firehose שלך, בצע את השלבים הבאים:

  1. במסוף Kinesis Data Firehose, בחר צור זרם מסירה.
  2. בעד מָקוֹר, בחר PUT ישיר.
  3. בעד יַעַד, בחר אמזון S3.
  4. בעד שם זרם המשלוח, להיכנס ComprehendRealTimeBlog.
  5. תַחַת שנה רשומות מקור עם AWS Lambda, בחר מופעל.
  6. בעד פונקצית AWS Lambda, הזן את ה-ARN עבור הפונקציה שיצרת, או דפדף אל הפונקציה AmazonComprehendPII-Redact.
  7. בעד גודל המאגר, הגדר את הערך ל-1 MB.
  8. בעד מרווח מאגר, השאר את זה כ-60 שניות.
  9. תַחַת הגדרות יעד, בחר את דלי ה-S3 שיצרת עבור הנתונים שנעשו.
  10. תַחַת הגדרות גיבוי, בחר את דלי S3 שיצרת עבור הרשומות הגולמיות.
  11. תַחַת רשות, צור או עדכן תפקיד IAM, או בחר תפקיד קיים עם ההרשאות המתאימות.
  12. לבחור צור זרם מסירה.

פרוס את פתרון הנתונים הזרמת עם מחולל הנתונים של Kinesis

אתה יכול להשתמש ב-Kinesis Data Generator (KDG) כדי להטמיע נתונים לדוגמה ל-Kinesis Data Firehose ולבדוק את הפתרון. כדי לפשט תהליך זה, אנו מספקים פונקציית Lambda ותבנית CloudFormation ליצירת אמזון קוגניטו משתמש ולהקצות הרשאות מתאימות לשימוש ב-KDG.

  1. על עמוד מחולל הנתונים של אמזון Kinesis, בחר צור משתמש קוגניטו עם CloudFormation.אתה מופנה למסוף AWS CloudFormation כדי ליצור את המחסנית שלך.
  2. ספק שם משתמש וסיסמה עבור המשתמש שאיתו אתה נכנס ל-KDG.
  3. השאר את ההגדרות האחרות בברירות המחדל שלהן וצור את הערימה שלך.
  4. על יציאות בכרטיסייה, בחר בקישור ממשק המשתמש של KDG.
  5. הזן את שם המשתמש והסיסמה שלך כדי להיכנס.

שלח רשומות בדיקה ואמת עריכה באמזון S3

כדי לבדוק את הפתרון, בצע את השלבים הבאים:

  1. היכנס לכתובת ה-KDG שיצרת בשלב הקודם.
  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 stream, קבוצת היומן עבור ComprehendRealTimeBlog זרם, וכל תפקידי IAM שנוצרו.

סיכום

פוסט זה הראה לך כיצד לשלב עריכת PII בארכיטקטורת הסטרימינג שלך כמעט בזמן אמת ולהפחית את זמן עיבוד הנתונים על ידי ביצוע עריכה בטיסה. בתרחיש זה, אתה מספק את הנתונים שנכתבו למשתמשי הקצה שלך ומנהל אגם נתונים מאבטח את הדלי הגולמי לשימוש מאוחר יותר. אתה יכול גם לבנות עיבוד נוסף עם Amazon Comprehend כדי לזהות טון או סנטימנט, לזהות ישויות בתוך הנתונים ולסווג כל הודעה.

סיפקנו שלבים בודדים עבור כל שירות כחלק מפוסט זה, וכן כללנו תבנית CloudFormation המאפשרת לך לספק את המשאבים הנדרשים בחשבונך. יש להשתמש בתבנית זו להוכחת הרעיון או תרחישי בדיקה בלבד. עיין במדריכי המפתחים עבור אמזון להתבונן, למבדה, ו Kinesis Data Firehose לכל מגבלות שירות.

כדי להתחיל עם זיהוי PII ועיבוד, ראה מידע אישי מזהה (PII). עם הארכיטקטורה לדוגמה בפוסט זה, תוכל לשלב כל אחד מממשקי ה-API של Amazon Comprehend עם נתונים כמעט בזמן אמת באמצעות טרנספורמציה של נתונים של Kinesis Data Firehose. למידע נוסף על מה שאתה יכול לבנות עם הנתונים שלך כמעט בזמן אמת עם Kinesis Data Firehose, עיין ב- Amazon Kinesis Data Firehose מדריך למפתחים. פתרון זה זמין בכל אזורי AWS שבהם זמינים Amazon Comprehend ו-Kinesis Data Firehose.


על המחברים

ג'ו מורוטי הוא ארכיטקט פתרונות בשירותי האינטרנט של אמזון (AWS), המסייע ללקוחות ארגוניים ברחבי המערב התיכון של ארה"ב. הוא מילא מגוון רחב של תפקידים טכניים ונהנה להראות את אמנות האפשריות של הלקוח. בזמנו הפנוי, הוא נהנה לבלות עם משפחתו זמן איכות בחקר מקומות חדשים וניתוח יתר של ביצועי קבוצת הספורט שלו

סריהרש אדרי הוא ארכיטקט פתרונות בכיר בחברת Amazon Web Services (AWS), שם הוא עוזר ללקוחות לעבוד לאחור מהתוצאות העסקיות כדי לפתח פתרונות חדשניים ב-AWS. במהלך השנים, הוא עזר ללקוחות רבים בטרנספורמציות של פלטפורמת נתונים על פני ענפי התעשייה. תחום הליבה שלו כולל אסטרטגיה טכנולוגית, ניתוח נתונים ומדעי נתונים. בזמנו הפנוי הוא נהנה לשחק טניס, לצפות בתוכניות טלוויזיה ולשחק בטאבלה.

ספוט_ימג

המודיעין האחרון

ספוט_ימג

דבר איתנו

שלום שם! איך אני יכול לעזור לך?