Siapkan akses pribadi ke bucket Amazon S3 melalui titik akhir VPC - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan akses pribadi ke bucket Amazon S3 melalui titik akhir VPC

Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama, dan Joaquin Rinaudo, Amazon Web Services

Ringkasan

Di Amazon Simple Storage Service (Amazon S3), URLs presigned memungkinkan Anda berbagi file dengan ukuran arbitrer dengan pengguna target. Secara default, Amazon S3 presigned dapat URLs diakses dari internet dalam jangka waktu kedaluwarsa, yang membuatnya nyaman digunakan. Namun, lingkungan perusahaan seringkali memerlukan akses ke Amazon S3 yang ditetapkan URLs untuk dibatasi hanya pada jaringan pribadi.

Pola ini menyajikan solusi tanpa server untuk berinteraksi secara aman dengan objek S3 dengan menggunakan presigned URLs dari jaringan pribadi tanpa traversal internet. Dalam arsitektur, pengguna mengakses Application Load Balancer melalui nama domain internal. Lalu lintas dirutekan secara internal melalui Amazon API Gateway dan titik akhir virtual private cloud (VPC) untuk bucket S3. AWS Lambda Fungsi ini menghasilkan presigned URLs untuk unduhan file melalui titik akhir VPC pribadi, yang membantu meningkatkan keamanan dan privasi untuk data sensitif.

Prasyarat dan batasan

Prasyarat

  • VPC yang menyertakan subnet yang digunakan dalam Akun AWS yang terhubung ke jaringan perusahaan (misalnya, melalui). AWS Direct Connect

Batasan

  • Bucket S3 harus memiliki nama yang sama dengan domain, jadi sebaiknya Anda memeriksa aturan penamaan bucket Amazon S3.

  • Contoh arsitektur ini tidak menyertakan fitur pemantauan untuk infrastruktur yang digunakan. Jika kasus penggunaan Anda memerlukan pemantauan, pertimbangkan untuk menambahkan layanan AWS pemantauan.

  • Contoh arsitektur ini tidak menyertakan validasi masukan. Jika kasus penggunaan Anda memerlukan validasi input dan tingkat keamanan yang lebih tinggi, pertimbangkan AWS WAF untuk menggunakan untuk melindungi API Anda.

  • Contoh arsitektur ini tidak menyertakan akses logging dengan Application Load Balancer. Jika kasus penggunaan Anda memerlukan pencatatan akses, pertimbangkan untuk mengaktifkan log akses penyeimbang beban.

Versi

  • Python versi 3.11 atau yang lebih baru

  • Terraform versi 1.6 atau yang lebih baru

Arsitektur

Tumpukan teknologi target

Layanan AWS berikut digunakan dalam tumpukan teknologi target:

  • Amazon S3 adalah layanan penyimpanan inti yang digunakan untuk mengunggah, mengunduh, dan menyimpan file dengan aman.

  • Amazon API Gateway mengekspos sumber daya dan titik akhir untuk berinteraksi dengan bucket S3. Layanan ini berperan dalam menghasilkan presigned URLs untuk mengunduh atau mengunggah data.

  • AWS Lambdamenghasilkan presigned URLs untuk men-download file dari Amazon S3. Fungsi Lambda dipanggil oleh API Gateway.

  • Amazon VPC menyebarkan sumber daya dalam VPC untuk menyediakan isolasi jaringan. VPC mencakup subnet dan tabel routing untuk mengontrol arus lalu lintas.

  • Application Load Balancer merutekan lalu lintas masuk ke API Gateway atau ke endpoint VPC bucket S3. Ini memungkinkan pengguna dari jaringan perusahaan untuk mengakses sumber daya secara internal.

  • Titik akhir VPC untuk Amazon S3 memungkinkan komunikasi langsung dan pribadi antara sumber daya di VPC dan Amazon S3 tanpa melintasi internet publik.

  • AWS Identity and Access Management (IAM) mengontrol akses ke AWS sumber daya. Izin disiapkan untuk memastikan interaksi yang aman dengan API dan layanan lainnya.

Arsitektur target

Menyiapkan akses pribadi ke bucket S3 melalui endpoing VPC

