Suorita suojattuja tietokantakirjoituksia Amazon QuickSightin avulla

Suorita suojattuja tietokantakirjoituksia Amazon QuickSightin avulla

Lähdesolmu: 2641420

Amazon QuickSight on skaalautuva, palvelimeton, koneoppimiseen (ML) perustuva business intelligence (BI) -ratkaisu, jonka avulla on helppo muodostaa yhteys tietoihisi, luoda interaktiivisia hallintapaneeleja, päästä käsiksi ML-yhteensopiviin oivalluksiin ja jakaa visuaalisia kuvia ja hallintapaneeleja kymmenien tuhansien kanssa. sisäisten ja ulkoisten käyttäjien välillä joko itse QuickSightissa tai upotettuna mihin tahansa sovellukseen.

Takaisinkirjoitus on kyky päivittää tietokauppa, tietovarasto tai mikä tahansa muu tietokanta taustaohjelmisto BI-koontinäyttöjen sisällä ja analysoida päivitetyt tiedot lähes reaaliajassa itse kojelaudassa. Tässä viestissä näytämme kuinka tehdä suojattuja tietokantakirjoituksia QuickSightin avulla.

Käytä tapauskatsausta

Havainnollistaaksemme, kuinka QuickSightin avulla voidaan kirjoittaa takaisin, harkitsemme kuvitteellista yritystä, AnyCompany Inc:tä. AnyCompany on ammattimainen palveluyritys, joka on erikoistunut tarjoamaan työvoimaratkaisuja asiakkailleen. AnyCompany totesi, että työkuormien suorittaminen pilvessä kasvavien globaalien liiketoimintatarpeidensa tukemiseksi on kilpailuetu, ja käyttää pilvipalvelua kaikkien työkuormitustensa isännöimiseen. AnyCompany päätti parantaa tapaa, jolla sen sivuliikkeet tarjoavat tarjouksia asiakkailleen. Tällä hetkellä sivuliikkeet luovat asiakastarjouksia manuaalisesti, ja ensimmäisenä askeleena tällä innovaatiopolulla AnyCompany pyrkii kehittämään yritysratkaisun asiakastarjousten luomiseen, joka pystyy soveltamaan dynaamisesti paikallisia hinnoittelutietoja tarjouksen luomishetkellä.

AnyCompany käyttää tällä hetkellä Amazonin punainen siirto yrityksen tietovarastoalustana ja QuickSightin BI-ratkaisuna.

Uuden ratkaisun rakentaminen tuo mukanaan seuraavat haasteet:

  • AnyCompany haluaa ratkaisun, joka on helppo rakentaa ja ylläpitää, eikä he halua panostaa erillisen käyttöliittymän rakentamiseen.
  • AnyCompany haluaa laajentaa nykyisen QuickSight BI -hallintapaneelinsa ominaisuuksia mahdollistaakseen myös tarjousten luomisen ja tarjousten hyväksymisen. Tämä yksinkertaistaa ominaisuuksien käyttöönottoa, koska heidän työntekijänsä käyttävät jo QuickSight-hallintapaneeleja ja nauttivat QuickSightin tarjoamasta helppokäyttöisestä käyttöliittymästä.
  • AnyCompany haluaa tallentaa tarjousneuvotteluhistorian, joka sisältää luodut, tarkistetut ja hyväksytyt tarjoukset.
  • AnyCompany haluaa rakentaa uuden hallintapaneelin, jossa on tarjoushistoriatietoja analysointia ja liiketoimintatietoja varten.

Tässä viestissä käydään läpi vaiheet, jotka mahdollistavat QuickSightin Amazon Redshiftin takaisinkirjoitustoiminnon. Huomaa, että perinteiset BI-työkalut ovat vain luku -muotoisia, ja niissä on vain vähän tai ei ollenkaan vaihtoehtoja lähdetietojen päivittämiseen.

Ratkaisun yleiskatsaus

Tämä ratkaisu käyttää seuraavia AWS-palveluita:

  • Amazon API -yhdyskäytävä – Isännöi ja suojaa QuickSightin kutsuman takaisinkirjoitettavan REST API:n
  • AWS Lambda – Suorittaa laskentatoiminnon, joka tarvitaan hajautusarvon luomiseen, ja toisen toiminnon, joka suorittaa takaisinkirjoituksen turvallisesti
  • Amazon QuickSight – Tarjoaa BI-hallintapaneelit ja tarjousten luontiominaisuudet
  • Amazonin punainen siirto – Tallentaa tarjoukset, hinnat ja muut asiaankuuluvat tietojoukot
  • AWS -salaisuuksien hallinta - Tallentaa ja hallitsee avaimia tiivisteiden allekirjoittamiseen (viestin yhteenveto)

