Thực hiện thao tác ghi lại cơ sở dữ liệu an toàn với Amazon QuickSight

Thực hiện thao tác ghi lại cơ sở dữ liệu an toàn với Amazon QuickSight

Nút nguồn: 2641420

Amazon QuickSight là một giải pháp kinh doanh thông minh (BI) dựa trên máy học (ML), có thể mở rộng, không có máy chủ, giúp dễ dàng kết nối với dữ liệu của bạn, tạo bảng điều khiển tương tác, truy cập vào thông tin chuyên sâu hỗ trợ ML và chia sẻ hình ảnh cũng như bảng điều khiển với hàng chục nghìn của người dùng nội bộ và bên ngoài, trong chính QuickSight hoặc được nhúng vào bất kỳ ứng dụng nào.

Ghi lại là khả năng cập nhật siêu thị dữ liệu, kho dữ liệu hoặc bất kỳ chương trình phụ trợ cơ sở dữ liệu nào khác từ trong bảng điều khiển BI và phân tích dữ liệu được cập nhật trong thời gian gần như thực trong chính bảng điều khiển. Trong bài đăng này, chúng tôi trình bày cách thực hiện ghi lại cơ sở dữ liệu an toàn với QuickSight.

Tổng quan về ca sử dụng

Để minh họa cách bật khả năng ghi lại bằng QuickSight, chúng ta hãy xem xét một công ty hư cấu, AnyCompany Inc. AnyCompany là một công ty dịch vụ chuyên nghiệp chuyên cung cấp các giải pháp lực lượng lao động cho khách hàng của họ. AnyCompany xác định rằng việc chạy khối lượng công việc trên đám mây để hỗ trợ nhu cầu kinh doanh toàn cầu ngày càng tăng của mình là một lợi thế cạnh tranh và sử dụng đám mây để lưu trữ tất cả khối lượng công việc của mình. AnyCompany đã quyết định nâng cao cách các chi nhánh cung cấp báo giá cho khách hàng của mình. Hiện tại, các chi nhánh tạo báo giá khách hàng theo cách thủ công và là bước đầu tiên trong hành trình đổi mới này, AnyCompany đang tìm cách phát triển một giải pháp doanh nghiệp để tạo báo giá khách hàng với khả năng áp dụng động dữ liệu định giá địa phương tại thời điểm tạo báo giá.

AnyCompany hiện đang sử dụng Amazon RedShift làm nền tảng kho dữ liệu doanh nghiệp và QuickSight làm giải pháp BI.

Xây dựng một giải pháp mới đi kèm với những thách thức sau:

  • AnyCompany muốn một giải pháp dễ xây dựng và bảo trì, đồng thời họ không muốn đầu tư xây dựng giao diện người dùng riêng biệt.
  • AnyCompany muốn mở rộng khả năng của bảng điều khiển QuickSight BI hiện tại của họ để cũng cho phép tạo báo giá và chấp nhận báo giá. Điều này sẽ đơn giản hóa việc giới thiệu tính năng vì nhân viên của họ đã sử dụng bảng điều khiển QuickSight và tận hưởng giao diện dễ sử dụng mà QuickSight cung cấp.
  • AnyCompany muốn lưu trữ lịch sử thương lượng báo giá bao gồm các báo giá được tạo, xem xét và chấp nhận.
  • AnyCompany muốn xây dựng một bảng điều khiển mới với dữ liệu lịch sử báo giá để phân tích và hiểu biết sâu sắc về doanh nghiệp.

Bài đăng này trình bày các bước để kích hoạt chức năng ghi lại vào Amazon Redshift từ QuickSight. Lưu ý rằng các công cụ BI truyền thống là chỉ đọc với rất ít hoặc không có tùy chọn để cập nhật dữ liệu nguồn.

Tổng quan về giải pháp

Giải pháp này sử dụng các dịch vụ AWS sau:

  • Cổng API Amazon – Lưu trữ và bảo mật API REST ghi lại sẽ được QuickSight gọi ra
  • AWS Lambda – Chạy chức năng tính toán cần thiết để tạo hàm băm và chức năng thứ hai để thực hiện ghi lại một cách an toàn
  • Amazon QuickSight – Cung cấp bảng điều khiển BI và khả năng tạo báo giá
  • Amazon RedShift – Lưu trữ báo giá, giá cả và các tập dữ liệu liên quan khác
  • Quản lý bí mật AWS – Lưu trữ và quản lý các khóa để ký mã băm (thông báo tóm tắt)

