قم بإجراء عمليات إعادة الكتابة لقاعدة البيانات الآمنة باستخدام Amazon QuickSight

قم بإجراء عمليات إعادة الكتابة لقاعدة البيانات الآمنة باستخدام Amazon QuickSight

عقدة المصدر: 2641420

أمازون QuickSight هو حل ذكاء الأعمال (BI) قابل للتطوير ، بدون خادم ، يدعم التعلم الآلي (ML) والذي يسهل الاتصال ببياناتك ، وإنشاء لوحات معلومات تفاعلية ، والوصول إلى الرؤى التي تدعم ML ، ومشاركة المرئيات ولوحات المعلومات مع عشرات الآلاف من المستخدمين الداخليين والخارجيين ، سواء ضمن برنامج QuickSight نفسه أو مضمنًا في أي تطبيق.

إعادة الكتابة هي القدرة على تحديث سوق البيانات أو مستودع البيانات أو أي خلفية أخرى لقاعدة البيانات من داخل لوحات معلومات BI وتحليل البيانات المحدثة في الوقت الفعلي تقريبًا داخل لوحة المعلومات نفسها. في هذا المنشور ، نعرض كيفية إجراء عمليات إعادة الكتابة الآمنة لقاعدة البيانات باستخدام QuickSight.

نظرة عامة على حالة الاستخدام

لتوضيح كيفية تمكين إمكانية إعادة الكتابة باستخدام QuickSight ، دعنا نفكر في شركة خيالية ، AnyCompany Inc. AnyCompany هي شركة خدمات مهنية متخصصة في توفير حلول القوى العاملة لعملائها. قررت AnyCompany أن تشغيل أحمال العمل في السحابة لدعم احتياجات الأعمال العالمية المتزايدة يعد ميزة تنافسية وتستخدم السحابة لاستضافة جميع أعباء العمل الخاصة بها. قررت AnyCompany تحسين الطريقة التي تقدم بها فروعها عروض الأسعار لعملائها. تقوم الفروع حاليًا بإنشاء عروض أسعار للعملاء يدويًا ، وكخطوة أولى في رحلة الابتكار هذه ، تتطلع AnyCompany إلى تطوير حل مؤسسي لتوليد عروض أسعار العملاء مع القدرة على تطبيق بيانات التسعير المحلية ديناميكيًا في وقت إنشاء عرض الأسعار.

AnyCompany تستخدم حاليا الأمازون الأحمر كمنصة مستودع بيانات مؤسسية و QuickSight كحل ذكاء الأعمال الخاص بهم.

يأتي بناء حل جديد مع التحديات التالية:

  • يريد AnyCompany حلاً يسهل إنشاؤه وصيانته ، ولا يرغبون في الاستثمار في إنشاء واجهة مستخدم منفصلة.
  • ترغب AnyCompany في توسيع إمكانيات لوحة معلومات QuickSight BI الحالية الخاصة بها لتمكين إنشاء عروض الأسعار وقبولها أيضًا. سيؤدي ذلك إلى تبسيط عمليات طرح الميزات لأن موظفيهم يستخدمون بالفعل لوحات معلومات QuickSight ويستمتعون بالواجهة سهلة الاستخدام التي يوفرها QuickSight.
  • ترغب AnyCompany في تخزين محفوظات تفاوض عروض الأسعار التي تتضمن عروض الأسعار المُنشأة والمراجعة والمقبولة.
  • ترغب AnyCompany في إنشاء لوحة معلومات جديدة مع بيانات سجل الاقتباس للتحليل ورؤى الأعمال.

يتطرق هذا المنشور إلى الخطوات لتمكين وظيفة إعادة الكتابة إلى Amazon Redshift من QuickSight. لاحظ أن أدوات ذكاء الأعمال التقليدية للقراءة فقط مع خيارات قليلة أو معدومة لتحديث بيانات المصدر.

حل نظرة عامة

