בצע כתיבה מאובטחת של מסדי נתונים עם Amazon QuickSight

בצע כתיבה מאובטחת של מסדי נתונים עם Amazon QuickSight

צומת המקור: 2641420

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

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

השתמש בסקירת המקרים

כדי להדגים כיצד לאפשר יכולת כתיבה חוזרת עם QuickSight, בואו ניקח בחשבון חברה בדיונית, AnyCompany Inc. AnyCompany היא חברת שירותים מקצועית המתמחה במתן פתרונות כוח אדם ללקוחותיה. AnyCompany קבעה שהפעלת עומסי עבודה בענן כדי לתמוך בצרכים העסקיים הגלובאליים הגדלים שלה היא יתרון תחרותי ומשתמשת בענן כדי לארח את כל עומסי העבודה שלה. AnyCompany החליטה לשפר את האופן שבו הסניפים שלה מספקים הצעות מחיר ללקוחותיה. נכון לעכשיו, הסניפים מייצרים הצעות מחיר ללקוחות באופן ידני, וכצעד ראשון במסע החדשנות הזה, AnyCompany מחפשת לפתח פתרון ארגוני להפקת הצעות מחיר ללקוחות עם יכולת ליישם באופן דינמי נתוני תמחור מקומיים בזמן יצירת הצעות מחיר.

AnyCompany משתמשת כעת האדום של אמזון כפלטפורמת מחסני הנתונים הארגוניים שלהם ו-QuickSight כפתרון ה-BI שלהם.

בניית פתרון חדש מלווה באתגרים הבאים:

  • AnyCompany רוצה פתרון שקל לבנות ולתחזק, והם לא רוצים להשקיע בבניית ממשק משתמש נפרד.
  • AnyCompany רוצה להרחיב את היכולות של לוח המחוונים הקיים של QuickSight BI כדי לאפשר גם יצירת הצעות מחיר וקבלת הצעות מחיר. זה יפשט את השקת התכונות מכיוון שהעובדים שלהם כבר משתמשים במרכזי המחוונים של QuickSight ונהנים מהממשק הקל לשימוש שמספק QuickSight.
  • AnyCompany רוצה לאחסן את היסטוריית המשא ומתן על הצעת המחיר הכוללת הצעות מחיר שנוצרו, נבדקו ומקובלות.
  • AnyCompany רוצה לבנות לוח מחוונים חדש עם נתוני היסטוריית ציטוטים לניתוח ותובנות עסקיות.

פוסט זה עובר על השלבים לאפשר פונקציונליות כתיבה לאחור לאמזון Redshift מ-QuickSight. שים לב שכלי ה-BI המסורתיים הם לקריאה בלבד עם אפשרויות מועטות עד ללא אפשרויות לעדכון נתוני מקור.

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

פתרון זה משתמש בשירותי AWS הבאים:

  • שער API של אמזון - מארח ומאבטח את ה-writeback REST API שיופעל על ידי QuickSight
  • AWS למבדה – מפעיל את פונקציית המחשוב הנדרשת ליצירת ה-hash ופונקציה שנייה לביצוע מאובטח את הכתיבה בחזרה
  • אמזון קוויקסייט - מציע לוחות מחוונים של BI ויכולות יצירת הצעות מחיר
  • האדום של אמזון - מאחסן הצעות מחיר, מחירים ומערכי נתונים רלוונטיים אחרים
  • מנהל סודות AWS - מאחסן ומנהל מפתחות לחתימה על hashes (תקציר הודעות)

למרות שפתרון זה משתמש ב-Amazon Redshift כמאגר הנתונים, ניתן ליישם גישה דומה עם כל מסד נתונים שתומך ביצירת פונקציות מוגדרות על ידי משתמש (UDF) שיכולות להפעיל את Lambda.

האיור הבא מציג את זרימת העבודה לביצוע החזרות מ-QuickSight.

השלב הראשון בפתרון הוא יצירת hash או תקציר הודעות של קבוצת התכונות באמזון Redshift על ידי הפעלת פונקציית Lambda. שלב זה מונע שיבוש בבקשות. כדי ליצור Hash, אמזון Redshift מפעיל את a Scalar Lambda UDF. מנגנון הגיבוב המשמש כאן הוא הפופולרי BLAKE 2 פונקציה (זמינה בספריית Python האשליב). כדי לאבטח עוד יותר את ה-hash, נעשה שימוש ב-keyed hashing, המהווה אלטרנטיבה מהירה ופשוטה יותר קוד אימות הודעות מבוסס hash (HMAC). מפתח זה נוצר ומאוחסן על ידי Secrets Manager ואמור להיות נגיש רק ליישומים מורשים. לאחר יצירת ה-hash המאובטח, הוא מוחזר ל-Amazon Redshift ומשולב בתצוגת אמזון Redshift.

