Udfør sikker tilbageskrivning af databaser med Amazon QuickSight

Udfør sikker tilbageskrivning af databaser med Amazon QuickSight

Kildeknude: 2641420

Amazon QuickSight er en skalerbar, serverløs, maskinlæring (ML)-drevet business intelligence (BI)-løsning, der gør det nemt at oprette forbindelse til dine data, skabe interaktive dashboards, få adgang til ML-aktiveret indsigt og dele visuals og dashboards med titusinder af interne og eksterne brugere, enten i QuickSight selv eller indlejret i enhver applikation.

En tilbageskrivning er evnen til at opdatere et datamarked, et datavarehus eller enhver anden database-backend fra BI-dashboards og analysere de opdaterede data i næsten realtid inden for selve dashboardet. I dette indlæg viser vi, hvordan du udfører sikre database-tilbageskrivninger med QuickSight.

Brug case oversigt

For at demonstrere, hvordan man muliggør en tilbageskrivningsfunktion med QuickSight, lad os overveje et fiktivt firma, AnyCompany Inc. AnyCompany er et professionelt servicefirma, der har specialiseret sig i at levere arbejdsstyrkeløsninger til deres kunder. AnyCompany fastslog, at det at køre arbejdsbelastninger i skyen for at understøtte dets voksende globale forretningsbehov er en konkurrencefordel og bruger skyen til at hoste alle sine arbejdsbelastninger. AnyCompany besluttede at forbedre den måde, dets filialer leverer tilbud til sine kunder på. I øjeblikket genererer filialerne kundetilbud manuelt, og som et første skridt i denne innovationsrejse søger AnyCompany at udvikle en virksomhedsløsning til generering af kundetilbud med mulighed for dynamisk at anvende lokale prisdata på tidspunktet for tilbudsgenerering.

AnyCompany bruger i øjeblikket Amazon rødforskydning som deres enterprise data warehouse platform og QuickSight som deres BI løsning.

At bygge en ny løsning medfører følgende udfordringer:

  • AnyCompany vil have en løsning, der er nem at bygge og vedligeholde, og de ønsker ikke at investere i at bygge en separat brugergrænseflade.
  • AnyCompany ønsker at udvide mulighederne for deres eksisterende QuickSight BI-dashboard til også at muliggøre tilbudsgenerering og tilbudsaccept. Dette vil forenkle funktionsudrulning, fordi deres medarbejdere allerede bruger QuickSight-dashboards og nyder godt af den brugervenlige grænseflade, som QuickSight tilbyder.
  • AnyCompany ønsker at gemme tilbudsforhandlingshistorikken, der inkluderer genererede, gennemgåede og accepterede tilbud.
  • AnyCompany ønsker at bygge et nyt dashboard med tilbudshistorikdata til analyse og forretningsindsigt.

Dette indlæg gennemgår trinene for at aktivere tilbageskrivningsfunktionalitet til Amazon Redshift fra QuickSight. Bemærk, at de traditionelle BI-værktøjer er skrivebeskyttede med få eller ingen muligheder for at opdatere kildedata.

Løsningsoversigt

Denne løsning bruger følgende AWS-tjenester:

  • Amazon API Gateway – Hoster og sikrer tilbageskrivnings-REST API, som vil blive påberåbt af QuickSight
  • AWS Lambda – Kører den beregningsfunktion, der kræves for at generere hashen, og en anden funktion til sikker udførelse af tilbageskrivningen
  • Amazon QuickSight – Tilbyder BI-dashboards og tilbudsgenereringsmuligheder
  • Amazon rødforskydning – Gemmer tilbud, priser og andre relevante datasæt
  • AWS Secrets Manager - Gemmer og administrerer nøgler til at signere hash (beskedsammenfatning)