يستخدم هذا الحل خدمات AWS التالية:

  • بوابة أمازون API - يستضيف ويؤمن واجهة برمجة تطبيقات REST لإعادة الكتابة التي سيتم استدعاؤها بواسطة QuickSight
  • AWS لامدا - يقوم بتشغيل وظيفة الحوسبة المطلوبة لإنشاء التجزئة ووظيفة ثانية لإجراء إعادة الكتابة بشكل آمن
  • أمازون QuickSight - يقدم لوحات معلومات BI وقدرات توليد الاقتباس
  • الأمازون الأحمر - عروض أسعار المتاجر وأسعارها ومجموعات البيانات الأخرى ذات الصلة
  • مدير أسرار AWS - يخزن المفاتيح ويديرها لتوقيع التجزئة (ملخص الرسالة)

على الرغم من أن هذا الحل يستخدم Amazon Redshift كمخزن للبيانات ، يمكن تنفيذ نهج مماثل مع أي قاعدة بيانات تدعم إنشاء وظائف محددة بواسطة المستخدم (UDFs) يمكنها استدعاء Lambda.

يوضح الشكل التالي سير العمل لإجراء عمليات إعادة الكتابة من QuickSight.

تتمثل الخطوة الأولى في الحل في إنشاء تجزئة أو ملخص رسالة لمجموعة السمات في Amazon Redshift عن طريق استدعاء دالة Lambda. هذه الخطوة تمنع طلب العبث. لإنشاء تجزئة ، تستدعي Amazon Redshift ملف العددية Lambda UDF. آلية التجزئة المستخدمة هنا شائعة بليك 2 الوظيفة (متوفرة في مكتبة Python حسيب). لزيادة تأمين التجزئة ، يتم استخدام التجزئة ذات المفاتيح ، والتي تعد بديلاً أسرع وأبسط لـ رمز مصادقة الرسائل المستندة إلى التجزئة (HMAC). يتم إنشاء هذا المفتاح وتخزينه بواسطة Secrets Manager ويجب أن يكون متاحًا فقط للتطبيقات المسموح بها. بعد إنشاء التجزئة الآمنة ، يتم إرجاعها إلى Amazon Redshift ودمجها في طريقة عرض Amazon Redshift.

يتم تنفيذ إعادة كتابة الاقتباس الذي تم إنشاؤه إلى Amazon Redshift بواسطة وظيفة إعادة الكتابة Lambda ، ويتم إنشاء نقطة نهاية API Gateway REST API لتأمين الطلبات وتمريرها إلى وظيفة إعادة الكتابة. تقوم وظيفة إعادة الكتابة بتنفيذ الإجراءات التالية:

  1. قم بإنشاء التجزئة بناءً على معلمات إدخال API المستلمة من QuickSight.
  2. قم بتوقيع التجزئة عن طريق تطبيق المفتاح من Secrets Manager.
  3. قارن التجزئة المُنشأة مع التجزئة المستلمة من معلمات الإدخال باستخدام طريقة Compare_digest المتاحة في ملف HMAC وحدة.
  4. عند التحقق الناجح ، اكتب السجل إلى جدول تقديم عروض الأسعار في Amazon Redshift.

يوفر القسم التالي خطوات مفصلة مع نماذج الحمولات ومقتطفات التعليمات البرمجية.

توليد التجزئة

يتم إنشاء التجزئة باستخدام Lambda UDF في Amazon Redshift. بالإضافة إلى ذلك ، يتم استخدام مفتاح Secrets Manager لتوقيع التجزئة. لإنشاء التجزئة ، أكمل الخطوات التالية:

  1. قم بإنشاء مفتاح Secrets Manager من ملف واجهة سطر الأوامر 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 لإنشاء تجزئة للتشفير:
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. حدد Amazon Redshift UDF لاستدعاء وظيفة Lambda لإنشاء تجزئة:
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. إحضار المفتاح من Secrets Manager.

يتم استخدام هذا المفتاح بواسطة وظيفة Lambda لزيادة تأمين التجزئة. يشار إلى هذا في get_secret تعمل في الخطوة 2.

قم بإعداد مجموعات بيانات Amazon Redshift في QuickSight

تستخدم لوحة معلومات إنشاء الاقتباس طريقة عرض Amazon Redshift التالية.

أنشئ طريقة عرض Amazon Redshift التي تستخدم جميع الأعمدة السابقة جنبًا إلى جنب مع عمود التجزئة:

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

