View a markdown version of this page

Mengakses AWS Transform aplikasi web dari VPC - AWS Transformasi

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

Mengakses AWS Transform aplikasi web dari VPC

Saat Anda menggunakan AWS PrivateLink untuk mengakses AWS Transform API secara pribadi dari VPC Anda, aplikasi web memerlukan konfigurasi jaringan tambahan. Ini melayani konten statis (HTML, JavaScript, CSS) melalui CloudFront, yang membutuhkan konektivitas internet. Panggilan API dari aplikasi web melalui titik akhir VPC Anda dan tetap sepenuhnya pribadi.

Panduan ini menunjukkan cara mengonfigurasi jalan keluar internet yang dikontrol dari VPC Anda sehingga aplikasi web dapat memuat sambil menjaga VPC Anda terkunci hanya ke domain yang diperlukan.

Cara kerjanya

Aplikasi AWS Transform web menggunakan dua jalur jaringan:

  • Panggilan API — Saat Anda berinteraksi dengan aplikasi web (memulai pekerjaan, melihat ruang kerja, dan sebagainya), browser mengirimkan permintaan API keapi.transform.region.on.aws. Dengan titik akhir com.amazonaws.region.api.transform VPC dan DNS pribadi diaktifkan, permintaan ini diselesaikan ke alamat IP pribadi di VPC Anda dan tidak pernah meninggalkan jaringan. AWS

  • Konten statis — HTML aplikasi web JavaScript,, dan file CSS disajikan CloudFront melaluitenant-id.transform.region.on.aws. Memuat file-file ini memerlukan konektivitas internet karena pengiriman CloudFront konten hanya tersedia melalui internet publik.

  • Otentikasi - Penggunaan alur masuk AWS IAM Identity Centerregion.signin.aws, yang juga membutuhkan konektivitas internet.

Untuk mengaktifkan aplikasi web sambil menjaga keamanan, Anda membuat jalur keluar terkontrol menggunakan AWS Network Firewall dengan pemfilteran berbasis domain. Hal ini memungkinkan VPC Anda untuk mencapai hanya domain tertentu yang diperlukan oleh aplikasi web sambil memblokir semua lalu lintas internet lainnya.

Arsitektur

Diagram berikut menunjukkan jalur jaringan untuk lalu lintas aplikasi web:

EC2 Instance / Workspace (Private Subnet) | | Route: 0.0.0.0/0 → Network Firewall Endpoint v AWS Network Firewall (Firewall Subnet) | Allows: *.cloudfront.net, *.transform.<region>.on.aws, | <region>.signin.aws, SSO domains, S3 presigned URLs | Blocks: everything else (TLS SNI inspection) | | Route: 0.0.0.0/0 → NAT Gateway v NAT Gateway (Public Subnet) | | Route: 0.0.0.0/0 → Internet Gateway v Internet Gateway → CloudFront Edge Locations
penting

Network Firewall harus melihat kedua arah lalu lintas (symmetric routing) untuk melakukan inspeksi TLS SNI. Anda harus mengonfigurasi rute kembali di subnet NAT Gateway yang mengirimkan lalu lintas yang ditujukan untuk subnet pribadi kembali melalui firewall. Tanpa ini, aturan penyaringan berbasis domain tidak akan berfungsi.

Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki:

  • AWS Akun dengan izin untuk membuat sumber daya VPC, Network Firewall, dan NAT Gateways.

  • VPC dengan subnet pribadi tempat instance atau beban kerja Anda berjalan.

  • Gateway internet yang terpasang pada VPC (atau izin untuk membuatnya).

  • Titik akhir AWS Transform VPC com.amazonaws.region.api.transform dengan DNS pribadi diaktifkan. Ini adalah titik akhir yang digunakan oleh klien browser aplikasi web. Untuk petunjuk tentang cara membuat titik akhir, lihatAWS Transform dan titik akhir antarmuka (AWS PrivateLink).

Mengonfigurasi kebijakan titik akhir VPC

Jika titik akhir com.amazonaws.region.api.transform VPC Anda memiliki kebijakan titik akhir kustom, Anda harus menambahkan pernyataan yang memungkinkan operasi. AWS Transform Tanpa ini, aplikasi web tidak akan dapat melakukan panggilan API melalui titik akhir.

Tambahkan pernyataan berikut ke kebijakan titik akhir VPC Anda. Ganti AWS_TRANSFORM_PROFILE_ARN dengan profil AWS Transform layanan Anda ARN, yang dapat Anda temukan di AWS Transform konsol pada halaman Pengaturan.

