Lakukan penulisan balik database yang aman dengan Amazon QuickSight

Lakukan penulisan balik database yang aman dengan Amazon QuickSight

Node Sumber: 2641420

Amazon QuickSight adalah solusi kecerdasan bisnis (BI) yang dapat diskalakan, tanpa server, didukung pembelajaran mesin (ML) yang memudahkan untuk terhubung ke data Anda, membuat dasbor interaktif, mendapatkan akses ke wawasan yang mendukung ML, dan berbagi visual dan dasbor dengan puluhan ribu pengguna internal dan eksternal, baik di dalam QuickSight sendiri atau disematkan ke dalam aplikasi apa pun.

Write-back adalah kemampuan untuk memperbarui data mart, gudang data, atau backend database lainnya dari dalam dasbor BI dan menganalisis data yang diperbarui hampir secara real time di dalam dasbor itu sendiri. Dalam posting ini, kami menunjukkan cara melakukan write-back database yang aman dengan QuickSight.

Gunakan ikhtisar kasus

Untuk mendemonstrasikan cara mengaktifkan kemampuan tulis kembali dengan QuickSight, mari pertimbangkan perusahaan fiktif, AnyCompany Inc. AnyCompany adalah firma layanan profesional yang berspesialisasi dalam menyediakan solusi tenaga kerja kepada pelanggan mereka. AnyCompany menetapkan bahwa menjalankan beban kerja di cloud untuk mendukung kebutuhan bisnis globalnya yang terus berkembang merupakan keunggulan kompetitif dan menggunakan cloud untuk menampung semua beban kerjanya. AnyCompany memutuskan untuk meningkatkan cara cabangnya memberikan penawaran kepada pelanggannya. Saat ini, cabang membuat penawaran pelanggan secara manual, dan sebagai langkah pertama dalam perjalanan inovasi ini, AnyCompany ingin mengembangkan solusi perusahaan untuk pembuatan penawaran pelanggan dengan kemampuan untuk menerapkan data harga lokal secara dinamis pada saat pembuatan penawaran.

AnyCompany saat ini menggunakan Pergeseran Merah Amazon sebagai platform gudang data perusahaan mereka dan QuickSight sebagai solusi BI mereka.

Membangun solusi baru hadir dengan tantangan berikut:

  • AnyCompany menginginkan solusi yang mudah dibangun dan dipelihara, dan mereka tidak ingin berinvestasi dalam membangun antarmuka pengguna yang terpisah.
  • AnyCompany ingin memperluas kemampuan dasbor QuickSight BI mereka yang sudah ada untuk juga mengaktifkan pembuatan kutipan dan penerimaan kutipan. Ini akan menyederhanakan peluncuran fitur karena karyawan mereka sudah menggunakan dasbor QuickSight dan menikmati antarmuka yang mudah digunakan yang disediakan QuickSight.
  • AnyCompany ingin menyimpan riwayat negosiasi kutipan yang mencakup kutipan yang dibuat, ditinjau, dan diterima.
  • AnyCompany ingin membuat dasbor baru dengan data riwayat kutipan untuk analisis dan wawasan bisnis.

Posting ini melewati langkah-langkah untuk mengaktifkan fungsionalitas tulis kembali ke Amazon Redshift dari QuickSight. Perhatikan bahwa alat BI tradisional hanya dapat dibaca dengan sedikit atau tanpa opsi untuk memperbarui data sumber.

Ikhtisar solusi

Solusi ini menggunakan layanan AWS berikut:

  • Gerbang API Amazon – Host dan amankan REST API tulis-balik yang akan dipanggil oleh QuickSight
  • AWS Lambda – Menjalankan fungsi komputasi yang diperlukan untuk menghasilkan hash dan fungsi kedua untuk melakukan penulisan kembali dengan aman
  • Amazon QuickSight – Menawarkan dasbor BI dan kemampuan pembuatan kutipan
  • Pergeseran Merah Amazon – Menyimpan kutipan, harga, dan kumpulan data lain yang relevan
  • Manajer Rahasia AWS – Menyimpan dan mengelola kunci untuk menandatangani hash (pesan intisari)

