Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membongkar data dari klaster Amazon Redshift di seluruh akun ke Amazon S3
Andrew Kamel, Amazon Web Services
Ringkasan
Saat Anda menguji aplikasi, akan sangat membantu jika memiliki data produksi di lingkungan pengujian Anda. Menggunakan data produksi dapat memberi Anda penilaian yang lebih akurat tentang aplikasi yang sedang Anda kembangkan.
Pola ini mengekstrak data dari klaster Amazon Redshift di lingkungan produksi ke bucket Amazon Simple Storage Service (Amazon S3) di lingkungan pengembangan di Amazon Web Services ().AWS
Pola langkah-langkah melalui pengaturan akun DEV dan PROD, termasuk yang berikut:
Sumber daya yang dibutuhkan
AWS Identity and Access Management Peran (IAM)
Penyesuaian jaringan untuk subnet, grup keamanan, dan virtual private cloud (VPC) untuk mendukung koneksi Amazon Redshift
Contoh AWS Lambda fungsi dengan runtime Python untuk menguji arsitektur
Untuk memberikan akses ke klaster Amazon Redshift, pola tersebut digunakan AWS Secrets Manager untuk menyimpan kredensil yang relevan. Manfaatnya adalah memiliki semua informasi yang diperlukan untuk terhubung langsung ke cluster Amazon Redshift tanpa perlu mengetahui di mana cluster Amazon Redshift berada. Selain itu, Anda dapat memantau penggunaan rahasia.
Rahasia yang disimpan di Secrets Manager mencakup host cluster Amazon Redshift, nama database, port, dan kredenal yang relevan.
Untuk informasi tentang pertimbangan keamanan saat menggunakan pola ini, lihat bagian Praktik terbaik.
Prasyarat dan batasan
Prasyarat
Cluster Amazon Redshift yang berjalan di akun PROD
Bucket S3 yang dibuat di akun DEV
VPC mengintip antara akun DEV dan PROD, dengan tabel rute yang disesuaikan
Nama host DNS dan resolusi DNS diaktifkan untuk kedua peered VPCs
Batasan
Bergantung pada jumlah data yang ingin Anda kueri, fungsi Lambda mungkin habis waktu.
Jika proses Anda membutuhkan waktu lebih lama daripada batas waktu maksimum Lambda (15 menit), gunakan pendekatan asinkron untuk kode Lambda Anda. Contoh kode untuk pola ini menggunakan pustaka psycopg2
untuk Python, yang saat ini tidak mendukung pemrosesan asinkron. Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat Layanan AWS berdasarkan Wilayah
. Untuk titik akhir tertentu, lihat halaman titik akhir dan kuota Layanan, dan pilih tautan untuk layanan.
Arsitektur
Diagram berikut menunjukkan arsitektur target, dengan akun DEV dan PROD.

Diagram menunjukkan alur kerja berikut:
Fungsi Lambda di akun DEV mengasumsikan peran IAM yang diperlukan untuk mengakses kredensil Amazon Redshift di Secrets Manager di akun PROD.
Fungsi Lambda kemudian mengambil rahasia cluster Amazon Redshift.
Fungsi Lambda di akun DEV menggunakan informasi untuk terhubung ke cluster Amazon Redshift di akun PROD melalui peered. VPCs
Fungsi Lambda kemudian mengirimkan perintah unload untuk menanyakan cluster Amazon Redshift di akun PROD.
Cluster Amazon Redshift di akun PROD mengasumsikan peran IAM yang relevan untuk mengakses bucket S3 di akun DEV.
Cluster Amazon Redshift membongkar data kueri ke bucket S3 di akun DEV.
Meminta data dari Amazon Redshift
Diagram berikut menunjukkan peran yang digunakan untuk mengambil kredenal Amazon Redshift dan terhubung ke cluster Amazon Redshift. Alur kerja diprakarsai oleh fungsi Lambda.