Diagram ini menggambarkan hal sebagai berikut:

  1. Pengguna dari jaringan perusahaan dapat mengakses Application Load Balancer melalui nama domain internal. Kami berasumsi bahwa ada koneksi antara jaringan perusahaan dan subnet intranet di Akun AWS (misalnya, melalui koneksi). AWS Direct Connect

  2. Application Load Balancer merutekan lalu lintas masuk ke API Gateway untuk menghasilkan presigned URLs untuk mengunduh atau mengunggah data ke Amazon S3, atau ke titik akhir VPC bucket S3. Dalam kedua skenario, permintaan dirutekan secara internal dan tidak perlu melintasi internet.

  3. API Gateway mengekspos sumber daya dan titik akhir untuk berinteraksi dengan bucket S3. Dalam contoh ini, kami menyediakan titik akhir untuk mengunduh file dari bucket S3, tetapi ini dapat diperluas untuk menyediakan fungsionalitas unggah juga.

  4. Fungsi Lambda menghasilkan URL yang telah ditetapkan sebelumnya untuk mengunduh file dari Amazon S3 dengan menggunakan nama domain Application Load Balancer, bukan domain Amazon S3 publik.

  5. Pengguna menerima URL yang telah ditetapkan sebelumnya dan menggunakannya untuk mengunduh file dari Amazon S3 dengan menggunakan Application Load Balancer. Penyeimbang beban menyertakan rute default untuk mengirim lalu lintas yang tidak dimaksudkan untuk API menuju titik akhir VPC bucket S3.

  6. Titik akhir VPC merutekan URL yang telah ditetapkan sebelumnya dengan nama domain kustom ke bucket S3. Bucket S3 harus memiliki nama yang sama dengan domain.

Otomatisasi dan skala

Pola ini menggunakan Terraform untuk menyebarkan infrastruktur dari repositori kode ke file. Akun AWS

Alat

Alat

  • Python adalah bahasa pemrograman komputer tujuan umum.

  • Terraform adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

  • AWS Command Line Interface (AWS CLI) adalah alat open source yang membantu Anda berinteraksi dengan AWS layanan melalui perintah di shell baris perintah Anda.

Repositori kode

Kode untuk pola ini tersedia dalam GitHub repositori di private-s3-vpce. https://github.com/aws-samples/

Praktik terbaik

Contoh arsitektur untuk pola ini menggunakan izin IAM untuk mengontrol akses ke API. Siapa pun yang memiliki kredensil IAM yang valid dapat memanggil API. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, Anda mungkin ingin menggunakan mekanisme kontrol akses yang berbeda.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Dapatkan AWS kredensil.

Tinjau AWS kredensi Anda dan akses Anda ke akun Anda. Untuk petunjuk, lihat Pengaturan konfigurasi dan file kredensyal dalam AWS CLI dokumentasi.

AWS DevOps, AWS Umum

Kloning repositori.

Kloning GitHub repositori yang disediakan dengan pola ini:

git clone https://github.com/aws-samples/private-s3-vpce
AWS DevOps, AWS Umum

Konfigurasikan variabel.

  1. Di komputer Anda, di GitHub repositori, buka folderterraform:

    cd terraform
  2. Buka example.tfvars file dan sesuaikan parameter sesuai dengan kebutuhan Anda.

AWS DevOps, AWS Umum

Menyebarkan solusi.

  1. Di terraform folder, jalankan Terraform dan teruskan variabel yang Anda sesuaikan:

    terraform apply -var-file="example.tfvars"
  2. Konfirmasikan bahwa sumber daya yang ditampilkan dalam diagram arsitektur berhasil digunakan.

AWS DevOps, AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat file uji.

Unggah file ke Amazon S3 untuk membuat skenario pengujian untuk unduhan file. Anda dapat menggunakan konsol Amazon S3 atau perintah berikut: AWS CLI

aws s3 cp /path/to/testfile s3://your-bucket-name/testfile
AWS DevOps, AWS Umum

Uji fungsionalitas URL yang telah ditetapkan sebelumnya.

  1. Kirim permintaan ke Application Load Balancer untuk membuat URL presigned untuk file pengujian dengan menggunakan awscurl:

    awscurl https://your-domain-name/api/get_url?key=testfile

    Langkah ini membuat tanda tangan yang valid dari kredensil Anda, yang akan divalidasi oleh API Gateway.

  2. Parse link dari respon yang Anda terima dari langkah sebelumnya, dan buka URL presigned untuk men-download file.

AWS DevOps, AWS Umum

Bersihkan.

Pastikan untuk menghapus sumber daya saat tidak lagi diperlukan:

terraform destroy
AWS DevOps, AWS Umum

Pemecahan Masalah

IsuSolusi

Nama kunci objek S3 dengan karakter khusus seperti tanda angka (#) memecah parameter URL dan menyebabkan kesalahan.

Encode parameter URL dengan benar, dan pastikan bahwa nama kunci objek S3 mengikuti pedoman Amazon S3.

Sumber daya terkait

Amazon S3:

Amazon API Gateway:

Application Load Balancer: