با آمازون QuickSight، بازنویسی امن پایگاه داده را انجام دهید

با آمازون QuickSight، بازنویسی امن پایگاه داده را انجام دهید

گره منبع: 2641420

آمازون QuickSight یک راه حل مقیاس پذیر، بدون سرور، مبتنی بر هوش تجاری (BI) مبتنی بر یادگیری ماشینی (ML) است که اتصال به داده های شما، ایجاد داشبوردهای تعاملی، دسترسی به اطلاعات بینش فعال ML و اشتراک گذاری تصاویر و داشبورد با ده ها هزار را آسان می کند. از کاربران داخلی و خارجی، چه در خود QuickSight یا در هر برنامه ای تعبیه شده است.

نوشتن بازگشت توانایی به روز رسانی یک داده مارتی، انبار داده یا هر پایگاه داده دیگر از داشبوردهای BI و تجزیه و تحلیل داده های به روز شده در زمان واقعی در خود داشبورد است. در این پست، نحوه انجام بازنویسی امن پایگاه داده با QuickSight را نشان می دهیم.

از نمای کلی مورد استفاده کنید

برای نشان دادن نحوه فعال کردن قابلیت بازنویسی با QuickSight، اجازه دهید یک شرکت خیالی، AnyCompany Inc. را در نظر بگیریم. AnyCompany یک شرکت خدمات حرفه ای است که در ارائه راه حل های نیروی کار به مشتریان خود متخصص است. AnyCompany تشخیص داد که اجرای بارهای کاری در فضای ابری برای حمایت از نیازهای رو به رشد تجارت جهانی خود یک مزیت رقابتی است و از ابر برای میزبانی همه بارهای کاری خود استفاده می کند. AnyCompany تصمیم گرفت تا روشی را که شعبه‌هایش به مشتریان خود ارائه می‌دهند، افزایش دهد. در حال حاضر، شعب به صورت دستی مظنه مشتری را تولید می کنند و به عنوان اولین گام در این سفر نوآوری، AnyCompany به دنبال توسعه یک راه حل سازمانی برای تولید مظنه مشتری با قابلیت اعمال پویا داده های قیمت گذاری محلی در زمان تولید مظنه است.

AnyCompany در حال حاضر استفاده می کند آمازون Redshift به عنوان پلتفرم انبار داده سازمانی آنها و QuickSight به عنوان راه حل BI آنها.

ایجاد یک راه حل جدید با چالش های زیر همراه است:

  • AnyCompany راه‌حلی می‌خواهد که ساخت و نگهداری آن آسان باشد، و آنها نمی‌خواهند روی ساخت یک رابط کاربری جداگانه سرمایه‌گذاری کنند.
  • AnyCompany می‌خواهد قابلیت‌های داشبورد QuickSight BI موجود خود را گسترش دهد تا تولید مظنه و پذیرش مظنه را نیز فعال کند. این امر عرضه ویژگی ها را ساده می کند زیرا کارمندان آنها از داشبوردهای QuickSight استفاده می کنند و از رابط کاربری آسانی که QuickSight ارائه می دهد لذت می برند.
  • AnyCompany می خواهد تاریخچه مذاکره نقل قول را که شامل مظنه های تولید شده، بررسی شده و پذیرفته شده است ذخیره کند.
  • AnyCompany می خواهد یک داشبورد جدید با داده های تاریخچه نقل قول برای تجزیه و تحلیل و بینش تجاری بسازد.

این پست مراحل فعال کردن قابلیت نوشتن بازگشت به Amazon Redshift از QuickSight را طی می کند. توجه داشته باشید که ابزارهای سنتی BI فقط خواندنی هستند و گزینه‌های کمی برای به‌روزرسانی داده‌های منبع ندارند.

بررسی اجمالی راه حل

این راه حل از خدمات AWS زیر استفاده می کند:

  • دروازه API آمازون – میزبانی و ایمن‌سازی REST API بازگشتی که توسط QuickSight فراخوانی می‌شود
  • AWS لامبدا - تابع محاسباتی مورد نیاز برای تولید هش و تابع دوم را برای انجام ایمن نوشتن بازگشت اجرا می کند
  • آمازون QuickSight - داشبوردهای BI و قابلیت های تولید نقل قول را ارائه می دهد
  • آمازون Redshift - قیمت ها، قیمت ها و سایر مجموعه داده های مربوطه را ذخیره می کند
  • مدیر اسرار AWS - ذخیره و مدیریت کلیدها برای امضای هش (خلاصه پیام)