Selvom denne løsning bruger Amazon Redshift som datalager, kan en lignende tilgang implementeres med enhver database, der understøtter oprettelse af brugerdefinerede funktioner (UDF'er), der kan kalde Lambda.

Følgende figur viser arbejdsgangen til at udføre tilbageskrivninger fra QuickSight.

Det første trin i løsningen er at generere en hash eller et beskedsammendrag af sættet af attributter i Amazon Redshift ved at påkalde en Lambda-funktion. Dette trin forhindrer manipulation af anmodninger. For at generere en hash kalder Amazon Redshift en skalar Lambda UDF. Hashing-mekanismen, der bruges her, er den populære BLAKE2 funktion (tilgængelig i Python-biblioteket hashlib). For yderligere at sikre hashen anvendes keyed hashing, som er et hurtigere og enklere alternativ til hash-baseret meddelelsesgodkendelseskode (HMAC). Denne nøgle er genereret og gemt af Secrets Manager og bør kun være tilgængelig for tilladte programmer. Efter den sikre hash er genereret, returneres den til Amazon Redshift og kombineres i en Amazon Redshift-visning.

At skrive det genererede tilbud tilbage til Amazon Redshift udføres af tilbageskrivnings-lamda-funktionen, og et API Gateway REST API-slutpunkt oprettes for at sikre og videregive anmodninger til tilbageskrivningsfunktionen. Tilbageskrivningsfunktionen udfører følgende handlinger:

  1. Generer hashen baseret på API-inputparametrene modtaget fra QuickSight.
  2. Underskriv hashen ved at anvende nøglen fra Secrets Manager.
  3. Sammenlign den genererede hash med hash modtaget fra inputparametrene ved hjælp af compare_digest metoden, der er tilgængelig i HMAC modul.
  4. Efter vellykket validering skal du skrive posten til tilbudsindsendelsestabellen i Amazon Redshift.

Det følgende afsnit indeholder detaljerede trin med eksempler på nyttelast og kodestykker.

Generer hashen

Hashen er genereret ved hjælp af en Lambda UDF i Amazon Redshift. Derudover bruges en Secrets Manager-nøgle til at signere hashen. For at oprette hashen skal du udføre følgende trin:

  1. Opret Secrets Manager-nøglen fra AWS kommandolinjegrænseflade (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. Opret en Lambda UDF for at generere en hash til kryptering:
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. Definer en Amazon Redshift UDF for at kalde Lambda-funktionen for at oprette en 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 identitets- og adgangsstyring (IAM) rolle i det foregående trin bør have følgende politik knyttet for at kunne påberåbe Lambda-funktionen:

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

  1. Hent nøglen fra Secrets Manager.

Denne nøgle bruges af Lambda-funktionen til yderligere at sikre hashen. Dette er angivet i få_hemmelig funktion i trin 2.

Konfigurer Amazon Redshift-datasæt i QuickSight

Dashboardet til generering af tilbud bruger følgende Amazon Redshift-visning.

Opret en Amazon Redshift-visning, der bruger alle de foregående kolonner sammen med hash-kolonnen:

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

Optegnelserne vil se ud som følgende skærmbillede.

Den foregående visning vil blive brugt som QuickSight-datasættet til at generere tilbud. En QuickSight-analyse vil blive oprettet ved hjælp af datasættet. Til næsten-realtidsanalyse kan du bruge QuickSights direkte forespørgselstilstand.

Opret API Gateway-ressourcer

Tilbageskrivningsoperationen initieres ved, at QuickSight påkalder en API Gateway-ressource, som påkalder Lambda-tilbageskrivningsfunktionen. Som en forudsætning for at oprette det beregnede felt i QuickSight for at kalde tilbageskrivnings-API'en, skal du først oprette disse ressourcer.

API Gateway sikrer og aktiverer tilbageskrivnings-lamda-funktionen med de parametre, der er oprettet som URL-forespørgselsstrengparametre med tilknytningsskabeloner. Kortlægningsparametrene kan undgås ved at bruge Lambda proxy integrationen.

Opret en REST API-ressource af metodetypen GET, der bruger Lambda-funktioner (oprettet i næste trin) som integrationstype. For instruktioner, se Oprettelse af en REST API i Amazon API Gateway , Konfigurer Lambda-integrationer i API Gateway.

Følgende skærmbillede viser detaljerne for oprettelse af en forespørgselsstrengparameter for hver parameter, der sendes til API Gateway.

Det følgende skærmbillede viser detaljerne for oprettelse af en tilknytningsskabelonparameter for hver parameter, der sendes til API Gateway.

Opret Lambda-funktionen

Opret en ny Lambda-funktion, som API-gatewayen kan aktivere. Lambdafunktionen udfører følgende trin:

  1. Modtag parametre fra QuickSight gennem API Gateway og hash de sammenkædede parametre.

Følgende kodeeksempel henter parametre fra API Gateway-kaldet ved hjælp af hændelsesobjektet for Lambda-funktionen:

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

Funktionen udfører hashing-logikken som vist i oprette hash trin tidligere ved at bruge de sammenkædede parametre, der er videregivet af QuickSight.

  1. Sammenlign det hash-output med hash-parameteren.

Hvis disse ikke stemmer overens, sker tilbageskrivningen ikke.

  1. Hvis hasherne matcher, skal du udføre en tilbageskrivning. Tjek for tilstedeværelsen af ​​en post i tilbudsgenereringstabellen ved at generere en forespørgsel fra tabellen ved hjælp af parametrene overført fra QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Fuldfør følgende handling baseret på resultaterne af forespørgslen:
    1. Hvis der ikke findes nogen post for den foregående kombination, skal du generere og køre en indsættelsesforespørgsel ved hjælp af alle parametre med status som genereret.
    2. Hvis der findes en post for den foregående kombination, skal du generere og køre en indsættelsesforespørgsel med status som under gennemgang. Citat_Id for den eksisterende kombination vil blive genbrugt.

Opret en QuickSight-visuel

Dette trin involverer oprettelse af en tabelvisuel, der bruger et beregnet felt til at sende parametre til API-gateway og aktivere den foregående Lambda-funktion.

  1. Tilføj et QuickSight-beregnet felt med navnet Generate Quote for at holde den API Gateway-hostede URL, der vil blive udløst for at skrive tilbudshistorikken tilbage i 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. Opret en QuickSight-tabelvisuel.
  2. Tilføj obligatoriske felter såsom kunde, færdighed og pris.
  3. Tilføj feltet Generer citat beregnet og stil dette som et hyperlink.

Hvis du vælger dette link, skrives posten ind i Amazon Redshift. Dette påhviler den samme hashværdi, der returnerer, når Lambda-funktionen udfører hash på parametrene.

Følgende skærmbillede viser et eksempel på en tabelvisuel.

Skriv til Amazon Redshift-databasen

Secrets Manager-nøglen hentes og bruges af Lambda-funktionen til at generere hashen til sammenligning. Tilbageskrivningen udføres kun, hvis hashen stemmer overens med hashen, der er sendt i parameteren.

Følgende Amazon Redshift-tabel vil fange citathistorikken som befolket af Lambda-funktionen. Poster med grønt repræsenterer de seneste rekorder for citatet.

Overvejelser og næste skridt

Brug af sikre hashes forhindrer manipulation af nyttelastparametre, der er synlige i browservinduet, når tilbageskrivnings-URL'en kaldes. For yderligere at sikre tilbageskrivnings-URL'en kan du bruge følgende teknikker:

  • Implementer REST API'en i en privat VPC, der kun er tilgængelig for QuickSight-brugere.
  • For at forhindre genafspilningsangreb kan der genereres et tidsstempel ved siden af ​​hashing-funktionen og sendes som en ekstra parameter i tilbageskrivnings-URL'en. Backend Lambda-funktionen kan derefter modificeres til kun at tillade tilbageskrivninger inden for en vis tidsbaseret tærskel.
  • Følg API-gatewayen adgangskontrol , sikkerhed bedste praksis.
  • afbøde potentiel Denial of Service for offentlige API'er.

Du kan yderligere forbedre denne løsning til at gengive en webbaseret formular, når tilbageskrivnings-URL'en åbnes. Dette kunne implementeres ved dynamisk at generere en HTML-formular i backend Lambda-funktionen for at understøtte input af yderligere information. Hvis din arbejdsbyrde kræver et stort antal tilbageskrivninger, der kræver højere gennemløb eller samtidighed, kan et specialbygget datalager som f.eks. Amazon Aurora PostgreSQL-kompatibel udgave kan være et bedre valg. For mere information, se Aktivering af en AWS Lambda-funktion fra en Aurora PostgreSQL DB-klynge. Disse opdateringer kan derefter synkroniseres til Amazon Redshift-tabeller ved hjælp af fødererede forespørgsler.

Konklusion

Dette indlæg viste, hvordan du bruger QuickSight sammen med Lambda, API Gateway, Secrets Manager og Amazon Redshift til at fange brugerinputdata og sikkert opdatere dit Amazon Redshift-datavarehus uden at forlade dit QuickSight BI-miljø. Denne løsning eliminerer behovet for at oprette en ekstern applikation eller brugergrænseflade til databaseopdatering eller indsættelsesoperationer og reducerer relaterede udviklings- og vedligeholdelsesomkostninger. API Gateway-kaldet kan også sikres ved hjælp af en nøgle eller token for at sikre, at kun opkald, der stammer fra QuickSight, accepteres af API-gatewayen. Dette vil blive dækket i efterfølgende indlæg.


Om forfatterne

Srikanth Baheti er en specialiseret World Wide Principal Solutions Architect for Amazon QuickSight. Han startede sin karriere som konsulent og arbejdede for flere private og offentlige organisationer. Senere arbejdede han for PerkinElmer Health and Sciences & eResearch Technology Inc., hvor han var ansvarlig for at designe og udvikle højtrafik-webapplikationer, meget skalerbare og vedligeholdelige datapipelines til rapporteringsplatforme ved hjælp af AWS-tjenester og serverløs computing.

Raji Sivasubramaniam er Sr. Solutions Architect hos AWS med fokus på Analytics. Raji er specialiseret i at udvikle end-to-end Enterprise Data Management, Business Intelligence og Analytics-løsninger til Fortune 500 og Fortune 100 virksomheder over hele kloden. Hun har dybdegående erfaring med integrerede sundhedsdata og analyser med en bred vifte af sundhedsdatasæt, herunder administreret marked, lægemålretning og patientanalyse.

Tidsstempel:

Mere fra AWS Big Data