Mặc dù giải pháp này sử dụng Amazon Redshift làm kho lưu trữ dữ liệu, nhưng cách tiếp cận tương tự có thể được triển khai với bất kỳ cơ sở dữ liệu nào hỗ trợ tạo các hàm do người dùng xác định (UDF) có thể gọi Lambda.

Hình dưới đây cho thấy quy trình làm việc để thực hiện thao tác ghi lại từ QuickSight.

Bước đầu tiên trong giải pháp là tạo hàm băm hoặc thông báo tóm tắt của tập hợp các thuộc tính trong Amazon Redshift bằng cách gọi hàm Lambda. Bước này ngăn chặn giả mạo yêu cầu. Để tạo một hàm băm, Amazon Redshift gọi một Lambda UDF vô hướng. Cơ chế băm được sử dụng ở đây là cơ chế phổ biến BẠCH2 chức năng (có sẵn trong thư viện Python băm). Để bảo mật hơn nữa hàm băm, hàm băm có khóa được sử dụng, đây là cách thay thế nhanh hơn và đơn giản hơn cho mã xác thực tin nhắn dựa trên băm (HMAC). Khóa này do Trình quản lý bí mật tạo và lưu trữ và chỉ những ứng dụng được phép mới có thể truy cập được. Sau khi hàm băm bảo mật được tạo, hàm này sẽ được trả lại cho Amazon Redshift và được kết hợp trong chế độ xem Amazon Redshift.

Việc ghi báo giá đã tạo trở lại Amazon Redshift được thực hiện bởi hàm Lambda ghi lại và một điểm cuối API REST của API Gateway được tạo để bảo mật và chuyển các yêu cầu tới chức năng ghi lại. Chức năng ghi lại thực hiện các hành động sau:

  1. Tạo hàm băm dựa trên các tham số đầu vào API nhận được từ QuickSight.
  2. Ký mã băm bằng cách áp dụng khóa từ Trình quản lý bí mật.
  3. So sánh hàm băm được tạo với hàm băm nhận được từ các tham số đầu vào bằng phương thức so sánh_digest có sẵn trong HMAC mô-đun.
  4. Sau khi xác thực thành công, hãy ghi bản ghi vào bảng gửi báo giá trong Amazon Redshift.

Phần sau đây cung cấp các bước chi tiết với tải trọng mẫu và đoạn mã.

Tạo hàm băm

Hàm băm được tạo bằng Lambda UDF trong Amazon Redshift. Ngoài ra, khóa Trình quản lý bí mật được sử dụng để ký mã băm. Để tạo hàm băm, hãy hoàn thành các bước sau:

  1. Tạo khóa Trình quản lý bí mật từ Giao diện dòng lệnh 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. Tạo UDF Lambda để tạo hàm băm cho mã hóa:
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. Xác định Amazon Redshift UDF để gọi hàm Lambda nhằm tạo hàm băm:
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>';

Sản phẩm Quản lý truy cập và nhận dạng AWS (IAM) trong bước trước phải có chính sách sau được đính kèm để có thể gọi hàm 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. Lấy chìa khóa từ Secrets Manager.

Khóa này được hàm Lambda sử dụng để tăng cường bảo mật cho hàm băm. Điều này được chỉ ra trong get_bí mật chức năng ở Bước 2.

Thiết lập bộ dữ liệu Amazon Redshift trong QuickSight

Bảng điều khiển tạo báo giá sử dụng chế độ xem Amazon Redshift sau đây.

Tạo chế độ xem Amazon Redshift sử dụng tất cả các cột trước đó cùng với cột hàm băm:

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

Các bản ghi sẽ trông giống như ảnh chụp màn hình sau đây.

Chế độ xem trước đó sẽ được sử dụng làm tập dữ liệu QuickSight để tạo báo giá. Một phân tích QuickSight sẽ được tạo bằng bộ dữ liệu. Để phân tích gần thời gian thực, bạn có thể sử dụng chế độ truy vấn trực tiếp QuickSight.

Tạo tài nguyên Cổng API