כתיבת הציטוט שנוצר בחזרה לאמזון Redshift מבוצעת על ידי פונקציית ה-writeback Lambda, ונקודת קצה API Gateway REST API נוצרת כדי לאבטח ולהעביר בקשות לפונקציית הכתיבה בחזרה. פונקציית הכתיבה חזרה מבצעת את הפעולות הבאות:

  1. צור את ה-hash על סמך פרמטרי הקלט של ה-API שהתקבלו מ-QuickSight.
  2. חתום על הגיבוב על ידי החלת המפתח ממנהל הסודות.
  3. השווה את ה-hash שנוצר עם ה-hash שהתקבל מפרמטרי הקלט באמצעות שיטת compare_digest הזמינה ב- HMAC מודול.
  4. לאחר אימות מוצלח, כתוב את הרשומה לטבלת הגשת הצעות המחיר באמזון Redshift.

הסעיף הבא מספק שלבים מפורטים עם מטענים לדוגמה וקטעי קוד.

צור את ה-hash

ה-hash נוצר באמצעות Lambda UDF באמזון Redshift. בנוסף, מפתח מנהל סודות משמש לחתימה על ה-hash. כדי ליצור את ה-hash, בצע את השלבים הבאים:

  1. צור את מפתח מנהל הסודות מה- ממשק שורת הפקודה של AWS (AWS CLI):
aws secretsmanager create-secret --name “name_of_secret” --description "Secret key to sign hash" --secret-string '{" name_of_key ":"value"}' --region us-east-1

  1. צור Lambda UDF כדי ליצור hash להצפנה:
import boto3 import base64
import json
from hashlib import blake2b
from botocore.exceptions import ClientError def get_secret(): #This key is used by the Lambda function to further secure the hash. secret_name = "<name_of_secret>" region_name = "<aws_region_name>" # Create a Secrets Manager client session = boto3.session.Session() client = session.client(service_name='secretsmanager', region_name=<aws_region_name> ) # In this sample we only handle the specific exceptions for the 'GetSecretValue' API. # See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html # We rethrow the exception by default. try: get_secret_value_response = client.get_secret_value(SecretId=secret_name) except Exception as e: raise e if "SecretString" in get_secret_value_response: access_token = get_secret_value_response["SecretString"] else: access_token = get_secret_value_response["SecretBinary"] return json.loads(access_token)[<token key name>] SECRET_KEY = get_secret()
AUTH_SIZE = 16 def sign(payload): h = blake2b(digest_size=AUTH_SIZE, key=SECRET_KEY) h.update(payload) return h.hexdigest().encode('utf-8') def lambda_handler(event, context):
ret = dict() try: res = [] for argument in event['arguments']: try: msg = json.dumps(argument) signed_key = sign(str.encode(msg)) res.append(signed_key.decode('utf-8')) except: res.append(None) ret['success'] = True ret['results'] = res except Exception as e: ret['success'] = False ret['error_msg'] = str(e) return json.dumps(ret)

  1. הגדר UDF של אמזון לאדום כדי לקרוא לפונקציית Lambda כדי ליצור hash:
CREATE OR REPLACE EXTERNAL FUNCTION udf_get_digest (par1 varchar)
RETURNS varchar STABLE
LAMBDA 'redshift_get_digest'
IAM_ROLE 'arn:aws:iam::<AWSACCOUNTID>role/service-role/<role_name>';

השמיים AWS זהות וניהול גישה לתפקיד (IAM) בשלב הקודם יש לצרף את המדיניות הבאה כדי להיות מסוגל להפעיל את פונקציית Lambda:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:<AWSACCOUNTID>1:function:redshift_get_digest" }
}

  1. קח את המפתח ממנהל הסודות.

מפתח זה משמש את פונקציית Lambda כדי לאבטח עוד יותר את ה-hash. זה מצוין ב- לקבל_סוד פונקציה בשלב 2.

הגדר מערכי נתונים של Amazon Redshift ב-QuickSight

לוח המחוונים ליצירת הצעות מחיר משתמש בתצוגת ההיסט האדום של אמזון.

צור תצוגת אמזון לאדום המשתמשת בכל העמודות הקודמות יחד עם עמודת ה-hash:

create view quote_gen_vw as select *, udf_get_digest ( customername || BGCheckRequired || Skill|| Shift ||State ||Cost ) from billing_input_tbl