{ "Statement": [ { "Sid": "AllowAWSTransform", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": [ "AWS_TRANSFORM_PROFILE_ARN" ] } } } ] }
catatan

Jika titik akhir VPC Anda menggunakan kebijakan default (akses penuh), tidak diperlukan perubahan dan Anda dapat melewati langkah ini.

Menyiapkan jalan keluar internet yang dikendalikan

Selesaikan langkah-langkah berikut untuk mengkonfigurasi Network Firewall dengan pemfilteran berbasis domain untuk aplikasi web. AWS Transform

Langkah 1: Buat subnet firewall

Buat subnet kecil /28 yang didedikasikan untuk titik akhir Network Firewall. Subnet ini harus berada di Availability Zone yang sama dengan subnet pribadi Anda.

aws ec2 create-subnet \ --vpc-id your-vpc-id \ --cidr-block firewall-subnet-cidr \ --availability-zone your-az \ --region region

Langkah 2: Buat subnet publik untuk NAT Gateway

aws ec2 create-subnet \ --vpc-id your-vpc-id \ --cidr-block public-subnet-cidr \ --availability-zone your-az \ --region region

Langkah 3: Konfigurasikan tabel rute subnet publik

Buat tabel rute untuk subnet publik yang mengarahkan lalu lintas internet ke gateway internet.

# Create route table PUB_RTB=$(aws ec2 create-route-table \ --vpc-id your-vpc-id \ --region region \ --query 'RouteTable.RouteTableId' --output text) # Add default route to internet gateway aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-block 0.0.0.0/0 \ --gateway-id your-igw-id \ --region region # Associate with public subnet aws ec2 associate-route-table \ --route-table-id $PUB_RTB \ --subnet-id public-subnet-id \ --region region

Langkah 4: Buat NAT Gateway

# Allocate an Elastic IP EIP=$(aws ec2 allocate-address --domain vpc \ --region region --query 'AllocationId' --output text) # Create NAT Gateway in the public subnet NAT_ID=$(aws ec2 create-nat-gateway \ --subnet-id public-subnet-id \ --allocation-id $EIP \ --region region \ --query 'NatGateway.NatGatewayId' --output text) # Wait for NAT Gateway to become available (~2 minutes) aws ec2 wait nat-gateway-available \ --nat-gateway-ids $NAT_ID --region region

Langkah 5: Buat grup aturan Network Firewall

Buat grup aturan stateful yang memungkinkan lalu lintas hanya ke domain yang diperlukan oleh aplikasi web. AWS Transform

aws network-firewall create-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL \ --capacity 100 \ --rule-group '{ "StatefulRuleOptions": { "RuleOrder": "STRICT_ORDER" }, "RulesSource": { "RulesSourceList": { "Targets": [ ".cloudfront.net", ".transform.region.on.aws", "region.signin.aws", ".s3.region.amazonaws.com", "oidc.region.amazonaws.com", "portal.sso.region.amazonaws.com", "assets.sso-portal.region.amazonaws.com", "directory-id.awsapps.com" ], "TargetTypes": ["TLS_SNI", "HTTP_HOST"], "GeneratedRulesType": "ALLOWLIST" } } }' \ --region region

Ganti region dengan AWS Wilayah tempat AWS Transform profil Anda diinstal (misalnya,us-east-1). Ganti directory-id dengan ID direktori Pusat Identitas IAM Anda (misalnya,d-1234567890). Anda dapat menemukan ID direktori Anda di konsol Pusat Identitas IAM.

Tabel berikut menjelaskan domain yang diizinkan.

Domain Tujuan
.cloudfront.net CloudFront CDN - melayani aset statis aplikasi web (JavaScript, CSS, gambar)
.transform.region.on.aws URL penyewa aplikasi web — browser memuat halaman awal dari domain ini melalui CloudFront
region.signin.aws Halaman pengalihan masuk SSO
.s3.region.amazonaws.com URL presigned S3 — unggahan dan unduhan artefak
oidc.region.amazonaws.com Pertukaran token OIDC untuk otentikasi SSO
portal.sso.region.amazonaws.com Halaman login portal SSO
assets.sso-portal.region.amazonaws.com Aset statis portal SSO (CSS, JavaScript)
directory-id.awsapps.com Portal Pusat Identitas IAM untuk organisasi Anda
catatan

.cloudfront.net.rproxy.govskope.caWildcard memungkinkan lalu lintas ke CloudFront distribusi apa pun, tidak hanya aplikasi AWS Transform web. Filter domain yang lebih sempit tidak dimungkinkan karena IP CloudFront edge dibagi di seluruh distribusi dan inspeksi TLS SNI tidak dapat membedakan distribusi individu di belakang domain yang sama.

catatan

Panggilan API untuk api.transform.region.on.aws melewati AWS PrivateLink dan tidak memerlukan jalan keluar internet. Mereka tidak terpengaruh oleh firewall.

Langkah 6: Buat kebijakan firewall

Kebijakan harus menggunakan evaluasi STRICT_ORDER aturan drop_established sebagai tindakan default. Ini memastikan bahwa lalu lintas apa pun yang tidak cocok dengan daftar yang diizinkan dijatuhkan.

# Get the rule group ARN RG_ARN=$(aws network-firewall describe-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --region region \ --query 'RuleGroupResponse.RuleGroupArn' --output text) # Create the firewall policy aws network-firewall create-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --firewall-policy "{ \"StatelessDefaultActions\": [\"aws:forward_to_sfe\"], \"StatelessFragmentDefaultActions\": [\"aws:forward_to_sfe\"], \"StatefulRuleGroupReferences\": [ { \"ResourceArn\": \"$RG_ARN\", \"Priority\": 1 } ], \"StatefulEngineOptions\": { \"RuleOrder\": \"STRICT_ORDER\" }, \"StatefulDefaultActions\": [\"aws:drop_established\", \"aws:alert_established\"] }" \ --region region

Langkah 7: Buat Network Firewall

# Get the policy ARN FW_POLICY_ARN=$(aws network-firewall describe-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --region region \ --query 'FirewallPolicyResponse.FirewallPolicyArn' --output text) # Create the firewall aws network-firewall create-firewall \ --firewall-name transform-webapp-firewall \ --firewall-policy-arn $FW_POLICY_ARN \ --vpc-id your-vpc-id \ --subnet-mappings SubnetId=firewall-subnet-id \ --region region # Wait for the firewall to become READY (3-5 minutes) while true; do STATUS=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --region region \ --query 'FirewallStatus.Status' --output text) echo "Status: $STATUS" if [ "$STATUS" = "READY" ]; then break; fi sleep 15 done

Langkah 8: Dapatkan ID endpoint firewall

FW_ENDPOINT=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --region region \ --query "FirewallStatus.SyncStates.\"your-az\".Attachment.EndpointId" \ --output text) echo "Firewall endpoint: $FW_ENDPOINT"

Langkah 9: Konfigurasikan tabel rute subnet firewall

Rutekan lalu lintas yang terikat internet dari subnet firewall ke NAT Gateway.

FW_RTB=$(aws ec2 create-route-table \ --vpc-id your-vpc-id \ --region region \ --query 'RouteTable.RouteTableId' --output text) aws ec2 create-route \ --route-table-id $FW_RTB \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id $NAT_ID \ --region region aws ec2 associate-route-table \ --route-table-id $FW_RTB \ --subnet-id firewall-subnet-id \ --region region

Langkah 10: Perbarui tabel rute subnet pribadi

Rutekan semua lalu lintas yang terikat internet dari subnet pribadi melalui firewall.

aws ec2 create-route \ --route-table-id private-subnet-route-table-id \ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

Jika rute default sudah ada, gunakan replace-route sebagai pengganticreate-route.

Langkah 11: Tambahkan rute kembali simetris (wajib)

penting

Langkah ini sangat penting. Network Firewall menggunakan inspeksi TLS SNI dan harus melihat kedua arah koneksi TCP. Tambahkan rute di tabel rute subnet NAT Gateway yang mengirimkan lalu lintas kembali yang ditujukan untuk subnet pribadi kembali melalui firewall.

aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-block private-subnet-cidr \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

Ganti private-subnet-cidr dengan blok CIDR subnet pribadi Anda (misalnya,10.0.144.0/20).

Tanpa routing simetris, firewall hanya melihat satu arah lalu lintas. Mesin inspeksi TLS tidak dapat mengekstrak Indikasi Nama Server (SNI) dari jabat tangan TLS, dan semua aturan berbasis domain akan gagal secara diam-diam.

Langkah 12: Hapus rute default IPv6 (jika ada)

Jika tabel rute subnet pribadi memiliki rute default IPv6 (::/0) yang menunjuk langsung ke gateway internet, itu akan melewati firewall untuk tujuan. IPv6-capable Hapus itu:

aws ec2 delete-route \ --route-table-id private-subnet-route-table-id \ --destination-ipv6-cidr-block ::/0 \ --region region

Verifikasi

Dari instance di subnet pribadi, verifikasi konfigurasi:

# Should SUCCEED - web application content via CloudFront (allowed) curl -vL --connect-timeout 15 \ 'https://tenant-id.transform.region.on.aws' # Should SUCCEED - API via PrivateLink (does not use firewall) curl -v --connect-timeout 15 \ 'https://api.transform.region.on.aws/' # Should FAIL - non-allowlisted domain (blocked by firewall) curl -v --connect-timeout 15 'https://www.example.com' # Expected: TLS connection error (firewall drops after SNI inspection)

Pemecahan masalah

Panggilan API ke api.transform diblokir oleh firewall Anda

Domain api.transform.region.on.aws harus menyelesaikan ke alamat IP pribadi melalui titik akhir VPC dan tidak boleh mencapai firewall internet Anda.

  • Verifikasi bahwa Anda telah membuat com.amazonaws.region.api.transform titik akhir.

  • Verifikasi DNS pribadi diaktifkan pada titik akhir:

    aws ec2 describe-vpc-endpoints \ --filters "Name=service-name,Values=com.amazonaws.region.api.transform" \ --query 'VpcEndpoints[*].[State,PrivateDnsEnabled]' \ --output table

    Output yang diharapkan: available | True

Aplikasi web tidak memuat (batas waktu koneksi)
  • Verifikasi tabel rute subnet pribadi memiliki 0.0.0.0/0 rute yang menunjuk ke titik akhir firewall.

  • Verifikasi bahwa tabel rute subnet firewall memiliki 0.0.0.0/0 rute yang menunjuk ke NAT Gateway.

  • Verifikasi NAT Gateway dalam available keadaan.

Non-allowlisted Domain tidak diblokir
  • Periksa ::/0 rute IPv6 yang menunjuk ke gateway internet. Ini melewati firewall. Hapus (Langkah 12).

  • Verifikasi routing simetris dikonfigurasi. Tabel rute subnet NAT Gateway harus memiliki rute kembali melalui firewall untuk CIDR subnet pribadi (Langkah 11).

  • Verifikasi kebijakan firewall yang digunakan STRICT_ORDER dengan drop_established dan alert_established sebagai tindakan default.

Pertimbangan Biaya

Sumber daya Perkiraan biaya
Network Firewall ~ $0. 395/hr (~$288/month) per Availability Zone
Gerbang NAT ~ $0. 045/hr (~$33/month) +biaya pemrosesan data
IP elastis (IPv4 publik) ~ $0. 005/hr (~ $3. 60/month)
Pemrosesan data Network Firewall $0. 065/GB
Pemrosesan data NAT Gateway $0. 045/GB

Perkiraan biaya dasar kira-kira $ 325/month untuk satu penyebaran Availability Zone. Untuk penerapan produksi, gunakan firewall, NAT Gateway, dan subnet terkait di setiap Availability Zone di mana subnet pribadi ada.

Pembersihan

Untuk menghapus semua sumber daya yang dibuat oleh panduan ini, jalankan perintah berikut dalam urutan terbalik. Ganti placeholder dengan ID sumber daya dari penerapan Anda. Anda dapat menemukan nilai-nilai ini di AWS Management Console atau dengan menggunakan describe perintah dari langkah-langkah penyiapan.

# Remove return route from NAT Gateway subnet aws ec2 delete-route --route-table-id pub-rtb-id \ --destination-cidr-block private-subnet-cidr \ --region region # Remove route from private subnet aws ec2 delete-route \ --route-table-id private-subnet-route-table-id \ --destination-cidr-block 0.0.0.0/0 --region region # Delete Network Firewall (takes ~5 minutes) aws network-firewall delete-firewall \ --firewall-name transform-webapp-firewall \ --region region # Delete firewall policy and rule group aws network-firewall delete-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --region region aws network-firewall delete-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --region region # Delete NAT Gateway (wait ~5 minutes for full deletion) aws ec2 delete-nat-gateway --nat-gateway-id nat-gateway-id \ --region region # Release Elastic IP aws ec2 release-address --allocation-id eip-allocation-id \ --region region # Delete subnets aws ec2 delete-subnet --subnet-id firewall-subnet-id \ --region region aws ec2 delete-subnet --subnet-id public-subnet-id \ --region region