اگرچه این راه حل از Amazon Redshift به عنوان ذخیره داده استفاده می کند، رویکرد مشابهی را می توان با هر پایگاه داده ای که از ایجاد توابع تعریف شده توسط کاربر (UDF) پشتیبانی می کند که می تواند Lambda را فراخوانی کند، پیاده سازی کرد.

شکل زیر گردش کار برای انجام بازنویسی از QuickSight را نشان می دهد.

اولین گام در راه حل این است که با فراخوانی یک تابع Lambda، یک هش یا خلاصه پیام مجموعه ای از ویژگی ها در آمازون Redshift ایجاد کنید. این مرحله از دستکاری درخواست جلوگیری می کند. برای تولید هش، Amazon Redshift a را فراخوانی می کند اسکالار لامبدا UDF. مکانیزم هش مورد استفاده در اینجا محبوب است بلک 2 تابع (در کتابخانه پایتون موجود است هشلب). برای ایمن سازی بیشتر هش از هش کلیدی استفاده می شود که جایگزین سریعتر و ساده تری برای آن است کد احراز هویت پیام مبتنی بر هش (HMAC). این کلید توسط Secrets Manager تولید و ذخیره می شود و باید فقط برای برنامه های مجاز قابل دسترسی باشد. پس از ایجاد هش امن، به آمازون Redshift برگردانده می شود و در نمای Amazon Redshift ترکیب می شود.

نوشتن نقل قول تولید شده به آمازون Redshift توسط تابع نوشتن بازگشتی Lambda انجام می‌شود و یک نقطه پایانی API Gateway REST API برای ایمن‌سازی و ارسال درخواست‌ها به تابع نوشتن بازگشت ایجاد می‌شود. تابع Writ-back اقدامات زیر را انجام می دهد:

  1. هش را بر اساس پارامترهای ورودی API دریافت شده از QuickSight ایجاد کنید.
  2. با استفاده از کلید Secrets Manager، هش را امضا کنید.
  3. هش تولید شده را با هش دریافتی از پارامترهای ورودی با استفاده از روش compare_digest موجود در HMAC ماژول
  4. پس از تایید موفقیت آمیز، رکورد را در جدول ارسال مظنه در Amazon Redshift بنویسید.

بخش زیر مراحل دقیق با بارهای نمونه و قطعه کد را ارائه می دهد.

هش را تولید کنید

هش با استفاده از UDF لامبدا در آمازون 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. یک آمازون 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>';

La هویت 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 برای ایمن سازی بیشتر هش استفاده می شود. این در نشان داده شده است 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 Gateway را ایجاد کنید

عملیات نوشتن بازگشت توسط QuickSight با فراخوانی یک منبع API Gateway آغاز می شود که تابع نوشتن لامبدا را فراخوانی می کند. به عنوان پیش نیاز برای ایجاد فیلد محاسبه شده در QuickSight برای فراخوانی API نوشتن بازگشت، ابتدا باید این منابع را ایجاد کنید.

API Gateway تابع نوشتن لامبدا را با پارامترهای ایجاد شده به عنوان پارامترهای رشته جستجوی URL با الگوهای نگاشت ایمن و فراخوانی می کند. با استفاده از ادغام پراکسی Lambda می توان از پارامترهای نگاشت اجتناب کرد.

یک منبع REST API از نوع متد GET ایجاد کنید که از توابع Lambda (ایجاد شده در مرحله بعد) به عنوان نوع ادغام استفاده می کند. برای دستورالعمل، مراجعه کنید ایجاد یک REST API در Amazon API Gateway و ادغام های Lambda را در API Gateway راه اندازی کنید.

تصویر زیر جزئیات ایجاد یک پارامتر رشته کوئری را برای هر پارامتر ارسال شده به API Gateway نشان می دهد.

اسکرین شات زیر جزئیات ایجاد یک پارامتر الگوی نقشه برداری را برای هر پارامتری که به API Gateway ارسال می شود نشان می دهد.

تابع Lambda را ایجاد کنید

برای فراخوانی API Gateway یک تابع Lambda جدید ایجاد کنید. تابع Lambda مراحل زیر را انجام می دهد:

  1. پارامترها را از QuickSight از طریق API Gateway دریافت کنید و پارامترهای الحاقی را هش کنید.

مثال کد زیر پارامترها را از فراخوانی API Gateway با استفاده از شی رویداد تابع Lambda بازیابی می کند:

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