Meskipun solusi ini menggunakan Amazon Redshift sebagai penyimpanan data, pendekatan serupa dapat diterapkan dengan database apa pun yang mendukung pembuatan fungsi yang ditentukan pengguna (UDF) yang dapat memanggil Lambda.

Gambar berikut memperlihatkan alur kerja untuk melakukan write-backs dari QuickSight.

Langkah pertama dalam solusi adalah membuat hash atau intisari pesan dari kumpulan atribut di Amazon Redshift dengan menjalankan fungsi Lambda. Langkah ini mencegah gangguan permintaan. Untuk menghasilkan hash, Amazon Redshift memanggil a skalar Lambda UDF. Mekanisme hashing yang digunakan di sini adalah yang populer HITAM2 fungsi (tersedia di pustaka Python hashlib). Untuk lebih mengamankan hash, hashing kunci digunakan, yang merupakan alternatif yang lebih cepat dan sederhana kode otentikasi pesan berbasis hash (HMAC). Kunci ini dibuat dan disimpan oleh Secrets Manager dan hanya dapat diakses oleh aplikasi yang diizinkan. Setelah hash aman dibuat, itu dikembalikan ke Amazon Redshift dan digabungkan dalam tampilan Amazon Redshift.

Menulis kutipan yang dihasilkan kembali ke Amazon Redshift dilakukan oleh fungsi Lambda tulis balik, dan titik akhir API Gateway REST API dibuat untuk mengamankan dan meneruskan permintaan ke fungsi tulis balik. Fungsi tulis kembali melakukan tindakan berikut:

  1. Hasilkan hash berdasarkan parameter masukan API yang diterima dari QuickSight.
  2. Tanda tangani hash dengan menerapkan kunci dari Secrets Manager.
  3. Bandingkan hash yang dihasilkan dengan hash yang diterima dari parameter input menggunakan metode compare_digest yang tersedia di HMAC modul.
  4. Setelah validasi berhasil, tulis catatan ke tabel pengiriman penawaran di Amazon Redshift.

Bagian berikut memberikan langkah-langkah mendetail dengan contoh payload dan cuplikan kode.

Hasilkan hash

Hash dihasilkan menggunakan Lambda UDF di Amazon Redshift. Selain itu, kunci Secrets Manager digunakan untuk menandatangani hash. Untuk membuat hash, selesaikan langkah-langkah berikut:

  1. Buat kunci Manajer Rahasia dari Antarmuka Baris Perintah 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. Buat UDF Lambda untuk menghasilkan hash untuk enkripsi:
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. Tentukan UDF Amazon Redshift untuk memanggil fungsi Lambda untuk membuat 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>';

Grafik Identitas AWS dan Manajemen Akses (IAM) di langkah sebelumnya harus memiliki kebijakan berikut yang dilampirkan agar dapat menjalankan fungsi 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. Ambil kunci dari Secrets Manager.

Kunci ini digunakan oleh fungsi Lambda untuk lebih mengamankan hash. Hal ini ditunjukkan dalam dapatkan_rahasia fungsi pada Langkah 2.

Siapkan set data Amazon Redshift di QuickSight

Dasbor pembuatan kutipan menggunakan tampilan Amazon Redshift berikut.

Buat tampilan Amazon Redshift yang menggunakan semua kolom sebelumnya beserta kolom hash:

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

Catatan akan terlihat seperti tangkapan layar berikut.

Tampilan sebelumnya akan digunakan sebagai kumpulan data QuickSight untuk menghasilkan tanda kutip. Analisis QuickSight akan dibuat menggunakan kumpulan data. Untuk analisis hampir waktu nyata, Anda dapat menggunakan mode kueri langsung QuickSight.

