Amazon QuickSight ile güvenli veritabanı geri yazma işlemleri gerçekleştirin

Amazon QuickSight ile güvenli veritabanı geri yazma işlemleri gerçekleştirin

Kaynak Düğüm: 2641420

Amazon QuickSight verilerinize bağlanmayı, etkileşimli panolar oluşturmayı, makine öğrenimi özellikli içgörülere erişmeyi ve on binlerce kişiyle görselleri ve panoları paylaşmayı kolaylaştıran, ölçeklenebilir, sunucusuz, makine öğrenimi (ML) destekli bir iş zekası (BI) çözümüdür QuickSight'ın kendi içinde veya herhangi bir uygulamaya gömülü olarak dahili ve harici kullanıcıların.

Geri yazma, bir data mart'ı, veri ambarını veya diğer herhangi bir veritabanı arka ucunu BI panolarından güncelleme ve güncellenen verileri panonun kendisinde neredeyse gerçek zamanlı olarak analiz etme yeteneğidir. Bu gönderide, QuickSight ile güvenli veritabanı geri yazma işlemlerinin nasıl gerçekleştirileceğini gösteriyoruz.

Kullanım örneğine genel bakış

QuickSight ile bir geri yazma yeteneğinin nasıl etkinleştirileceğini göstermek için hayali bir şirket olan AnyCompany Inc.'i ele alalım. AnyCompany, müşterilerine iş gücü çözümleri sağlama konusunda uzmanlaşmış profesyonel bir hizmet firmasıdır. AnyCompany, büyüyen küresel iş ihtiyaçlarını desteklemek için iş yüklerini bulutta çalıştırmanın bir rekabet avantajı olduğunu belirledi ve tüm iş yüklerini barındırmak için bulutu kullanıyor. AnyCompany, şubelerinin müşterilerine teklif verme şeklini geliştirmeye karar verdi. Şu anda, şubeler müşteri tekliflerini manuel olarak oluşturuyor ve bu yenilik yolculuğunun ilk adımı olarak AnyCompany, teklif oluşturma sırasında yerel fiyatlandırma verilerini dinamik olarak uygulama becerisine sahip, müşteri fiyat teklifi oluşturmaya yönelik kurumsal bir çözüm geliştirmek istiyor.

AnyCompany şu anda kullanıyor Amazon Kırmızıya Kaydırma kurumsal veri ambarı platformu ve QuickSight BI çözümü olarak.

Yeni bir çözüm oluşturmak aşağıdaki zorlukları beraberinde getirir:

  • AnyCompany, oluşturması ve bakımı kolay bir çözüm istiyor ve ayrı bir kullanıcı arabirimi oluşturmaya yatırım yapmak istemiyor.
  • AnyCompany, mevcut QuickSight BI panosunun yeteneklerini, teklif oluşturma ve teklif kabulünü de etkinleştirecek şekilde genişletmek istiyor. Çalışanları zaten QuickSight panolarını kullandığından ve QuickSight'ın sağladığı kullanımı kolay arayüzün keyfini çıkardığından, bu, özellik sunumlarını basitleştirecektir.
  • AnyCompany, oluşturulan, incelenen ve kabul edilen teklifleri içeren fiyat teklifi müzakere geçmişini saklamak istiyor.
  • AnyCompany, analiz ve iş içgörüleri için fiyat teklifi geçmişi verileri içeren yeni bir pano oluşturmak istiyor.

Bu gönderi, QuickSight'tan Amazon Redshift'e geri yazma işlevini etkinleştirmek için gerekli adımları açıklamaktadır. Geleneksel BI araçlarının salt okunur olduğunu ve kaynak verileri güncellemek için çok az veya hiç seçenek olmadığını unutmayın.

Çözüme genel bakış

Bu çözüm, aşağıdaki AWS hizmetlerini kullanır:

  • Amazon API Ağ Geçidi – QuickSight tarafından çağrılacak geri yazma REST API'sini barındırır ve güvenliğini sağlar
  • AWS Lambda – Karma oluşturmak için gereken hesaplama işlevini ve geri yazmayı güvenli bir şekilde gerçekleştirmek için ikinci bir işlevi çalıştırır
  • Amazon QuickSight – BI panoları ve fiyat teklifi oluşturma yetenekleri sunar
  • Amazon Kırmızıya Kaydırma – Teklifleri, fiyatları ve diğer ilgili veri kümelerini depolar
  • AWS Sırları Yöneticisi – Karmaları imzalamak için anahtarları saklar ve yönetir (mesaj özeti)

