Dokonuj bezpiecznych zapisów zwrotnych bazy danych za pomocą Amazon QuickSight

Dokonuj bezpiecznych zapisów zwrotnych bazy danych za pomocą Amazon QuickSight

Węzeł źródłowy: 2089698

Amazon QuickSight to skalowalne, bezserwerowe, oparte na uczeniu maszynowym (ML) rozwiązanie do analizy biznesowej (BI), które ułatwia łączenie się z danymi, tworzenie interaktywnych pulpitów nawigacyjnych, uzyskiwanie dostępu do spostrzeżeń z obsługą uczenia maszynowego oraz udostępnianie wizualizacji i pulpitów nawigacyjnych dziesiątkom tysięcy użytkowników wewnętrznych i zewnętrznych, zarówno w samym programie QuickSight, jak i osadzonym w dowolnej aplikacji.

Zapis zwrotny to możliwość aktualizacji hurtowni danych, hurtowni danych lub dowolnego innego zaplecza bazy danych z poziomu pulpitów nawigacyjnych BI i analizowania zaktualizowanych danych w czasie zbliżonym do rzeczywistego na samym pulpicie nawigacyjnym. W tym poście pokazujemy, jak wykonać bezpieczne zapisywanie wsteczne bazy danych za pomocą QuickSight.

Omówienie przypadków użycia

Aby zademonstrować, jak włączyć funkcję zapisu zwrotnego za pomocą programu QuickSight, rozważmy fikcyjną firmę AnyCompany Inc. AnyCompany to profesjonalna firma usługowa, która specjalizuje się w dostarczaniu swoim klientom rozwiązań dotyczących siły roboczej. Firma AnyCompany ustaliła, że ​​uruchamianie obciążeń w chmurze w celu obsługi rosnących globalnych potrzeb biznesowych stanowi przewagę konkurencyjną i wykorzystuje chmurę do obsługi wszystkich swoich obciążeń. Firma AnyCompany postanowiła udoskonalić sposób, w jaki jej oddziały dostarczają klientom wyceny. Obecnie oddziały generują oferty dla klientów ręcznie, a jako pierwszy krok w tej innowacyjnej podróży AnyCompany chce opracować rozwiązanie dla przedsiębiorstw do generowania ofert dla klientów z możliwością dynamicznego stosowania lokalnych danych cenowych w momencie generowania wyceny.

AnyCompany obecnie używa Amazonka Przesunięcie ku czerwieni jako platformę hurtowni danych przedsiębiorstwa i QuickSight jako rozwiązanie BI.

Tworzenie nowego rozwiązania wiąże się z następującymi wyzwaniami:

  • AnyCompany chce rozwiązania, które jest łatwe w budowie i utrzymaniu, i nie chce inwestować w budowanie oddzielnego interfejsu użytkownika.
  • AnyCompany chce rozszerzyć możliwości swojego istniejącego pulpitu nawigacyjnego QuickSight BI, aby umożliwić również generowanie i akceptację ofert. Uprości to wdrażanie funkcji, ponieważ ich pracownicy już korzystają z pulpitów nawigacyjnych QuickSight i cieszą się łatwym w użyciu interfejsem, który zapewnia QuickSight.
  • AnyCompany chce przechowywać historię negocjacji ofert, która obejmuje wygenerowane, sprawdzone i zaakceptowane oferty.
  • AnyCompany chce zbudować nowy pulpit nawigacyjny z danymi historii wycen do analizy i wglądu biznesowego.

Ten post zawiera kroki umożliwiające włączenie funkcji zapisu zwrotnego do Amazon Redshift z QuickSight. Należy pamiętać, że tradycyjne narzędzia BI są dostępne tylko do odczytu i mają niewiele opcji aktualizacji danych źródłowych lub nie mają ich wcale.

Omówienie rozwiązania