Diagram menunjukkan alur kerja berikut:
CrossAccount-SM-Read-RoleDalam akun DEV mengasumsikanSM-Read-Roledi akun PROD.SM-Read-RolePeran menggunakan kebijakan terlampir untuk mengambil rahasia dari Secrets Manager.Kredensialnya digunakan untuk mengakses kluster Amazon Redshift.
Mengunggah data ke Amazon S3
Diagram berikut menunjukkan proses baca-tulis lintas akun untuk mengekstrak data dan mengunggahnya ke Amazon S3. Alur kerja diprakarsai oleh fungsi Lambda. Pola ini merantai peran IAM di Amazon Redshift. Perintah unload yang berasal dari cluster Amazon Redshift mengasumsikan, dan kemudian CrossAccount-S3-Write-Role mengasumsikan. S3-Write-Role Rantai peran ini memberi Amazon Redshift akses ke Amazon S3.

Alur kerja mencakup langkah-langkah berikut:
CrossAccount-SM-Read-RoleDalam akun DEV mengasumsikanSM-Read-Roledi akun PROD.Ini
SM-Read-Rolemengambil kredensi Amazon Redshift dari Secrets Manager.Fungsi Lambda terhubung ke cluster Amazon Redshift dan mengirimkan kueri.
Cluster Amazon Redshift mengasumsikan.
CrossAccount-S3-Write-RoleCrossAccount-S3-Write-RoleMengasumsikanS3-Write-Roledi akun DEV.Hasil kueri diturunkan ke bucket S3 di akun DEV.
Alat
Layanan AWS
AWS Key Management Service (AWS KMS) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
Amazon Redshift adalah layanan gudang data skala petabyte terkelola di AWS Cloud.
AWS Secrets Managermembantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
Repositori kode
Kode untuk pola ini tersedia di repositori GitHub unload-redshift-to-s3-python
Praktik terbaik
Penafian keamanan
Sebelum Anda menerapkan solusi ini, pertimbangkan rekomendasi keamanan penting berikut:
Ingatlah bahwa menghubungkan akun pengembangan dan produksi dapat meningkatkan cakupan dan menurunkan postur keamanan secara keseluruhan. Kami merekomendasikan untuk menerapkan solusi ini hanya sementara, mengekstrak bagian data yang diperlukan dan kemudian segera menghancurkan sumber daya yang digunakan. Untuk menghancurkan sumber daya, Anda harus menghapus fungsi Lambda, menghapus peran dan kebijakan IAM yang dibuat untuk solusi ini, dan mencabut akses jaringan apa pun yang diberikan di antara akun.
Konsultasikan dengan tim keamanan dan kepatuhan Anda sebelum menyalin data apa pun dari produksi ke lingkungan pengembangan. Informasi identitas pribadi (PII), Informasi kesehatan yang dilindungi (PHI), dan data rahasia atau teregulasi lainnya umumnya tidak boleh disalin dengan cara ini. Salin hanya informasi non-rahasia yang tersedia untuk umum (misalnya, data stok publik dari frontend toko). Pertimbangkan untuk mentokenisasi atau menganonimkan data, atau menghasilkan data uji sintetis, alih-alih menggunakan data produksi bila memungkinkan. Salah satu prinsip AWS keamanan adalah menjauhkan orang dari data. Dengan kata lain, pengembang tidak boleh melakukan operasi di akun produksi.
Batasi akses ke fungsi Lambda di akun pengembangan karena dapat membaca data dari cluster Amazon Redshift di lingkungan produksi.
Untuk menghindari gangguan lingkungan produksi, terapkan rekomendasi berikut:
Gunakan akun pengembangan khusus yang terpisah untuk kegiatan pengujian dan pengembangan.
Menerapkan kontrol akses jaringan yang ketat dan membatasi lalu lintas antar akun hanya untuk apa yang diperlukan.
Memantau dan mengaudit akses ke lingkungan produksi dan sumber data.
Menerapkan kontrol akses dengan hak istimewa paling rendah untuk semua sumber daya dan layanan yang terlibat.
Tinjau dan putar kredenal secara teratur, seperti AWS Secrets Manager rahasia dan kunci akses peran IAM.
Lihat dokumentasi keamanan berikut untuk layanan yang digunakan dalam artikel ini:
Keamanan adalah prioritas utama saat mengakses data dan sumber daya produksi. Selalu ikuti praktik terbaik, terapkan kontrol akses dengan hak istimewa, dan tinjau dan perbarui langkah-langkah keamanan Anda secara teratur.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat rahasia untuk cluster Amazon Redshift. | Untuk membuat rahasia untuk cluster Amazon Redshift, lakukan hal berikut:
| DevOps insinyur |
Buat peran untuk mengakses Secrets Manager. | Untuk membuat peran, lakukan hal berikut:
| DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat peran untuk mengakses bucket S3. | Untuk membuat peran untuk mengakses bucket S3, lakukan hal berikut:
| DevOps insinyur |
Buat peran Amazon Redshift. | Untuk membuat peran Amazon Redshift, lakukan hal berikut:
| DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Menyebarkan fungsi Lambda. | Untuk menerapkan fungsi Lambda di VPC peered, lakukan hal berikut:
| DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Impor sumber daya yang dibutuhkan. | Untuk mengimpor sumber daya yang diperlukan, jalankan perintah berikut:
| Pengembang aplikasi |
Jalankan fungsi handler Lambda. | Fungsi Lambda menggunakan AWS Security Token Service (AWS STS) untuk akses lintas akun dan manajemen kredensi sementara. Fungsi ini menggunakan operasi AssumeRole API untuk sementara mengasumsikan izin peran Untuk menjalankan fungsi Lambda, gunakan kode contoh berikut:
| Pengembang aplikasi |
Dapatkan rahasianya. | Untuk mendapatkan rahasia Amazon Redshift, gunakan kode contoh berikut:
| Pengembang aplikasi |
Jalankan perintah bongkar muat. | Untuk membongkar data ke bucket S3, gunakan kode contoh berikut.
| Pengembang aplikasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Hapus fungsi Lambda. | Untuk menghindari biaya yang tidak direncanakan, hapus sumber daya dan koneksi antara akun DEV dan PROD. Untuk menghapus fungsi Lambda, lakukan hal berikut:
| DevOps insinyur |
Hapus peran dan kebijakan IAM. | Hapus peran dan kebijakan IAM dari akun DEV dan PROD. Di akun DEV, lakukan hal berikut:
Di akun PROD, lakukan hal berikut:
| DevOps insinyur |
Hapus rahasia di Secrets Manager. | Untuk menghapus rahasia, lakukan hal berikut:
| DevOps insinyur |
Hapus peering VPC dan aturan grup keamanan. | Untuk menghapus aturan VPC peering dan grup keamanan, lakukan hal berikut:
| DevOps insinyur |
Hapus data dari bucket S3. | Untuk menghapus data dari Amazon S3, lakukan hal berikut:
| DevOps insinyur |
Bersihkan AWS KMS kunci. | Jika Anda membuat AWS KMS kunci khusus untuk enkripsi, lakukan hal berikut:
| DevOps insinyur |
Tinjau dan hapus CloudWatch log Amazon. | Untuk menghapus CloudWatch log, lakukan hal berikut:
| DevOps insinyur |
Sumber daya terkait
Informasi tambahan
Setelah Anda membongkar data dari Amazon Redshift ke Amazon S3, Anda dapat menganalisisnya dengan menggunakan Amazon Athena.
Amazon Athena adalah layanan kueri data besar yang bermanfaat ketika Anda perlu mengakses data dalam jumlah besar. Anda dapat menggunakan Athena tanpa harus menyediakan server atau database. Athena mendukung kueri yang kompleks, dan Anda dapat menjalankannya pada objek yang berbeda.
Seperti kebanyakan Layanan AWS, manfaat utama menggunakan Athena adalah memberikan fleksibilitas yang besar dalam cara Anda menjalankan kueri tanpa kerumitan tambahan. Saat Anda menggunakan Athena, Anda dapat menanyakan tipe data yang berbeda, seperti CSV dan JSON, di Amazon S3 tanpa mengubah tipe data. Anda dapat meminta data dari berbagai sumber, termasuk di luar AWS. Athena mengurangi kompleksitas karena Anda tidak perlu mengelola server. Athena membaca data langsung dari Amazon S3 tanpa memuat atau mengubah data sebelum Anda menjalankan kueri.