ستبدو السجلات مثل لقطة الشاشة التالية.

سيتم استخدام العرض السابق كمجموعة بيانات QuickSight لإنشاء عروض الأسعار. سيتم إنشاء تحليل QuickSight باستخدام مجموعة البيانات. لتحليل الوقت الفعلي تقريبًا ، يمكنك استخدام وضع الاستعلام المباشر QuickSight.

إنشاء موارد بوابة API

يتم بدء عملية إعادة الكتابة بواسطة QuickSight باستدعاء مورد API Gateway ، والذي يستدعي وظيفة Lambda لإعادة الكتابة. كشرط أساسي لإنشاء الحقل المحسوب في QuickSight لاستدعاء واجهة برمجة تطبيقات إعادة الكتابة ، يجب عليك أولاً إنشاء هذه الموارد.

تقوم API Gateway بتأمين واستدعاء وظيفة إعادة الكتابة Lambda مع المعلمات التي تم إنشاؤها كمعلمات سلسلة استعلام URL مع قوالب التعيين. يمكن تجنب معلمات التعيين باستخدام تكامل وكيل Lambda.

قم بإنشاء مورد REST API من نوع الأسلوب GET الذي يستخدم وظائف Lambda (تم إنشاؤه في الخطوة التالية) كنوع التكامل. للحصول على تعليمات ، راجع إنشاء واجهة برمجة تطبيقات REST في Amazon API Gateway و قم بإعداد عمليات تكامل Lambda في API Gateway.

توضح لقطة الشاشة التالية تفاصيل إنشاء معلمة سلسلة الاستعلام لكل معلمة تم تمريرها إلى بوابة API.

تُظهر لقطة الشاشة التالية تفاصيل إنشاء معلمة قالب تعيين لكل معلمة تم تمريرها إلى بوابة API.

قم بإنشاء وظيفة Lambda

قم بإنشاء وظيفة Lambda جديدة لاستدعاء بوابة API. تقوم وظيفة Lambda بالخطوات التالية:

  1. تلقي المعلمات من QuickSight من خلال بوابة API وتجزئة المعلمات المتسلسلة.

يسترد مثال الكود التالي المعلمات من استدعاء API Gateway باستخدام كائن الحدث للدالة Lambda:

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

تقوم الوظيفة بتنفيذ منطق التجزئة كما هو موضح في ملف إنشاء تجزئة الخطوة السابقة باستخدام المعلمات المتسلسلة التي تم تمريرها بواسطة QuickSight.

  1. قارن الإخراج المجزأ مع معلمة التجزئة.

إذا لم تتطابق هذه ، فلن تحدث إعادة الكتابة.

  1. إذا تطابق التجزئات ، فقم بإجراء إعادة كتابة. تحقق من وجود سجل في جدول إنشاء عروض الأسعار عن طريق إنشاء استعلام من الجدول باستخدام المعلمات التي تم تمريرها من 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 واستدعاء وظيفة Lambda السابقة.

  1. أضف حقل QuickSight المحسوب باسم Generate Quote للاحتفاظ بعنوان URL المستضاف لبوابة واجهة برمجة التطبيقات والذي سيتم تشغيله لإعادة كتابة محفوظات الأسعار في 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. أضف الحقل المحسوب "إنشاء عرض الأسعار" وقم بنمطه كارتباط تشعبي.

سيؤدي اختيار هذا الرابط إلى كتابة السجل في Amazon Redshift. هذا واجب على نفس قيمة التجزئة التي يتم إرجاعها عندما تقوم وظيفة Lambda بتنفيذ التجزئة على المعلمات.

تُظهر لقطة الشاشة التالية نموذجًا مرئيًا للجدول.

اكتب إلى قاعدة بيانات Amazon Redshift

يتم جلب مفتاح Secrets Manager واستخدامه بواسطة وظيفة Lambda لإنشاء التجزئة للمقارنة. لن يتم تنفيذ إعادة الكتابة إلا إذا تطابق التجزئة مع التجزئة التي تم تمريرها في المعلمة.

سوف يقوم جدول Amazon Redshift التالي بتسجيل تاريخ الاقتباس كما تم ملؤه بواسطة وظيفة Lambda. تمثل السجلات باللون الأخضر أحدث السجلات لعرض الأسعار.