Vaikka tämä ratkaisu käyttää Amazon Redshiftiä tietovarastona, samanlainen lähestymistapa voidaan toteuttaa missä tahansa tietokannassa, joka tukee käyttäjän määrittämien funktioiden (UDF) luomista, jotka voivat kutsua Lambdaa.

Seuraava kuva näyttää työnkulun QuickSightin takaisinkirjoituksiin.

Ensimmäinen askel ratkaisussa on luoda hash tai viestitiivistelmä attribuuttijoukosta Amazon Redshiftissä käynnistämällä Lambda-funktio. Tämä vaihe estää pyyntöjen muuttamisen. Hajautusarvon luomiseksi Amazon Redshift kutsuu a skalaari Lambda UDF. Tässä käytetty hajautusmekanismi on suosittu BLAKE2 funktio (saatavilla Python-kirjastossa hashlib). Hajautuksen turvaamiseksi edelleen käytetään avaimella varustettua hajautusta, joka on nopeampi ja yksinkertaisempi vaihtoehto hash-pohjainen viestin todennuskoodi (HMAC). Secrets Manager luo ja tallentaa tämän avaimen, ja sen pitäisi olla vain sallittujen sovellusten käytettävissä. Kun suojattu hash on luotu, se palautetaan Amazon Redshiftille ja yhdistetään Amazon Redshift -näkymään.

Luodun lainauksen kirjoittaminen takaisin Amazon Redshiftiin suoritetaan takaisinkirjoituslambda-toiminnolla, ja API Gateway REST API -päätepiste luodaan suojaamaan ja välittämään pyynnöt takaisinkirjoitustoimintoon. Takaisinkirjoitustoiminto suorittaa seuraavat toiminnot:

  1. Luo hash QuickSightilta saatujen API-syöttöparametrien perusteella.
  2. Allekirjoita tiiviste käyttämällä Secrets Managerin avainta.
  3. Vertaa luotua tiivistettä syöttöparametreista saatuun hajautusarvoon käyttämällä Compare_digest-menetelmää, joka on saatavilla HMAC moduuli.
  4. Kun vahvistus on onnistunut, kirjoita tietue Amazon Redshiftin tarjouksen lähetystaulukkoon.

Seuraavassa osiossa on yksityiskohtaiset vaiheet esimerkkihyötykuormista ja koodikatkelmista.

Luo hash