Thao tác ghi lại được bắt đầu bằng cách QuickSight gọi tài nguyên Cổng API, tài nguyên này sẽ gọi hàm ghi lại Lambda. Là điều kiện tiên quyết để tạo trường được tính toán trong QuickSight để gọi API ghi lại, trước tiên bạn phải tạo các tài nguyên này.

Cổng API bảo mật và gọi hàm Lambda ghi lại với các tham số được tạo dưới dạng tham số chuỗi truy vấn URL với các mẫu ánh xạ. Có thể tránh các tham số ánh xạ bằng cách sử dụng tích hợp proxy Lambda.

Tạo tài nguyên API REST thuộc loại phương thức GET sử dụng các hàm Lambda (được tạo trong bước tiếp theo) làm loại tích hợp. Để biết hướng dẫn, hãy tham khảo Tạo API REST trong Amazon API GatewayThiết lập tích hợp Lambda trong API Gateway.

Ảnh chụp màn hình sau đây hiển thị chi tiết cách tạo tham số chuỗi truy vấn cho từng tham số được chuyển đến Cổng API.

Ảnh chụp màn hình sau đây hiển thị chi tiết cách tạo tham số mẫu ánh xạ cho từng tham số được chuyển đến Cổng API.

Tạo hàm Lambda

Tạo một hàm Lambda mới để gọi Cổng API. Hàm Lambda thực hiện các bước sau:

  1. Nhận thông số từ QuickSight thông qua API Gateway và băm các thông số được nối.

Ví dụ mã sau truy xuất các tham số từ lệnh gọi Cổng API bằng cách sử dụng đối tượng sự kiện của hàm Lambda:

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

Hàm thực hiện logic băm như được hiển thị trong tạo hàm băm bước trước đó bằng cách sử dụng các tham số được nối bởi QuickSight.

  1. So sánh kết quả băm với tham số băm.

Nếu những điều này không khớp, việc ghi lại sẽ không xảy ra.

  1. Nếu giá trị băm khớp, hãy thực hiện ghi lại. Kiểm tra sự hiện diện của bản ghi trong bảng tạo báo giá bằng cách tạo truy vấn từ bảng bằng cách sử dụng các tham số được chuyển từ QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Hoàn thành hành động sau dựa trên kết quả của truy vấn:
    1. Nếu không có bản ghi nào cho tổ hợp trước đó, hãy tạo và chạy truy vấn chèn bằng cách sử dụng tất cả các tham số có trạng thái như đã tạo.
    2. Nếu bản ghi tồn tại cho sự kết hợp trước đó, hãy tạo và chạy truy vấn chèn với trạng thái như đang xem xét. quote_Id cho kết hợp hiện tại sẽ được sử dụng lại.

Tạo hình ảnh QuickSight

Bước này liên quan đến việc tạo hình ảnh bảng sử dụng trường được tính toán để truyền tham số tới API Gateway và gọi hàm Lambda trước đó.

  1. Thêm trường được tính toán QuickSight có tên Tạo báo giá để giữ URL được lưu trữ trên Cổng API sẽ được kích hoạt để ghi lại lịch sử báo giá vào 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. Tạo hình ảnh bảng QuickSight.
  2. Thêm các trường bắt buộc như Khách hàng, Kỹ năng và Chi phí.
  3. Thêm trường tính toán Tạo báo giá và tạo kiểu cho trường này dưới dạng siêu liên kết.

Việc chọn liên kết này sẽ ghi bản ghi vào Amazon Redshift. Điều này là đương nhiên trên cùng một giá trị băm trả về khi hàm Lambda thực hiện hàm băm trên các tham số.

Ảnh chụp màn hình sau đây hiển thị hình ảnh bảng mẫu.

Ghi vào cơ sở dữ liệu Amazon Redshift

Khóa Trình quản lý bí mật được hàm Lambda tìm nạp và sử dụng để tạo hàm băm nhằm so sánh. Việc ghi lại sẽ chỉ được thực hiện nếu hàm băm khớp với hàm băm được truyền trong tham số.

Bảng Amazon Redshift sau đây sẽ ghi lại lịch sử báo giá do hàm Lambda điền. Các bản ghi màu xanh lá cây đại diện cho các bản ghi gần đây nhất cho báo giá.

Cân nhắc và các bước tiếp theo

