Konsolidasikan pembuatan URL presigned Amazon S3 dan unduhan objek dengan menggunakan titik akhir yang terkait dengan alamat IP statis - AWS Prescriptive Guidance

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

Konsolidasikan pembuatan URL presigned Amazon S3 dan unduhan objek dengan menggunakan titik akhir yang terkait dengan alamat IP statis

Song Jin, Eunhye Jo, dan Jun Soung Lee, Amazon Web Services

Ringkasan

Pola ini menyederhanakan akses ke Amazon Simple Storage Service (Amazon S3) dengan membuat aman, custom presigned untuk unduhan objek. URLs Solusinya menyediakan titik akhir tunggal dengan domain unik dan alamat IP statis. Ini disesuaikan untuk pelanggan yang memerlukan konsolidasi titik akhir API dan Amazon S3 di bawah domain terpadu dengan alamat IP statis. Kasus penggunaan melibatkan pengguna yang mengikuti kebijakan firewall IP dan domain allowlist, membatasi akses API ke domain dan alamat IP tertentu.

Arsitektur menggunakan kunci Layanan AWS, termasuk AWS Global Accelerator, Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink, dan Amazon S3. Desain ini memusatkan API untuk menghasilkan presigned URLs dan endpoint Amazon S3 di bawah satu domain, ditautkan ke akselerator dengan dua alamat IP statis. Akibatnya, pengguna dapat dengan mudah meminta presigned URLs dan men-download objek Amazon S3 melalui endpoint domain terpadu dengan alamat IP statis.

Arsitektur ini sangat bermanfaat bagi pelanggan dengan kebijakan atau persyaratan kepatuhan yang ketat, seperti yang ada di sektor publik, medis, dan keuangan.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • Zona yang dihosting publik untuk nama domain kustom Anda

  • Domain yang diimpor AWS Certificate Manager (ACM) sesuai Wilayah AWS pilihan Anda

Batasan

  • Nama bucket Amazon S3 harus cocok dengan nama domain titik akhir. Persyaratan ini untuk memastikan bahwa titik akhir Amazon S3 dapat dilayani melalui titik akhir API tunggal.

  • Nama domain kustom yang digunakan dalam API Gateway harus sejajar dengan nama domain dari titik akhir API tunggal.

  • Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat AWS Layanan menurut Wilayah. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.

Arsitektur

Diagram berikut menunjukkan arsitektur target dan alur kerja untuk pola ini.

Komponen dan alur kerja untuk pembuatan URL dan pengunduhan objek yang telah ditetapkan sebelumnya.

Diagram menggambarkan konsep dan alur kerja berikut:

  1. Pengguna memulai permintaan untuk menghasilkan URL presigned dengan menggunakan endpoint kustom yang disajikan melalui AWS Global Accelerator, menggunakan nama domain kustom dan alamat IP terkait.

  2. Fungsi Lambda menghasilkan URL yang telah ditetapkan sebelumnya, menunjuk ke titik akhir kustom. Ini merespons dengan pengalihan 301 yang berisi URL presigned yang dihasilkan. Melalui URL presigned yang dialihkan, pengguna mengunduh objek secara otomatis dengan menggunakan titik akhir kustom yang disajikan melalui Global Accelerator.

Komponen arsitektur keseluruhan untuk pembuatan URL presigned dan alur kerja pengunduhan objek adalah sebagai berikut:

  • Penyediaan alamat IP statis oleh Global Accelerator.

  • Pendaftaran alias akselerator sebagai catatan A ke zona host publik Amazon Route 53 dengan nama domain khusus.

  • Pembuatan bucket Amazon S3 dengan nama bucket yang cocok dengan nama domain kustom terdaftar.

  • Pembuatan titik akhir VPC untuk API Gateway dan layanan Amazon S3.

  • Konfigurasi Application Load Balancer yang menghadap ke internal untuk terhubung ke Global Accelerator.

  • Penetapan nama domain kustom untuk API Gateway dengan sertifikat ACM terlampir.

  • Penerapan API Gateway pribadi yang terintegrasi dengan fungsi Lambda.

  • Fungsi Lambda dilengkapi dengan peran AWS Identity and Access Management (IAM) yang dilampirkan (dengan GetObjectizin).

Alat