Buat sumber daya API Gateway

Operasi tulis balik dimulai dengan QuickSight memanggil sumber daya API Gateway, yang memanggil fungsi tulis balik Lambda. Sebagai prasyarat untuk membuat bidang terhitung di QuickSight untuk memanggil API tulis ulang, Anda harus membuat sumber daya ini terlebih dahulu.

API Gateway mengamankan dan memanggil fungsi Lambda tulis kembali dengan parameter yang dibuat sebagai parameter string kueri URL dengan template pemetaan. Parameter pemetaan dapat dihindari dengan menggunakan integrasi proxy Lambda.

Buat sumber daya REST API dengan tipe metode GET yang menggunakan fungsi Lambda (dibuat di langkah berikutnya) sebagai tipe integrasi. Untuk instruksi, lihat Membuat REST API di Amazon API Gateway dan Siapkan integrasi Lambda di API Gateway.

Tangkapan layar berikut menampilkan detail untuk membuat parameter string kueri untuk setiap parameter yang diteruskan ke API Gateway.

Tangkapan layar berikut menampilkan detail pembuatan parameter template pemetaan untuk setiap parameter yang diteruskan ke API Gateway.

Buat fungsi Lambda

Buat fungsi Lambda baru untuk dipanggil oleh API Gateway. Fungsi Lambda melakukan langkah-langkah berikut:

  1. Terima parameter dari QuickSight melalui API Gateway dan hash parameter gabungan.

Contoh kode berikut mengambil parameter dari panggilan API Gateway menggunakan objek kejadian dari fungsi Lambda:

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

Fungsi melakukan logika hashing seperti yang ditunjukkan pada membuat hash langkah sebelumnya menggunakan parameter gabungan yang diteruskan oleh QuickSight.

  1. Bandingkan output hash dengan parameter hash.

Jika ini tidak cocok, write-back tidak akan terjadi.

  1. Jika hash cocok, lakukan write-back. Periksa keberadaan rekaman di tabel pembuatan kutipan dengan membuat kueri dari tabel menggunakan parameter yang diteruskan dari QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. Selesaikan tindakan berikut berdasarkan hasil kueri:
    1. Jika tidak ada rekaman untuk kombinasi sebelumnya, buat dan jalankan kueri penyisipan menggunakan semua parameter dengan status seperti yang dihasilkan.
    2. Jika ada rekaman untuk kombinasi sebelumnya, buat dan jalankan kueri sisipkan dengan status seperti sedang ditinjau. quote_Id untuk kombinasi yang ada akan digunakan kembali.

Buat visual QuickSight

Langkah ini melibatkan pembuatan visual tabel yang menggunakan kolom kalkulasi untuk meneruskan parameter ke API Gateway dan memanggil fungsi Lambda sebelumnya.

  1. Tambahkan bidang kalkulasi QuickSight bernama Hasilkan Kutipan untuk menampung URL yang dihosting Gateway API yang akan dipicu untuk menulis kembali riwayat kutipan ke 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. Buat visual tabel QuickSight.
  2. Tambahkan bidang wajib seperti Pelanggan, Keterampilan, dan Biaya.
  3. Tambahkan bidang kalkulasi Buat Kutipan dan beri gaya ini sebagai hyperlink.

Memilih tautan ini akan menulis catatan ke Amazon Redshift. Ini wajib untuk mengembalikan nilai hash yang sama saat fungsi Lambda melakukan hash pada parameter.

Tangkapan layar berikut menunjukkan visual tabel sampel.

Tulis ke database Amazon Redshift

Kunci Pengelola Rahasia diambil dan digunakan oleh fungsi Lambda untuk menghasilkan hash untuk perbandingan. Penulisan kembali akan dilakukan hanya jika hash cocok dengan hash yang diteruskan dalam parameter.

Tabel Amazon Redshift berikut akan merekam riwayat kutipan yang diisi oleh fungsi Lambda. Rekaman berwarna hijau mewakili rekaman terbaru untuk kutipan tersebut.

Pertimbangan dan langkah selanjutnya

Menggunakan hash aman mencegah perusakan parameter payload yang terlihat di jendela browser saat URL tulis ulang dipanggil. Untuk lebih mengamankan URL tulis kembali, Anda dapat menggunakan teknik berikut:

  • Terapkan REST API di VPC pribadi yang hanya dapat diakses oleh pengguna QuickSight.
  • Untuk mencegah serangan replay, stempel waktu dapat dibuat di samping fungsi hashing dan diteruskan sebagai parameter tambahan di URL tulis ulang. Fungsi Lambda backend kemudian dapat dimodifikasi untuk hanya mengizinkan penulisan kembali dalam ambang berbasis waktu tertentu.
  • Ikuti Gerbang API kontrol akses dan keamanan praktik terbaik.
  • Mengurangi potensi Denial of Service untuk API yang menghadap publik.

Anda dapat lebih menyempurnakan solusi ini untuk merender formulir berbasis web saat URL tulis balik dibuka. Ini dapat diterapkan dengan membuat formulir HTML secara dinamis di fungsi Lambda backend untuk mendukung input informasi tambahan. Jika beban kerja Anda memerlukan sejumlah besar write-back yang membutuhkan throughput atau konkurensi yang lebih tinggi, penyimpanan data yang dibuat khusus seperti Amazon Aurora Edisi yang Kompatibel dengan PostgreSQL mungkin menjadi pilihan yang lebih baik. Untuk informasi lebih lanjut, lihat Memanggil fungsi AWS Lambda dari klaster DB Aurora PostgreSQL. Pembaruan ini kemudian dapat disinkronkan ke dalam tabel Amazon Redshift menggunakan pertanyaan gabungan.

Kesimpulan

Postingan ini menunjukkan cara menggunakan QuickSight bersama dengan Lambda, API Gateway, Secrets Manager, dan Amazon Redshift untuk mengambil data input pengguna dan memperbarui gudang data Amazon Redshift Anda dengan aman tanpa meninggalkan lingkungan QuickSight BI Anda. Solusi ini meniadakan kebutuhan untuk membuat aplikasi eksternal atau antarmuka pengguna untuk pembaruan basis data atau operasi penyisipan, dan mengurangi biaya pengembangan dan pemeliharaan terkait. Panggilan API Gateway juga dapat diamankan menggunakan kunci atau token untuk memastikan hanya panggilan yang berasal dari QuickSight yang diterima oleh API Gateway. Ini akan dibahas dalam posting berikutnya.


Tentang Penulis

Srikanth Baheti adalah Arsitek Solusi Utama Khusus Seluruh Dunia untuk Amazon QuickSight. Dia memulai karirnya sebagai konsultan dan bekerja untuk beberapa organisasi swasta dan pemerintah. Kemudian dia bekerja untuk PerkinElmer Health and Sciences & eResearch Technology Inc, di mana dia bertanggung jawab untuk merancang dan mengembangkan aplikasi web dengan lalu lintas tinggi, pipeline data yang sangat skalabel dan dapat dipelihara untuk platform pelaporan menggunakan layanan AWS dan komputasi Tanpa Server.

Raji Sivasubramaniam adalah Sr. Solutions Architect di AWS, dengan fokus pada Analytics. Raji mengkhususkan diri dalam merancang solusi Enterprise Data Management, Business Intelligence, dan Analytics end-to-end untuk perusahaan Fortune 500 dan Fortune 100 di seluruh dunia. Dia memiliki pengalaman mendalam dalam data dan analitik perawatan kesehatan terintegrasi dengan beragam set data perawatan kesehatan termasuk pasar terkelola, penargetan dokter, dan analitik pasien.

Stempel Waktu:

Lebih dari Data Besar AWS