הרשומות ייראו כמו צילום המסך הבא.

התצוגה הקודמת תשמש כמערך הנתונים של QuickSight ליצירת ציטוטים. ניתוח QuickSight ייווצר באמצעות מערך הנתונים. לניתוח כמעט בזמן אמת, אתה יכול להשתמש במצב שאילתה ישירה של QuickSight.

צור משאבי API Gateway

פעולת הכתיבה חוזרת יזומה על ידי QuickSight שמפעילה משאב API Gateway, אשר מפעיל את פונקציית הכתיבה חזרה של Lambda. כתנאי מוקדם ליצירת השדה המחושב ב-QuickSight כדי לקרוא ל-writeback API, תחילה עליך ליצור משאבים אלה.

API Gateway מאבטח ומפעיל את פונקציית ה-writeback Lambda עם הפרמטרים שנוצרו כפרמטרים של מחרוזת שאילתת URL עם תבניות מיפוי. ניתן להימנע מפרמטרי המיפוי על ידי שימוש באינטגרציה של ה-Proxy Lambda.

צור משאב REST API מסוג GET שמשתמש בפונקציות Lambda (שנוצרו בשלב הבא) כסוג האינטגרציה. להנחיות, עיין ב יצירת ממשק API של REST ב-Amazon API Gateway ו הגדר שילובי Lambda ב-API Gateway.

צילום המסך הבא מציג את הפרטים ליצירת פרמטר מחרוזת שאילתה עבור כל פרמטר המועבר ל-API Gateway.

צילום המסך הבא מציג את הפרטים ליצירת פרמטר תבנית מיפוי עבור כל פרמטר המועבר ל-API Gateway.

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

צור פונקציית Lambda חדשה עבור שער ה-API להפעיל. פונקציית Lambda מבצעת את השלבים הבאים:

  1. קבל פרמטרים מ-QuickSight דרך API Gateway ו-hash את הפרמטרים המשורשרים.