Layanan AWS

  • Amazon API Gateway membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.

  • Application Load Balancer mendistribusikan lalu lintas aplikasi yang masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud (Amazon EC2), di beberapa Availability Zone.

  • AWS Certificate Manager (ACM) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi Anda. AWS

  • AWS Cloud Development Kit (AWS CDK)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.

  • AWS Global Acceleratoradalah layanan global yang mendukung titik akhir dalam banyak Wilayah AWS. Anda dapat membuat akselerator yang mengarahkan lalu lintas ke titik akhir optimal melalui jaringan AWS global. Hal ini meningkatkan ketersediaan dan performa aplikasi internet Anda yang digunakan oleh khalayak global.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • 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.

  • AWS PrivateLinkmembantu Anda membuat koneksi pribadi searah dari cloud pribadi virtual Anda (VPCs) ke layanan di luar VPC.

  • Amazon Route 53 adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

Alat lainnya

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

Repositori kode

Anda dapat menerapkan pola ini dengan menggunakan AWS CDK atau Terraform berdasarkan preferensi Anda. Bagian Epik berisi instruksi untuk kedua metode penerapan. Kode untuk pola ini tersedia di GitHub repositori berikut:

Praktik terbaik

  • Untuk meningkatkan keamanan di lingkungan produksi, sangat penting untuk menerapkan mekanisme otorisasi, seperti Amazon Cognito, untuk membatasi akses ke PresignedUrl API generasi.

  • Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat Berikan hak istimewa terkecil dan praktik terbaik Keamanan dalam dokumentasi IAM.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Tentukan nama domain.

Tentukan nama domain publik untuk titik akhir Amazon S3 terpadu. Nama domain juga digunakan sebagai nama bucket Amazon S3.

Administrator AWS, Administrator jaringan

Membuat zona yang di-hosting publik.

Buat zona yang dihosting publik di Amazon Route 53. Nama domainnya harus sesuai dengan nama domain yang digunakan di API Gateway.

Administrator AWS, Administrator jaringan

Siapkan sertifikat SSL.

Gunakan AWS Certificate Manager (ACM) untuk meminta atau mengimpor sertifikat SSL untuk domain aplikasi web Anda.

Administrator AWS, Administrator jaringan
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan lingkungan pengembangan Terraform.

Untuk mengatur lingkungan pengembangan, lakukan hal berikut:

  1. Instal Terraform versi 1.0 atau yang lebih baru.

  2. Kloning repositori GitHub s3- presignedurl-staticips-endpoint-with -terraform dengan menjalankan perintah berikut di jendela terminal:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform.git

Administrator AWS, Administrator cloud