الاعتبارات والخطوات التالية

يمنع استخدام التجزئات الآمنة العبث بمعلمات الحمولة التي تظهر في نافذة المتصفح عند استدعاء عنوان URL لإعادة الكتابة. لمزيد من تأمين عنوان URL لإعادة الكتابة ، يمكنك استخدام الأساليب التالية:

  • انشر REST API في VPC خاص يمكن الوصول إليه فقط لمستخدمي QuickSight.
  • لمنع هجمات إعادة التشغيل ، يمكن إنشاء طابع زمني جنبًا إلى جنب مع وظيفة التجزئة وتمريره كمعامل إضافي في عنوان URL لإعادة الكتابة. يمكن بعد ذلك تعديل وظيفة Lambda الخلفية للسماح فقط بإعادة الكتابة ضمن حد زمني معين.
  • اتبع بوابة API وصول السيطرة و أمن أفضل الممارسات.
  • تخفيف رفض محتمل للخدمة لواجهات برمجة التطبيقات التي تواجه الجمهور.

يمكنك زيادة تحسين هذا الحل لتقديم نموذج مستند إلى الويب عند فتح عنوان URL لإعادة الكتابة. يمكن تنفيذ ذلك عن طريق إنشاء نموذج HTML ديناميكيًا في وظيفة Lambda الخلفية لدعم إدخال المعلومات الإضافية. إذا كان عبء العمل الخاص بك يتطلب عددًا كبيرًا من عمليات إعادة الكتابة التي تتطلب إنتاجية أعلى أو التزامن ، فإن متجر البيانات المصمم لهذا الغرض مثل إصدار متوافق مع Amazon Aurora PostgreSQL قد يكون خيارًا أفضل. لمزيد من المعلومات ، يرجى الرجوع إلى استدعاء وظيفة AWS Lambda من مجموعة Aurora PostgreSQL DB. يمكن بعد ذلك مزامنة هذه التحديثات في جداول Amazon Redshift باستخدام الاستفسارات الموحدة.

وفي الختام

أظهر هذا المنشور كيفية استخدام QuickSight مع Lambda و API Gateway و Secrets Manager و Amazon Redshift لالتقاط بيانات إدخال المستخدم وتحديث مستودع بيانات Amazon Redshift بشكل آمن دون مغادرة بيئة QuickSight BI الخاصة بك. يلغي هذا الحل الحاجة إلى إنشاء تطبيق خارجي أو واجهة مستخدم لتحديث قاعدة البيانات أو عمليات الإدراج ، ويقلل من تكاليف التطوير والصيانة ذات الصلة. يمكن أيضًا تأمين استدعاء API Gateway باستخدام مفتاح أو رمز مميز لضمان قبول المكالمات الصادرة من QuickSight فقط بواسطة بوابة API. سيتم تغطية هذا في الوظائف اللاحقة.


حول المؤلف

سريكانث باهتي هو مهندس حلول رئيسي متخصص عالميًا لشركة Amazon QuickSight. بدأ حياته المهنية كمستشار وعمل في العديد من المؤسسات الخاصة والحكومية. في وقت لاحق ، عمل في شركة PerkinElmer Health and Sciences & eResearch Technology Inc ، حيث كان مسؤولاً عن تصميم وتطوير تطبيقات الويب عالية الحركة ، وخطوط أنابيب البيانات القابلة للتطوير والصيانة للغاية لمنصات التقارير باستخدام خدمات AWS والحوسبة بدون خادم.

راجي سيفاسوبرامانيام هو مهندس حلول أول في AWS ، مع التركيز على التحليلات. راجي متخصص في تصميم حلول إدارة بيانات المؤسسة الشاملة وذكاء الأعمال والتحليلات لشركات Fortune 500 و Fortune 100 في جميع أنحاء العالم. لديها خبرة عميقة في بيانات وتحليلات الرعاية الصحية المتكاملة مع مجموعة واسعة من مجموعات بيانات الرعاية الصحية بما في ذلك السوق المدارة واستهداف الأطباء وتحليلات المرضى.

الطابع الزمني:

اكثر من بيانات AWS الضخمة