To rozwiązanie korzysta z następujących usług AWS:

  • Brama Amazon API – Hostuje i zabezpiecza API REST zapisu zwrotnego, które będzie wywoływane przez QuickSight
  • AWS Lambda – Uruchamia funkcję obliczeniową wymaganą do wygenerowania skrótu oraz drugą funkcję do bezpiecznego wykonania zapisu zwrotnego
  • Amazon QuickSight – Oferuje pulpity nawigacyjne BI i możliwości generowania ofert
  • Amazonka Przesunięcie ku czerwieni – Przechowuje oferty, ceny i inne odpowiednie zestawy danych
  • Menedżer tajemnic AWS – Przechowuje i zarządza kluczami do podpisywania skrótów (skrót wiadomości)

Chociaż to rozwiązanie wykorzystuje Amazon Redshift jako magazyn danych, podobne podejście można zaimplementować z dowolną bazą danych, która obsługuje tworzenie funkcji zdefiniowanych przez użytkownika (UDF), które mogą wywoływać Lambda.

Poniższy rysunek przedstawia przepływ pracy do wykonywania zapisów zwrotnych z QuickSight.

Pierwszym krokiem w rozwiązaniu jest wygenerowanie skrótu lub skrótu wiadomości zestawu atrybutów w Amazon Redshift poprzez wywołanie funkcji Lambda. Ten krok zapobiega manipulowaniu żądaniami. Aby wygenerować skrót, Amazon Redshift wywołuje a skalarna Lambda UDF. Zastosowany tutaj mechanizm mieszania jest popularny BLAKE2 funkcja (dostępna w bibliotece Pythona haszysz). Aby dodatkowo zabezpieczyć hash, stosuje się haszowanie z kluczem, które jest szybszą i prostszą alternatywą oparty na hashach kod uwierzytelniania wiadomości (HMAC). Ten klucz jest generowany i przechowywany przez Secrets Manager i powinien być dostępny tylko dla dozwolonych aplikacji. Po wygenerowaniu bezpiecznego skrótu jest on zwracany do Amazon Redshift i łączony w widoku Amazon Redshift.

Zapisanie wygenerowanej wyceny z powrotem do Amazon Redshift jest wykonywane przez funkcję Lambda zapisu wstecznego, a punkt końcowy API REST API Gateway jest tworzony w celu zabezpieczenia i przekazywania żądań do funkcji zapisu zwrotnego. Funkcja zapisu zwrotnego wykonuje następujące akcje:

  1. Wygeneruj hash na podstawie parametrów wejściowych API otrzymanych od QuickSight.
  2. Podpisz skrót, stosując klucz z Secrets Manager.
  3. Porównaj wygenerowany hash z hashem otrzymanym z parametrów wejściowych za pomocą metody Compare_digest dostępnej w HMAC moduł.
  4. Po pomyślnym zatwierdzeniu zapisz rekord w tabeli składania ofert w Amazon Redshift.

W poniższej sekcji przedstawiono szczegółowe kroki z przykładowymi ładunkami i fragmentami kodu.

Wygeneruj hash

Hash jest generowany przy użyciu Lambda UDF w Amazon Redshift. Dodatkowo do podpisywania skrótu używany jest klucz Secrets Manager. Aby utworzyć skrót, wykonaj następujące kroki:

  1. Utwórz klucz Secrets Manager z pliku Interfejs wiersza poleceń AWS (CLI AWS):
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. Utwórz Lambda UDF, aby wygenerować skrót do szyfrowania:
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. Zdefiniuj Amazon Redshift UDF, aby wywołać funkcję Lambda w celu utworzenia skrótu:
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>';

Połączenia AWS Zarządzanie tożsamością i dostępem (IAM) w poprzednim kroku powinna mieć dołączoną następującą politykę, aby móc wywołać funkcję 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. Pobierz klucz z Secrets Manager.

Ten klucz jest używany przez funkcję Lambda do dalszego zabezpieczenia skrótu. Jest to wskazane w pobierz_sekret funkcja w kroku 2.

Skonfiguruj zestawy danych Amazon Redshift w QuickSight

Pulpit nawigacyjny generowania ofert używa następującego widoku Amazon Redshift.

Utwórz widok Amazon Redshift, który wykorzystuje wszystkie poprzednie kolumny wraz z kolumną mieszającą:

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

Rekordy będą wyglądać jak na poniższym zrzucie ekranu.

