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 ke
api.transform.. Dengan titik akhirregion.on.awscom.amazonaws.VPC dan DNS pribadi diaktifkan, permintaan ini diselesaikan ke alamat IP pribadi di VPC Anda dan tidak pernah meninggalkan jaringan. AWSregion.api.transform -
Konten statis — HTML aplikasi web JavaScript,, dan file CSS disajikan CloudFront melalui
. Memuat file-file ini memerlukan konektivitas internet karena pengiriman CloudFront konten hanya tersedia melalui internet publik.tenant-id.transform.region.on.aws -
Otentikasi - Penggunaan alur masuk AWS IAM Identity Center
, yang juga membutuhkan konektivitas internet.region.signin.aws
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.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).region.api.transform
Mengonfigurasi kebijakan titik akhir VPC
Jika titik akhir com.amazonaws. 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.region.api.transform
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-idyour-vpc-id\ --cidr-blockfirewall-subnet-cidr\ --availability-zoneyour-az\ --regionregion
Langkah 2: Buat subnet publik untuk NAT Gateway
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockpublic-subnet-cidr\ --availability-zoneyour-az\ --regionregion
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-idyour-vpc-id\ --regionregion\ --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-idyour-igw-id\ --regionregion# Associate with public subnet aws ec2 associate-route-table \ --route-table-id $PUB_RTB \ --subnet-idpublic-subnet-id\ --regionregion
Langkah 4: Buat NAT Gateway
# Allocate an Elastic IP EIP=$(aws ec2 allocate-address --domain vpc \ --regionregion--query 'AllocationId' --output text) # Create NAT Gateway in the public subnet NAT_ID=$(aws ec2 create-nat-gateway \ --subnet-idpublic-subnet-id\ --allocation-id $EIP \ --regionregion\ --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 --regionregion
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" } } }' \ --regionregion
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. |
URL penyewa aplikasi web — browser memuat halaman awal dari domain ini melalui CloudFront |
|
Halaman pengalihan masuk SSO |
.s3. |
URL presigned S3 — unggahan dan unduhan artefak |
oidc. |
Pertukaran token OIDC untuk otentikasi SSO |
portal.sso. |
Halaman login portal SSO |
assets.sso-portal. |
Aset statis portal SSO (CSS, JavaScript) |
|
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. melewati AWS PrivateLink dan tidak memerlukan jalan keluar internet. Mereka tidak terpengaruh oleh firewall.region.on.aws
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 --regionregion\ --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\"] }" \ --regionregion
Langkah 7: Buat Network Firewall
# Get the policy ARN FW_POLICY_ARN=$(aws network-firewall describe-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --regionregion\ --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-idyour-vpc-id\ --subnet-mappings SubnetId=firewall-subnet-id\ --regionregion# Wait for the firewall to become READY (3-5 minutes) while true; do STATUS=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --regionregion\ --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 \ --regionregion\ --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-idyour-vpc-id\ --regionregion\ --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 \ --regionregionaws ec2 associate-route-table \ --route-table-id $FW_RTB \ --subnet-idfirewall-subnet-id\ --regionregion
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-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-blockprivate-subnet-cidr\ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-idprivate-subnet-route-table-id\ --destination-ipv6-cidr-block ::/0 \ --regionregion
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.harus menyelesaikan ke alamat IP pribadi melalui titik akhir VPC dan tidak boleh mencapai firewall internet Anda.region.on.aws-
Verifikasi bahwa Anda telah membuat
com.amazonaws.titik akhir.region.api.transform -
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 tableOutput yang diharapkan:
available | True
-
- Aplikasi web tidak memuat (batas waktu koneksi)
-
-
Verifikasi tabel rute subnet pribadi memiliki
0.0.0.0/0rute yang menunjuk ke titik akhir firewall. -
Verifikasi bahwa tabel rute subnet firewall memiliki
0.0.0.0/0rute yang menunjuk ke NAT Gateway. -
Verifikasi NAT Gateway dalam
availablekeadaan.
-
- Non-allowlisted Domain tidak diblokir
-
-
Periksa
::/0rute 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_ORDERdengandrop_establisheddanalert_establishedsebagai 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-idpub-rtb-id\ --destination-cidr-blockprivate-subnet-cidr\ --regionregion# Remove route from private subnet aws ec2 delete-route \ --route-table-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 --regionregion# Delete Network Firewall (takes ~5 minutes) aws network-firewall delete-firewall \ --firewall-name transform-webapp-firewall \ --regionregion# Delete firewall policy and rule group aws network-firewall delete-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --regionregionaws network-firewall delete-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --regionregion# Delete NAT Gateway (wait ~5 minutes for full deletion) aws ec2 delete-nat-gateway --nat-gateway-idnat-gateway-id\ --regionregion# Release Elastic IP aws ec2 release-address --allocation-ideip-allocation-id\ --regionregion# Delete subnets aws ec2 delete-subnet --subnet-idfirewall-subnet-id\ --regionregionaws ec2 delete-subnet --subnet-idpublic-subnet-id\ --regionregion