Hash on luotu käyttämällä Lambda UDF:ää Amazon Redshiftissä. Lisäksi tiivisteen allekirjoittamiseen käytetään Secrets Manager -avainta. Luo tiiviste suorittamalla seuraavat vaiheet:

  1. Luo Secrets Manager -avain kohteesta AWS-komentoriviliitäntä (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. Luo Lambda UDF luodaksesi tiiviste salausta varten:
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. Määritä Amazon Redshift UDF kutsumaan Lambda-funktiota hashin luomiseksi:
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-henkilöllisyyden ja käyttöoikeuksien hallinta (IAM) -rooliin edellisessä vaiheessa tulee liittää seuraava käytäntö, jotta Lambda-toiminto voidaan kutsua:

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

  1. Hae avain Secrets Managerista.

Lambda-toiminto käyttää tätä avainta tiivisteen suojaamiseen. Tämä on ilmoitettu kohdassa get_secret toiminto vaiheessa 2.

Määritä Amazon Redshift -tietojoukot QuickSightissa

Tarjousten luomisen hallintapaneeli käyttää seuraavaa Amazon Redshift -näkymää.

Luo Amazon Redshift -näkymä, joka käyttää kaikkia edeltäviä sarakkeita yhdessä hash-sarakkeen kanssa:

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

Tietueet näyttävät seuraavalta kuvakaappaukselta.

Edeltävää näkymää käytetään QuickSight-tietojoukona tarjousten luomiseen. QuickSight-analyysi luodaan tietojoukon avulla. Lähes reaaliaikaiseen analyysiin voit käyttää QuickSight-suorakyselytilaa.

Luo API Gateway -resursseja

Takaisinkirjoitustoiminnon käynnistää QuickSight kutsumalla API Gateway -resurssia, joka kutsuu Lambda-takaisinkirjoitustoiminnon. Edellytyksenä lasketun kentän luomiselle QuickSightissa takaisinkirjoitussovellusliittymän kutsumiseksi sinun on ensin luotava nämä resurssit.

API-yhdyskäytävä suojaa ja kutsuu takaisinkirjoitettavan Lambda-funktion parametreilla, jotka on luotu URL-kyselymerkkijonoparametreiksi kartoitusmalleilla. Kartoitusparametrit voidaan välttää käyttämällä Lambda-välityspalvelinintegraatiota.

Luo menetelmätyypin GET REST API -resurssi, joka käyttää Lambda-funktioita (luodut seuraavassa vaiheessa) integrointityyppinä. Katso ohjeet kohdasta REST API:n luominen Amazon API Gatewayssa ja Määritä Lambda-integraatiot API Gatewayssa.

Seuraavassa kuvakaappauksessa on tiedot kyselymerkkijonoparametrin luomisesta kullekin API-yhdyskäytävälle välitetylle parametrille.

Seuraavassa kuvakaappauksessa näytetään tiedot kartoitusmalliparametrin luomisesta kullekin API-yhdyskäytävälle välitetylle parametrille.

Luo Lambda-funktio

Luo uusi Lambda-funktio API-yhdyskäytävälle kutsuttavaksi. Lambda-toiminto suorittaa seuraavat vaiheet:

  1. Vastaanota parametreja QuickSightista API-yhdyskäytävän kautta ja tiivistää ketjutetut parametrit.

Seuraava koodiesimerkki hakee parametrit API-yhdyskäytäväkutsusta käyttämällä Lambda-funktion tapahtumaobjektia:

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

Toiminto suorittaa hajautuslogiikan kuten kuvassa luoda hash vaihe aikaisemmin käyttämällä QuickSightin välittämiä ketjutettuja parametreja.

  1. Vertaa hajautustulosta hajautusparametriin.

Jos nämä eivät täsmää, takaisinkirjoitusta ei tapahdu.

  1. Jos tiivisteet täsmäävät, suorita takaisinkirjoitus. Tarkista tietueen läsnäolo tarjouksen luontitaulukossa luomalla kysely taulukosta käyttämällä QuickSightin välittämiä parametreja:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Suorita seuraava toimenpide kyselyn tulosten perusteella:
    1. Jos edelliselle yhdistelmälle ei ole tietuetta, luo ja suorita lisäyskysely käyttämällä kaikkia parametreja, joiden tila on luotu.
    2. Jos edelliselle yhdistelmälle on tietue, luo ja suorita lisäyskysely, jonka tila on tarkistuksen aikana. Olemassa olevan yhdistelmän quote_Id käytetään uudelleen.

Luo QuickSight-visuaalisuus

Tässä vaiheessa luodaan taulukkovisuaali, joka käyttää laskettua kenttää parametrien välittämiseen API-yhdyskäytävälle ja edellisen Lambda-funktion kutsumiseen.

  1. Lisää QuickSight-laskettu kenttä nimeltä Luo tarjous sisältämään API-yhdyskäytävän isännöimän URL-osoitteen, joka käynnistetään kirjoittamaan lainaushistoria takaisin Amazon Redshiftiin:
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. Luo QuickSight-taulukkovisuaali.
  2. Lisää pakolliset kentät, kuten Asiakas, Taito ja Hinta.
  3. Lisää Luo lainaus laskettu kenttä ja muotoile tämä hyperlinkiksi.

Tämän linkin valitseminen kirjoittaa tietueen Amazon Redshiftiin. Tämä koskee samaa hajautusarvoa, joka palaa, kun Lambda-funktio suorittaa hajautusarvon parametreille.

Seuraavassa kuvakaappauksessa näkyy esimerkkitaulukko.

Kirjoita Amazon Redshift -tietokantaan

Lambda-funktio hakee Secrets Manager -avaimen ja käyttää sitä hajautusarvon luomiseen vertailua varten. Takaisinkirjoitus suoritetaan vain, jos tiiviste vastaa parametrissa välitettyä tiivistettä.

Seuraava Amazon Redshift -taulukko kaappaa Lambda-funktion täyttämän lainaushistorian. Vihreät tietueet edustavat viimeisimpiä lainauksen tietueita.

Pohdintoja ja seuraavat vaiheet

Turvallisten tiivisteiden käyttö estää selainikkunassa näkyvien hyötykuormaparametrien peukaloinnin, kun takaisinkirjoitus-URL-osoitetta kutsutaan. Voit suojata takaisinkirjoitettavan URL-osoitteen edelleen käyttämällä seuraavia tekniikoita:

  • Ota REST API käyttöön yksityisessä VPC:ssä, joka on vain QuickSight-käyttäjien käytettävissä.
  • Toistohyökkäysten estämiseksi voidaan luoda aikaleima hajautustoiminnon rinnalle ja välittää se lisäparametrina takaisinkirjoitus-URL-osoitteeseen. Lambda-taustatoimintoa voidaan sitten muokata sallimaan vain takaisinkirjoitukset tietyn aikaperusteisen kynnyksen sisällä.
  • Seuraa API-yhdyskäytävää kulunvalvonta ja turvallisuus parhaat käytännöt.
  • lieventää mahdollinen palvelunesto julkisille sovellusliittymille.

Voit parantaa tätä ratkaisua edelleen hahmontaaksesi verkkopohjaisen lomakkeen, kun takaisinkirjoitus-URL-osoite avataan. Tämä voitaisiin toteuttaa generoimalla dynaamisesti HTML-lomake Lambda-taustatoiminnossa lisätietojen syöttämisen tukemiseksi. Jos työmääräsi vaatii suuren määrän takaisinkirjoituksia, jotka edellyttävät suurempaa suorituskykyä tai samanaikaisuutta, tarkoitukseen rakennettu tietovarasto, kuten Amazon Aurora PostgreSQL-yhteensopiva versio saattaa olla parempi valinta. Lisätietoja on kohdassa AWS Lambda -funktion kutsuminen Aurora PostgreSQL DB -klusterista. Nämä päivitykset voidaan sitten synkronoida Amazon Redshift -taulukoihin käyttämällä liitetyt kyselyt.

Yhteenveto

Tämä viesti osoitti, kuinka QuickSightia käytetään yhdessä Lambdan, API Gatewayn, Secrets Managerin ja Amazon Redshiftin kanssa käyttäjien syöttämien tietojen tallentamiseen ja Amazon Redshift -tietovaraston turvalliseen päivittämiseen poistumatta QuickSight BI -ympäristöstä. Tämä ratkaisu eliminoi tarpeen luoda ulkoista sovellusta tai käyttöliittymää tietokannan päivitys- tai lisäystoimintoja varten ja vähentää niihin liittyvää kehitys- ja ylläpitokustannuksia. API-yhdyskäytäväkutsu voidaan myös suojata avaimella tai tunnuksella varmistaakseen, että API-yhdyskäytävä hyväksyy vain QuickSightista lähtevät puhelut. Tätä käsitellään seuraavissa postauksissa.


Tietoja Tekijät

Srikanth Baheti on maailmanlaajuisesti erikoistunut pääratkaisuarkkitehti Amazon QuickSightille. Hän aloitti uransa konsulttina ja työskenteli useissa yksityisissä ja valtion organisaatioissa. Myöhemmin hän työskenteli PerkinElmer Health and Sciences & eResearch Technology Inc:ssä, jossa hän vastasi suuren liikenteen verkkosovellusten, erittäin skaalautuvien ja ylläpidettävien tietoputkien suunnittelusta ja kehittämisestä AWS-palveluita ja palvelimetonta tietojenkäsittelyä käyttäville raportointialustoille.

Raji Sivasubramaniam on AWS:n vanhempi ratkaisuarkkitehti, joka keskittyy Analyticsiin. Raji on erikoistunut kokonaisvaltaisten Enterprise Data Management-, Business Intelligence- ja Analytics-ratkaisujen suunnitteluun Fortune 500- ja Fortune 100 -yrityksille ympäri maailmaa. Hänellä on syvällinen kokemus integroiduista terveydenhuollon tiedoista ja analytiikasta, joka sisältää laajan valikoiman terveydenhuollon tietojoukkoja, mukaan lukien hallitut markkinat, lääkärien kohdistaminen ja potilasanalytiikka.

Aikaleima:

Lisää aiheesta AWS Big Data