Poprzedni widok zostanie użyty jako zestaw danych QuickSight do generowania ofert. Analiza QuickSight zostanie utworzona przy użyciu zestawu danych. Do analizy w czasie zbliżonym do rzeczywistego można użyć trybu zapytań bezpośrednich QuickSight.

Utwórz zasoby API Gateway

Operacja zapisu zwrotnego jest inicjowana przez QuickSight wywołujący zasób API Gateway, który wywołuje funkcję zapisu zwrotnego Lambda. Warunkiem wstępnym utworzenia pola obliczeniowego w programie QuickSight w celu wywołania interfejsu API zapisu zwrotnego jest uprzednie utworzenie tych zasobów.

API Gateway zabezpiecza i wywołuje funkcję Lambda zapisu zwrotnego z parametrami utworzonymi jako parametry ciągu zapytania URL z szablonami mapowania. Parametrów mapowania można uniknąć, korzystając z integracji proxy Lambda.

Utwórz zasób REST API typu metoda GET, który używa funkcji Lambda (utworzonych w następnym kroku) jako typu integracji. Aby uzyskać instrukcje, patrz Tworzenie REST API w Amazon API Gateway i Skonfiguruj integracje Lambda w API Gateway.

Poniższy zrzut ekranu przedstawia szczegóły dotyczące tworzenia parametru ciągu zapytania dla każdego parametru przekazanego do API Gateway.

Poniższy zrzut ekranu przedstawia szczegóły tworzenia parametru szablonu mapowania dla każdego parametru przekazanego do API Gateway.

Utwórz funkcję Lambda

Utwórz nową funkcję Lambda do wywołania przez API Gateway. Funkcja Lambda wykonuje następujące kroki:

  1. Odbieraj parametry z QuickSight przez API Gateway i mieszaj połączone parametry.

Poniższy przykładowy kod pobiera parametry z wywołania API Gateway przy użyciu obiektu zdarzenia funkcji Lambda:

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

Funkcja wykonuje logikę mieszania, jak pokazano na stworzyć hash krok wcześniej, używając połączonych parametrów przekazanych przez QuickSight.

  1. Porównaj zahaszowane dane wyjściowe z parametrem hash.

Jeśli te nie pasują, zapis zwrotny nie nastąpi.

  1. Jeśli skróty są zgodne, wykonaj zapis zwrotny. Sprawdź obecność rekordu w tabeli generowania ofert, generując zapytanie z tabeli przy użyciu parametrów przekazanych z QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Wykonaj następujące działanie na podstawie wyników zapytania:
    1. Jeśli dla powyższej kombinacji nie istnieje żaden rekord, wygeneruj i uruchom zapytanie wstawiające, używając wszystkich parametrów ze stanem wygenerowanym.
    2. Jeśli dla powyższej kombinacji istnieje rekord, wygeneruj i uruchom zapytanie wstawiające ze stanem przeglądania. Quote_Id dla istniejącej kombinacji zostanie ponownie użyty.

Utwórz wizualizację QuickSight

Ten krok obejmuje utworzenie wizualizacji tabeli, która używa pola obliczeniowego do przekazywania parametrów do bramy interfejsu API i wywoływania poprzedniej funkcji Lambda.

  1. Dodaj pole obliczeniowe QuickSight o nazwie Generuj wycenę, aby przechowywać hostowany adres URL API Gateway, który zostanie uruchomiony w celu zapisania historii wyceny do 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. Utwórz wizualizację tabeli QuickSight.
  2. Dodaj wymagane pola, takie jak Klient, Umiejętności i Koszt.
  3. Dodaj obliczone pole Wygeneruj wycenę i nadaj temu styl hiperłącza.

Wybranie tego linku spowoduje zapisanie rekordu w Amazon Redshift. Ma to zastosowanie do tej samej wartości skrótu, która powraca, gdy funkcja Lambda wykonuje skrót dla parametrów.

Poniższy zrzut ekranu przedstawia przykładową wizualizację tabeli.

Napisz do bazy danych Amazon Redshift

Klucz Secrets Manager jest pobierany i używany przez funkcję Lambda do generowania skrótu do porównania. Zapis zwrotny zostanie wykonany tylko wtedy, gdy hash jest zgodny z hashem przekazanym w parametrze.