Việc sử dụng hàm băm an toàn sẽ ngăn chặn việc giả mạo các tham số tải trọng hiển thị trong cửa sổ trình duyệt khi URL ghi lại được gọi. Để bảo mật hơn nữa URL ghi lại, bạn có thể sử dụng các kỹ thuật sau:

  • Triển khai API REST trong một VPC riêng mà chỉ người dùng QuickSight mới có thể truy cập được.
  • Để ngăn chặn các cuộc tấn công lặp lại, dấu thời gian có thể được tạo cùng với hàm băm và được chuyển dưới dạng tham số bổ sung trong URL ghi lại. Sau đó, hàm Lambda phụ trợ có thể được sửa đổi để chỉ cho phép ghi lại trong một ngưỡng dựa trên thời gian nhất định.
  • Theo dõi Cổng API kiểm soát truy cậpan ninh thực hành tốt nhất.
  • Giảm nhẹ khả năng từ chối dịch vụ đối với các API công khai.

Bạn có thể nâng cao hơn nữa giải pháp này để hiển thị biểu mẫu dựa trên web khi URL ghi lại được mở. Điều này có thể được triển khai bằng cách tự động tạo biểu mẫu HTML trong hàm Lambda phụ trợ để hỗ trợ nhập thông tin bổ sung. Nếu khối lượng công việc của bạn yêu cầu nhiều lần ghi lại yêu cầu thông lượng hoặc tính đồng thời cao hơn, thì một kho lưu trữ dữ liệu được xây dựng có mục đích như Phiên bản tương thích với Amazon Aurora PostgreSQL có thể là một sự lựa chọn tốt hơn. Để biết thêm thông tin, hãy tham khảo Gọi hàm AWS Lambda từ cụm Cơ sở dữ liệu Aurora PostgreSQL. Sau đó, các bản cập nhật này có thể được đồng bộ hóa vào các bảng Amazon Redshift bằng cách sử dụng truy vấn liên hợp.

Kết luận

Bài đăng này hướng dẫn cách sử dụng QuickSight cùng với Lambda, API Gateway, Secrets Manager và Amazon Redshift để thu thập dữ liệu đầu vào của người dùng và cập nhật an toàn kho dữ liệu Amazon Redshift của bạn mà không cần rời khỏi môi trường QuickSight BI. Giải pháp này loại bỏ nhu cầu tạo một ứng dụng bên ngoài hoặc giao diện người dùng cho các thao tác chèn hoặc cập nhật cơ sở dữ liệu, đồng thời giảm chi phí phát triển và bảo trì liên quan. Lệnh gọi Cổng API cũng có thể được bảo mật bằng khóa hoặc mã thông báo để đảm bảo chỉ các lệnh gọi bắt nguồn từ QuickSight mới được Cổng API chấp nhận. Điều này sẽ được đề cập trong các bài viết tiếp theo.


Về các tác giả

Srikanth Baheti là Kiến trúc sư giải pháp chính trên toàn thế giới chuyên biệt cho Amazon QuickSight. Ông bắt đầu sự nghiệp của mình với tư cách là một nhà tư vấn và làm việc cho nhiều tổ chức tư nhân và chính phủ. Sau đó, anh ấy làm việc cho PerkinElmer Health and Science & eResearch Technology Inc, nơi anh ấy chịu trách nhiệm thiết kế và phát triển các ứng dụng web có lưu lượng truy cập cao, các đường dẫn dữ liệu có khả năng mở rộng và bảo trì cao dành cho các nền tảng báo cáo sử dụng dịch vụ AWS và điện toán Serverless.

Raji Sivasubramaniam là một Kiến trúc sư Giải pháp Sơ cấp tại AWS, tập trung vào Phân tích. Raji chuyên về kiến ​​trúc các giải pháp Quản lý Dữ liệu Doanh nghiệp, Trí tuệ Doanh nghiệp và Phân tích đầu cuối cho các công ty Fortune 500 và Fortune 100 trên toàn cầu. Cô có kinh nghiệm chuyên sâu về phân tích và dữ liệu chăm sóc sức khỏe tích hợp với nhiều bộ dữ liệu chăm sóc sức khỏe bao gồm thị trường được quản lý, nhắm mục tiêu bác sĩ và phân tích bệnh nhân.

Dấu thời gian:

Thêm từ Dữ liệu lớn AWS