דוגמת הקוד הבאה מאחזרת פרמטרים מהקריאה ל-API Gateway באמצעות אובייקט האירוע של הפונקציה Lambda:

 customer= event['customer’]) bgc = event['bgc']

הפונקציה מבצעת את לוגיקת הגיבוב כפי שמוצג ב- ליצור hash צעד מוקדם יותר באמצעות הפרמטרים המשורשרים שהועבר על ידי QuickSight.

  1. השווה את הפלט הגיבוב עם פרמטר הגיבוב.

אם אלה לא תואמים, הכתיבה חזרה לא תתרחש.

  1. אם ה-hashs תואמים, בצע כתיבה חזרה. בדוק אם יש רשומה בטבלת יצירת הציטוטים על ידי הפקת שאילתה מהטבלה באמצעות הפרמטרים שהועברו מ-QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. השלם את הפעולה הבאה בהתבסס על תוצאות השאילתה:
    1. אם לא קיימת רשומה עבור השילוב הקודם, צור והפעל שאילתת הוספה באמצעות כל הפרמטרים עם הסטטוס כפי שנוצר.
    2. אם קיימת רשומה עבור השילוב הקודם, צור והפעל שאילתת הוספה עם הסטטוס כמו בבדיקה. נעשה שימוש חוזר ב-quote_Id עבור השילוב הקיים.

צור ויז'ואל של QuickSight

שלב זה כולל יצירת ויז'ואל טבלה המשתמש בשדה מחושב כדי להעביר פרמטרים ל-API Gateway ולהפעיל את פונקציית Lambda הקודמת.

  1. הוסף שדה מחושב של QuickSight בשם Generate Quote כדי להחזיק את כתובת האתר המתארחת ב-API Gateway שתופעל לכתוב בחזרה את היסטוריית הציטוטים לתוך Amazon Redshift:
concat("https://xxxxx.execute-api.us-east-1.amazonaws.com/stage_name/apiresourcename/?cust=",customername,"&bgc=",bgcheckrequired,"&billrate=",toString(billrate),"&skilledtrades=",skilledtrades,"&shift=",shift,"&jobdutydescription=",jobdutydescription,"&hash=",hashvalue)

  1. צור ויז'ואל טבלה של QuickSight.
  2. הוסף שדות נדרשים כגון לקוח, מיומנות ועלות.
  3. הוסף את השדה Generate Quote מחושב ועצב אותו כהיפר-קישור.

בחירה בקישור הזה תכתוב את הרשומה לאמזון Redshift. זה מוטל על אותו ערך גיבוב שחוזר כאשר פונקציית Lambda מבצעת את ה-hash על הפרמטרים.

צילום המסך הבא מציג דוגמה חזותית של טבלה.

כתוב למסד הנתונים של Amazon Redshift

מפתח מנהל הסודות מובא ומשמש את פונקציית Lambda כדי ליצור את ה-hash להשוואה. הכתיבה חזרה תתבצע רק אם ה-hash תואם ל-hash שעבר בפרמטר.

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

שיקולים והצעדים הבאים

שימוש ב-hashs מאובטח מונע פגיעה בפרמטרי עומס הנראים בחלון הדפדפן כאשר כתובת האתר לכתיבה חוזרת מופעלת. כדי לאבטח עוד יותר את כתובת האתר לכתיבה חוזרת, תוכל להשתמש בטכניקות הבאות:

  • פרוס את REST API ב-VPC פרטי שנגיש רק למשתמשי QuickSight.
  • כדי למנוע התקפות שידור חוזר, ניתן ליצור חותמת זמן לצד פונקציית הגיבוב ולהעביר כפרמטר נוסף בכתובת ה-writing-back. לאחר מכן ניתן לשנות את פונקציית ה-backend Lambda כך שתאפשר רק כתיבה לאחור בתוך סף מסוים מבוסס זמן.
  • עקוב אחר ה-API Gateway בקרת גישה ו אבטחה שיטות עבודה מומלצות.
  • להקל מניעת שירות פוטנציאלית עבור ממשקי API הפונים לציבור.

אתה יכול לשפר עוד יותר את הפתרון הזה כדי להציג טופס מבוסס אינטרנט כאשר כתובת ה-URL לכתובת חזרה נפתחת. ניתן ליישם זאת על ידי יצירה דינמית של טופס HTML בפונקציית Lambda העורפית כדי לתמוך בהזנת מידע נוסף. אם עומס העבודה שלך דורש מספר גבוה של כתיבה חוזרת הדורשת תפוקה גבוהה יותר או במקביל, מאגר נתונים נבנה למטרות כמו מהדורה תואמת אמזון אורורה PostgreSQL יכול להיות בחירה טובה יותר. למידע נוסף, עיין ב הפעלת פונקציית AWS Lambda מאשכול Aurora PostgreSQL DB. לאחר מכן ניתן לסנכרן עדכונים אלה לטבלאות אמזון Redshift באמצעות שאילתות מאוחדות.

סיכום

פוסט זה הראה כיצד להשתמש ב-QuickSight יחד עם Lambda, API Gateway, Secrets Manager ו-Amazon Redshift כדי ללכוד נתוני קלט של משתמשים ולעדכן בצורה מאובטחת את מחסן הנתונים של Amazon Redshift מבלי לעזוב את סביבת QuickSight BI שלך. פתרון זה מבטל את הצורך ביצירת אפליקציה חיצונית או ממשק משתמש עבור פעולות עדכון או הוספת מסד נתונים, ומפחית את תקורה של פיתוח ותחזוקה קשורים. ניתן לאבטח את קריאת ה-API Gateway באמצעות מפתח או אסימון כדי להבטיח שרק שיחות שמקורן ב-QuickSight יתקבלו ב-API Gateway. זה יטופל בפוסטים הבאים.


על הכותבים

סריקנת' בהטי הוא ארכיטקט פתרונות עיקריים מתמחה בעולם עבור Amazon QuickSight. הוא החל את דרכו כיועץ ועבד עבור מספר ארגונים פרטיים וממשלתיים. מאוחר יותר הוא עבד עבור PerkinElmer Health and Sciences & eResearch Technology Inc, שם היה אחראי על עיצוב ופיתוח יישומי אינטרנט עם תעבורה גבוהה, צינורות נתונים ניתנים להרחבה וניתנים לתחזוקה עבור פלטפורמות דיווח המשתמשות בשירותי AWS ומחשוב ללא שרתים.

Raji Sivasubramaniam הוא Sr. Solutions Architect ב-AWS, המתמקד באנליטיקס. Raji מתמחה בארכיטקטורה של פתרונות ניהול נתונים ארגוניים, בינה עסקית ואנליטיקה מקצה לקצה עבור חברות Fortune 500 ו-Fortune 100 ברחבי העולם. יש לה ניסיון מעמיק בנתוני בריאות משולבים וניתוחים עם מגוון רחב של מערכי נתונים רפואיים כולל שוק מנוהל, מיקוד לרופאים וניתוח מטופלים.

בול זמן:

עוד מ AWS Big Data