Poniższa tabela przesunięcia ku czerwieni Amazon przechwyci historię cytatów wypełnioną funkcją Lambda. Rekordy w kolorze zielonym reprezentują najnowsze rekordy dla oferty.

Rozważania i dalsze kroki

Korzystanie z bezpiecznych skrótów zapobiega manipulowaniu parametrami ładunku, które są widoczne w oknie przeglądarki po wywołaniu adresu URL zapisu zwrotnego. Aby dodatkowo zabezpieczyć zwrotny adres URL, możesz zastosować następujące techniki:

  • Wdróż interfejs API REST w prywatnym VPC, który jest dostępny tylko dla użytkowników QuickSight.
  • Aby zapobiec atakom powtórkowym, oprócz funkcji haszującej można wygenerować znacznik czasu i przekazać jako dodatkowy parametr w adresie URL zapisu zwrotnego. Funkcję Lambda zaplecza można następnie zmodyfikować, aby zezwalała na zapis wsteczny tylko w ramach określonego progu czasowego.
  • Postępuj zgodnie z API Gateway kontroli dostępu i bezpieczeństwo najlepsze praktyki.
  • Złagodzić potencjalna odmowa usługi dla publicznych interfejsów API.

Możesz dodatkowo udoskonalić to rozwiązanie, aby renderować formularz internetowy po otwarciu adresu URL zapisu zwrotnego. Można to zaimplementować poprzez dynamiczne generowanie formularza HTML w funkcji Lambda zaplecza w celu obsługi wprowadzania dodatkowych informacji. Jeśli Twoje obciążenie wymaga dużej liczby zapisów wstecznych, które wymagają większej przepustowości lub współbieżności, specjalnie zbudowany magazyn danych, taki jak Wersja zgodna z Amazon Aurora PostgreSQL może być lepszym wyborem. Aby uzyskać więcej informacji, patrz Wywoływanie funkcji AWS Lambda z klastra Aurora PostgreSQL DB. Te aktualizacje można następnie zsynchronizować z tabelami Amazon Redshift za pomocą zapytania sfederowane.

Wnioski

Ten post pokazał, jak używać QuickSight wraz z Lambda, API Gateway, Secrets Manager i Amazon Redshift do przechwytywania danych wejściowych użytkownika i bezpiecznej aktualizacji hurtowni danych Amazon Redshift bez opuszczania środowiska QuickSight BI. To rozwiązanie eliminuje potrzebę tworzenia zewnętrznej aplikacji lub interfejsu użytkownika do aktualizacji bazy danych lub operacji wstawiania, a także zmniejsza związane z tym koszty związane z rozwojem i konserwacją. Wywołanie API Gateway można również zabezpieczyć za pomocą klucza lub tokena, aby mieć pewność, że tylko wywołania pochodzące z QuickSight będą akceptowane przez API Gateway. Zostanie to omówione w kolejnych postach.


O autorach

Srikanth Baheti jest Specjalistycznym Światowym Głównym Architektem Rozwiązań dla Amazon QuickSight. Karierę rozpoczął jako konsultant i pracował dla wielu organizacji prywatnych i rządowych. Później pracował dla PerkinElmer Health and Sciences & eResearch Technology Inc, gdzie był odpowiedzialny za projektowanie i rozwijanie aplikacji internetowych o dużym natężeniu ruchu, wysoce skalowalnych i łatwych w utrzymaniu potoków danych dla platform raportowania korzystających z usług AWS i przetwarzania bezserwerowego.

Raji Sivasubramaniam jest starszym architektem rozwiązań w AWS, koncentrując się na Analytics. Raji specjalizuje się w projektowaniu kompleksowych rozwiązań do zarządzania danymi przedsiębiorstwa, analiz biznesowych i analiz dla firm z listy Fortune 500 i Fortune 100 na całym świecie. Ma dogłębne doświadczenie w zintegrowanych danych i analizach dotyczących opieki zdrowotnej z szeroką gamą zbiorów danych dotyczących opieki zdrowotnej, w tym rynkiem zarządzanym, kierowaniem do lekarzy i analizą pacjentów.

Znak czasu:

Więcej z Duże zbiory danych AWS!