Bu çözüm, veri deposu olarak Amazon Redshift'i kullansa da benzer bir yaklaşım, Lambda'yı çağırabilen kullanıcı tanımlı işlevler (UDF'ler) oluşturmayı destekleyen herhangi bir veritabanıyla uygulanabilir.

Aşağıdaki şekilde, QuickSight'tan geri yazma gerçekleştirmek için iş akışı gösterilmektedir.

Çözümdeki ilk adım, bir Lambda işlevini çağırarak Amazon Redshift'teki öznitelik kümesinin bir karmasını veya mesaj özetini oluşturmaktır. Bu adım, isteğin kurcalanmasını önler. Bir karma oluşturmak için Amazon Redshift bir skaler Lambda UDF. Burada kullanılan hash mekanizması popülerdir. BLAKE2 işlevi (Python kitaplığında bulunur) Hashlib). Karmayı daha da güvenli hale getirmek için, daha hızlı ve daha basit bir alternatif olan anahtarlı karma kullanılır. karma tabanlı mesaj doğrulama kodu (HMAC). Bu anahtar, Secrets Manager tarafından oluşturulur ve saklanır ve yalnızca izin verilen uygulamalar tarafından erişilebilir olmalıdır. Güvenli karma oluşturulduktan sonra Amazon Redshift'e döndürülür ve bir Amazon Redshift görünümünde birleştirilir.

Oluşturulan fiyat teklifinin Amazon Redshift'e geri yazılması, geri yazma Lambda işlevi tarafından gerçekleştirilir ve isteklerin güvenliğini sağlamak ve geri yazma işlevine iletmek için bir API Ağ Geçidi REST API uç noktası oluşturulur. Geri yazma işlevi aşağıdaki eylemleri gerçekleştirir:

  1. QuickSight'tan alınan API giriş parametrelerine dayalı olarak karmayı oluşturun.
  2. Secrets Manager'dan anahtarı uygulayarak karmayı imzalayın.
  3. Oluşturulan hash'i giriş parametrelerinden alınan hash ile karşılaştırın. HMAC modülü.
  4. Başarılı doğrulamanın ardından kaydı Amazon Redshift'teki fiyat teklifi gönderme tablosuna yazın.

Aşağıdaki bölüm, örnek yükler ve kod parçacıkları ile ayrıntılı adımlar sağlar.

karmayı oluştur

Karma, Amazon Redshift'te bir Lambda UDF kullanılarak oluşturulur. Ek olarak, hash'i imzalamak için bir Secrets Manager anahtarı kullanılır. Karmayı oluşturmak için aşağıdaki adımları tamamlayın:

  1. Secrets Manager anahtarını şuradan oluşturun: AWS Komut Satırı Arayüzü (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. Şifreleme için bir karma oluşturmak üzere bir Lambda UDF oluşturun:
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. Karma oluşturmak üzere Lambda işlevini çağırmak için bir Amazon Redshift UDF tanımlayın:
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>';

The AWS Kimlik ve Erişim Yönetimi Lambda işlevini çağırabilmek için önceki adımdaki (IAM) rolüne aşağıdaki politika eklenmiş olmalıdır:

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

  1. Anahtarı Secrets Manager'dan alın.

Bu anahtar, hash'i daha da güvenli hale getirmek için Lambda işlevi tarafından kullanılır. Bu, get_secret Adım 2'deki işlev.

QuickSight'ta Amazon Redshift veri kümelerini ayarlayın

Fiyat teklifi oluşturma panosu, aşağıdaki Amazon Redshift görünümünü kullanır.

Karma sütunla birlikte önceki tüm sütunları kullanan bir Amazon Redshift görünümü oluşturun:

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

Kayıtlar aşağıdaki ekran görüntüsü gibi görünecektir.

Önceki görünüm, teklif oluşturmak için QuickSight veri kümesi olarak kullanılacaktır. Veri kümesi kullanılarak bir QuickSight analizi oluşturulacaktır. Neredeyse gerçek zamanlı analiz için QuickSight doğrudan sorgulama modunu kullanabilirsiniz.

API Ağ Geçidi kaynakları oluşturun

Geri yazma işlemi, Lambda geri yazma işlevini başlatan bir API Ağ Geçidi kaynağını çağıran QuickSight tarafından başlatılır. Geri yazma API'sini çağırmak için QuickSight'ta hesaplanan alanı oluşturmanın ön koşulu olarak, önce bu kaynakları oluşturmalısınız.

API Ağ Geçidi, eşleme şablonlarıyla URL sorgu dizesi parametreleri olarak oluşturulan parametrelerle geri yazma Lambda işlevini korur ve çağırır. Lambda proxy entegrasyonu kullanılarak eşleme parametrelerinden kaçınılabilir.

Tümleştirme türü olarak Lambda işlevlerini (sonraki adımda oluşturulan) kullanan GET yöntem türünde bir REST API kaynağı oluşturun. Talimatlar için bkz. Amazon API Gateway'de REST API oluşturma ve API Gateway'de Lambda entegrasyonlarını kurun.

Aşağıdaki ekran görüntüsü, API Gateway'e iletilen her parametre için bir sorgu dizesi parametresi oluşturmaya ilişkin ayrıntıları gösterir.

Aşağıdaki ekran görüntüsü, API Gateway'e iletilen her parametre için bir eşleme şablonu parametresi oluşturmaya ilişkin ayrıntıları gösterir.

Lambda işlevini oluşturun

API Ağ Geçidinin çağırması için yeni bir Lambda işlevi oluşturun. Lambda işlevi aşağıdaki adımları gerçekleştirir:

  1. API Ağ Geçidi aracılığıyla QuickSight'tan parametreler alın ve birleştirilmiş parametrelere hash ekleyin.

Aşağıdaki kod örneği, Lambda işlevinin olay nesnesini kullanarak API Ağ Geçidi çağrısından parametreleri alır:

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

İşlev, şekilde gösterildiği gibi karma mantığını gerçekleştirir. hash oluştur QuickSight tarafından iletilen birleştirilmiş parametreleri kullanarak önceki adım.

  1. Karma çıktıyı hash parametresiyle karşılaştırın.

Bunlar eşleşmezse, geri yazma gerçekleşmez.

  1. Karmalar eşleşirse, bir geri yazma işlemi gerçekleştirin. QuickSight'tan geçirilen parametreleri kullanarak tablodan bir sorgu oluşturarak teklif oluşturma tablosunda bir kaydın olup olmadığını kontrol edin:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Sorgunun sonuçlarına göre aşağıdaki eylemi tamamlayın:
    1. Önceki kombinasyon için herhangi bir kayıt yoksa, durumu oluşturulan şekilde olan tüm parametreleri kullanarak bir ekleme sorgusu oluşturun ve çalıştırın.
    2. Önceki kombinasyon için bir kayıt varsa, durumu incelemede olan bir ekleme sorgusu oluşturun ve çalıştırın. Mevcut kombinasyon için quote_Id yeniden kullanılacaktır.

QuickSight görseli oluşturma

Bu adım, parametreleri API Gateway'e iletmek ve önceki Lambda işlevini çağırmak için hesaplanmış bir alan kullanan bir tablo görseli oluşturmayı içerir.

  1. Fiyat teklifi geçmişini Amazon Redshift'e geri yazmak için tetiklenecek olan API Ağ Geçidi tarafından barındırılan URL'yi tutmak için Teklif Oluştur adlı bir QuickSight hesaplanmış alanı ekleyin:
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. Bir QuickSight tablo görseli oluşturun.
  2. Müşteri, Beceri ve Maliyet gibi gerekli alanları ekleyin.
  3. Teklif Oluştur hesaplanan alanını ekleyin ve bunu bir köprü olarak biçimlendirin.

Bu bağlantıyı seçmek, kaydı Amazon Redshift'e yazacaktır. Bu, Lambda işlevi parametreler üzerinde hash gerçekleştirdiğinde dönen aynı hash değerinden sorumludur.

Aşağıdaki ekran görüntüsünde örnek bir tablo görseli gösterilmektedir.

Amazon Redshift veritabanına yazın

Secrets Manager anahtarı getirilir ve Lambda işlevi tarafından karşılaştırma için hash oluşturmak üzere kullanılır. Geri yazma, yalnızca hash parametrede iletilen hash ile eşleşirse gerçekleştirilecektir.

Aşağıdaki Amazon Redshift tablosu, Lambda işlevi tarafından doldurulan fiyat teklifi geçmişini yakalayacaktır. Yeşil renkli kayıtlar, teklif için en son kayıtları temsil eder.

Dikkat edilecek noktalar ve sonraki adımlar

Güvenli karmaların kullanılması, geri yazma URL'si çağrıldığında tarayıcı penceresinde görünen yük parametrelerinin kurcalanmasını önler. Geri yazma URL'sinin güvenliğini daha da artırmak için aşağıdaki teknikleri kullanabilirsiniz:

  • REST API'yi yalnızca QuickSight kullanıcılarının erişebildiği özel bir VPC'ye dağıtın.
  • Yeniden yürütme saldırılarını önlemek için, karma işlevinin yanı sıra bir zaman damgası oluşturulabilir ve geri yazma URL'sinde ek bir parametre olarak iletilebilir. Arka uç Lambda işlevi daha sonra yalnızca belirli bir zamana dayalı eşik dahilinde geri yazmalara izin verecek şekilde değiştirilebilir.
  • API Ağ Geçidini Takip Edin erişim kontrolü ve güvenlik en iyi uygulamalar.
  • Azaltmak halka açık API'ler için potansiyel Hizmet Reddi.

Geri yazma URL'si açıldığında web tabanlı bir form oluşturmak için bu çözümü daha da geliştirebilirsiniz. Bu, ek bilgi girişini desteklemek için arka uç Lambda işlevinde dinamik olarak bir HTML formu oluşturarak uygulanabilir. İş yükünüz, daha yüksek aktarım hızı veya eşzamanlılık gerektiren çok sayıda geri yazma gerektiriyorsa, amaca yönelik oluşturulmuş bir veri deposu gibi Amazon Aurora PostgreSQL-Uyumlu Sürüm daha iyi bir seçim olabilir. Daha fazla bilgi için bkz. Bir Aurora PostgreSQL DB kümesinden bir AWS Lambda işlevi çağırma. Bu güncellemeler daha sonra kullanılarak Amazon Redshift tablolarıyla senkronize edilebilir. birleşik sorgular.

Sonuç

Bu gönderi, kullanıcı girdi verilerini yakalamak ve QuickSight BI ortamınızdan ayrılmadan Amazon Redshift veri ambarınızı güvenli bir şekilde güncellemek için QuickSight'ın Lambda, API Gateway, Secrets Manager ve Amazon Redshift ile birlikte nasıl kullanılacağını gösterdi. Bu çözüm, veritabanı güncelleme veya ekleme işlemleri için harici bir uygulama veya kullanıcı arabirimi oluşturma ihtiyacını ortadan kaldırır ve ilgili geliştirme ve bakım yükünü azaltır. API Ağ Geçidi çağrısı, yalnızca QuickSight'tan kaynaklanan çağrıların API Ağ Geçidi tarafından kabul edilmesini sağlamak için bir anahtar veya belirteç kullanılarak da güvenli hale getirilebilir. Bu sonraki yazılarda ele alınacaktır.


Yazarlar Hakkında

Srikanth Baheti Amazon QuickSight için Dünya Çapında Uzmanlaşmış Ana Çözüm Mimarıdır. Kariyerine danışman olarak başladı ve çok sayıda özel ve devlet kuruluşunda çalıştı. Daha sonra PerkinElmer Health and Sciences & eResearch Technology Inc'de çalıştı ve burada yüksek trafikli web uygulamaları, AWS hizmetleri ve Sunucusuz bilgi işlem kullanan raporlama platformları için yüksek oranda ölçeklenebilir ve bakımı yapılabilir veri boru hatları tasarlamaktan ve geliştirmekten sorumluydu.

Raji Sivasubramaniam AWS'de Analitik odaklı bir Kıdemli Çözüm Mimarıdır. Raji, dünya genelindeki Fortune 500 ve Fortune 100 şirketleri için uçtan uca Kurumsal Veri Yönetimi, İş Zekası ve Analitik çözümlerinin mimarisinde uzmanlaşmıştır. Yönetilen pazar, doktor hedefleme ve hasta analitiği dahil olmak üzere çok çeşitli sağlık hizmeti veri kümeleriyle entegre sağlık verileri ve analitiği konusunda derin deneyime sahiptir.

Zaman Damgası:

Den fazla AWS Büyük Veri