Memodifikasi .tfvars dan provider.tffile.

  1. Buat .tfvars file yang diperlukan Buat apg.tfvars file di direktori 1.vpc_alb_ga dan 2.apigw_s3_lambda direktori. File-file ini akan berisi nilai variabel khusus lingkungan Anda.

    • Untuk1.vpc_alb_ga/apg.tfvars, buat file dengan template berikut:

      hcl environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
    • Untuk2.apigw_s3_lambda/apg.tfvars, buat file dengan template berikut (Anda harus memperbarui vpc_id setelah menyelesaikan langkah 1):

      hcl vpc_id = "vpc-xxxxxxxxx" # Update this with the VPC ID output from step 1 environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
  2. Ubah provider.tf file Di folder 1.vpc_alb_ga dan 2.apigw_s3_lambda folder, edit provider.tf file agar sesuai dengan AWS konfigurasi lokal Anda:

    hcl provider "aws" { region = "ap-northeast-2" # Change to your preferred region profile = "apg" # Change to your AWS profile name }

Perhatikan hal berikut:

  • Ganti nilai placeholder dalam .tfvars file dengan nilai aktual Anda.

  • Setelah menyelesaikan penerapan Terraform (1.vpc_alb_ga) pertama, perbarui vpc_id nilainya dengan ID VPC 2.apigw_s3_lambda/apg.tfvars dari output.

  • Pastikan bahwa nama AWS profil Anda dalam provider.tf file cocok dengan profil yang ada di ~/.aws/credentials file Anda.

  • Nilai domain harus sesuai dengan domain zona host Route 53 Anda.

  • s3_bucket_prefixGabungan dengan domain akan membentuk nama bucket Amazon S3 Anda (misalnya,your-bucket-prefix.your-domain.com).

  • Jika Anda berubahaws_region, Anda mungkin juga perlu memperbarui zona ketersediaan hardcode dalam main.tf file agar sesuai dengan pilihan Anda. Wilayah AWS

Administrator AWS, Administrator cloud

Penyediaan sumber daya jaringan.

Untuk menyediakan sumber daya jaringan, jalankan perintah berikut:

cd ./2.vpc_alb_ga terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars

Selama eksekusi apply perintah, ketik ya saat diminta.

Administrator AWS, Administrator cloud

Penyediaan API Gateway, Amazon S3, dan Lambda.

Untuk menyediakan sumber daya jaringan, gunakan perintah berikut:

cd ./2.apigw_s3_lambda terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars
Administrator AWS, Administrator cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Mengatur lingkungan AWS CDK pengembangan.

Untuk mengatur lingkungan pengembangan, lakukan hal berikut:

  1. Instal AWS CDK.

  2. Kloning repositori GitHub s3- presignedurl-staticips-endpoint-with -cdk dengan menjalankan perintah berikut di jendela terminal:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk.git

Administrator AWS, Administrator cloud

Konfigurasikan pengaturan domain dalam config/index.ts file.

Untuk mengedit opsi variabel konstan, gunakan perintah berikut:

export const options = { certificateArn: '{arn of the acm which created before}', dnsAttr: { zoneName: '{public hosted zone name}', hostedZoneId: 'hosted zone Id', }, domainNamePrefix: '{Prefix for the domain}', presignPath: 'presign', objectsPath: 'objects', };

Dalam perintah, ganti setiap placeholder dengan informasi Anda sendiri:

  • Ganti '{arn of the acm which created before}' dengan sertifikat ACM Anda Nama Sumber Daya Amazon (ARN).

  • Ganti '{public hosted zone name}' dengan nama domain Anda.

  • Ganti 'hosted zone Id' dengan ID zona yang dihosting Route 53 Anda.

  • Ganti '{Prefix for the domain}' dengan awalan domain yang ingin Anda gunakan.

  • Secara opsional, modifikasi 'presign' dan 'objects' jalur jika diperlukan untuk kasus penggunaan spesifik Anda.

Administrator AWS, Administrator cloud

Menyebarkan tumpukan.

Untuk menyebarkan dua tumpukan, satu untuk virtual private cloud (VPC) dan satu lagi untuk aplikasi, gunakan perintah berikut:

$ npm install $ cdk synth $ cdk deploy --all
Administrator AWS, Administrator cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Verifikasi alamat IP titik akhir.

Untuk memverifikasi bahwa domain untuk pola ini memiliki alamat IP statis, gunakan perintah berikut:

nslookup ${s3-bucket-prefix}.${domain}
Administrator jaringan

Unggah file pengujian yang nantinya dapat Anda unduh.

Unggah file pengujian ke '/objects' folder di bucket Amazon S3.

Administrator AWS, Administrator cloud

Memanggil API untuk menghasilkan URL presigned.

Untuk menghasilkan URL yang telah ditetapkan sebelumnya, panggil URL dari browser atau klien API (misalnya, Tukang Pos) menggunakan format berikut:

https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}

Ganti nilai placeholder di ${s3-bucket-prefix} dan ${domain} dengan nilai yang Anda tetapkan pada langkah sebelumnya.

Pemilik aplikasi

Periksa hasilnya.

Hasil yang diharapkan adalah Anda harus menerima kode status pengalihan 301 (Dipindahkan Secara Permanen). Respons ini akan berisi URL yang telah ditetapkan sebelumnya, yang akan secara otomatis memulai pengunduhan file pengujian Anda.

Insinyur uji
TugasDeskripsiKeterampilan yang dibutuhkan

Hancurkan sumber daya API Gateway, Amazon S3, dan Lambda.

Untuk menghapus sumber daya, gunakan perintah berikut:

cd ./2.apigw_s3_lambda terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrator AWS, Administrator cloud

Hancurkan sumber daya jaringan.

Untuk menghapus sumber daya jaringan, gunakan perintah berikut:

cd ./1.vpc_alb_ga terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrator AWS, Administrator cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Hancurkan tumpukan.

Untuk menghancurkan tumpukan VPC dan aplikasi, gunakan perintah berikut:

$ cdk destroy --all
Administrator AWS, Administrator cloud

Kosongkan dan hapus ember Amazon S3.

Kosongkan dan hapus objek bucket Amazon S3 dan log bucket Amazon S3 yang tidak dihapus secara default.

Nama bucket Amazon S3 adalah ${s3-bucket-prefix}.${domain} dan. ${s3-bucket-prefix}.${domain}-logs

Jika Anda lebih suka menggunakan AWS Command Line Interface (AWS CLI) untuk menghapus bucket, gunakan perintah berikut:

$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force $ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force

Ganti ${s3-bucket-prefix} dan ${domain} dengan nilai yang Anda tetapkan pada langkah sebelumnya. , /p>

Administrator AWS, Administrator cloud

Sumber daya terkait

AWS Blog