تابع منطق هش را همانطور که در نشان داده شده است انجام می دهد هش ایجاد کنید با استفاده از پارامترهای الحاقی که توسط QuickSight ارسال شده است، قدم زودتر بردارید.

  1. خروجی هش شده را با پارامتر هش مقایسه کنید.

اگر اینها مطابقت نداشته باشند، بازنویسی انجام نخواهد شد.

  1. اگر هش ها با هم مطابقت دارند، یک Writ-back انجام دهید. وجود یک رکورد را در جدول تولید نقل قول با ایجاد یک پرس و جو از جدول با استفاده از پارامترهای ارسال شده از 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 اضافه کنید تا URL میزبانی شده 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 را اضافه کنید و به آن به‌عنوان یک ابرپیوند استایل دهید.

با انتخاب این پیوند، رکورد در Amazon Redshift ثبت می شود. زمانی که تابع لامبدا هش را روی پارامترها انجام می‌دهد، بر همان مقدار هش واجب است.

تصویر زیر نمونه تصویری جدول را نشان می دهد.

در پایگاه داده Redshift آمازون بنویسید

کلید Secrets Manager واکشی شده و توسط تابع Lambda برای تولید هش برای مقایسه استفاده می شود. بازنویسی فقط در صورتی انجام می شود که هش با هش ارسال شده در پارامتر مطابقت داشته باشد.

جدول زیر آمازون Redshift تاریخچه نقل قول را با تابع Lambda نشان می دهد. رکوردها به رنگ سبز نشان دهنده جدیدترین رکوردها برای نقل قول هستند.

ملاحظات و مراحل بعدی

استفاده از هش های ایمن از دستکاری پارامترهای باری که در پنجره مرورگر هنگام فراخوانی URL بازگشتی قابل مشاهده هستند، جلوگیری می کند. برای ایمن سازی بیشتر URL بازگشتی، می توانید از تکنیک های زیر استفاده کنید:

  • REST API را در یک VPC خصوصی که فقط برای کاربران QuickSight قابل دسترسی است، مستقر کنید.
  • برای جلوگیری از حملات بازپخش، می‌توان یک برچسب زمانی در کنار تابع هش ایجاد کرد و به عنوان یک پارامتر اضافی در URL بازگشتی ارسال کرد. سپس تابع لامبدا باطن را می‌توان تغییر داد تا فقط در آستانه‌ای مبتنی بر زمان معینی، امکان بازنویسی را فراهم کند.
  • دروازه API را دنبال کنید کنترل دسترسی و تیم امنیت لاتاری بهترین شیوه ها
  • کاهش امکان انکار سرویس برای APIهای عمومی.

شما می توانید این راه حل را برای ارائه یک فرم مبتنی بر وب هنگامی که URL بازگشتی باز می شود، تقویت کنید. این را می توان با ایجاد پویا یک فرم HTML در تابع لامبدا برای پشتیبانی از ورودی اطلاعات اضافی پیاده سازی کرد. اگر حجم کاری شما به تعداد بالایی از بازنویسی‌ها نیاز دارد که به توان عملیاتی یا همزمانی بالاتری نیاز دارد، یک ذخیره‌سازی داده‌های هدفمند مانند Amazon Aurora PostgreSQL-Compatible Edition شاید انتخاب بهتری باشد برای اطلاعات بیشتر مراجعه کنید فراخوانی یک تابع AWS Lambda از یک خوشه Aurora PostgreSQL DB. سپس می‌توان این به‌روزرسانی‌ها را با استفاده از جداول Redshift Amazon همگام‌سازی کرد پرس و جوهای فدرال.

نتیجه

این پست نحوه استفاده از 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 و محاسبات بدون سرور بود.

راجی سیواسوبرامانیام یک معمار Sr. Solutions در AWS است که بر تجزیه و تحلیل تمرکز دارد. راجی در زمینه معماری یکپارچه مدیریت داده های سازمانی، هوش تجاری و راه حل های تجزیه و تحلیل برای شرکت های Fortune 500 و Fortune 100 در سراسر جهان تخصص دارد. او تجربه عمیقی در داده‌های یکپارچه مراقبت‌های بهداشتی و تجزیه و تحلیل با طیف گسترده‌ای از مجموعه داده‌های مراقبت‌های بهداشتی از جمله بازار مدیریت‌شده، هدف‌گیری پزشک و تجزیه و تحلیل بیمار دارد.

تمبر زمان:

بیشتر از داده های بزرگ AWS