Bedrock lewat VPC & PrivateLink
VPC interface endpoint dengan PrivateLink membuat panggilan ke Bedrock tetap di dalam jaringan AWS. Digabung dengan IAM condition, ia jadi pagar yang tegas.
Intisari
- VPC melindungi data dan memungkinkanmu memantau seluruh lalu lintas lewat VPC Flow Logs.
- Interface endpoint (PrivateLink) memberi jalur privat ke Bedrock tanpa internet gateway.
- Berlaku juga untuk kustomisasi model, batch inference, dan akses OpenSearch Serverless dari knowledge base.
- Endpoint policy membatasi apa yang boleh lewat endpoint itu.
- IAM condition
aws:SourceVpcemembuat panggilan dari luar VPC ditolak — ini pengunci sebenarnya.
Apa yang berubah
Tanpa endpoint:
Lambda (VPC) ──▶ NAT Gateway ──▶ internet ──▶ endpoint publik Bedrock
Dengan interface endpoint:
Lambda (VPC) ──▶ ENI di subnet-mu ──▶ Bedrock (tidak pernah keluar jaringan AWS)
| Manfaat | Penjelasan |
|---|---|
| Tidak lewat internet | Menyederhanakan cerita kepatuhan secara signifikan |
| Tidak butuh NAT Gateway | NAT ditagih per jam dan per GB — endpoint sering lebih murah |
| Bisa dipantau | VPC Flow Logs mencatat seluruh lalu lintas masuk dan keluar |
| Bisa dibatasi | Endpoint policy dan security group berlaku di sini |
Fitur Bedrock yang bisa dilindungi VPC
- Kustomisasi model — job pelatihan berjalan di dalam VPC-mu.
- Batch inference — job memproses data tanpa keluar jaringan.
- Knowledge Bases — akses ke OpenSearch Serverless lewat interface endpoint.
- Pemanggilan runtime — lewat endpoint
bedrock-runtime.
Membuatnya
from aws_cdk import aws_ec2 as ec2
vpc.add_interface_endpoint(
"BedrockRuntimeEndpoint",
service=ec2.InterfaceVpcEndpointAwsService.BEDROCK_RUNTIME,
private_dns_enabled=True, # nama DNS Bedrock otomatis mengarah ke endpoint
)
private_dns_enabled adalah yang membuat ini transparan: kodemu tetap memanggil
bedrock-runtime.us-east-1.amazonaws.com seperti biasa, dan DNS di dalam VPC yang mengarahkannya ke
ENI endpoint. Tidak ada perubahan kode sama sekali.
Endpoint policy
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"],
"Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-*"
}]
}
Ini pembatasan di sisi jaringan: apa pun yang lewat endpoint ini hanya boleh memanggil model itu. Ia berlapis dengan IAM policy, bukan menggantikannya.
Penguncinya: IAM condition
{
"Effect": "Deny",
"Action": "bedrock:*",
"Resource": "*",
"Condition": {
"StringNotEquals": { "aws:SourceVpce": "vpce-0123456789abcdef0" }
}
}
Ini yang benar-benar mengunci, bukan endpoint-nya. Membuat interface endpoint saja tidak mencegah
siapa pun memanggil Bedrock lewat internet dengan kredensial yang sama. Deny berkondisi
aws:SourceVpce yang membuatnya wajib. Terapkan di level Service Control Policy organisasi
supaya tidak bisa dilewati per akun.
Efek samping yang perlu diantisipasi
| Situasi | Yang terjadi |
|---|---|
| Laptopmu memanggil Bedrock | Ditolak — kamu tidak berada di dalam VPC |
| CI/CD di luar VPC menjalankan evaluasi | Ditolak — pindahkan ke dalam VPC atau beri pengecualian eksplisit |
| Lambda tanpa konfigurasi VPC | Tidak memakai endpoint; tetap lewat jalur publik |
| Lambda di VPC tanpa endpoint | Butuh NAT Gateway, atau panggilannya timeout |
Baris terakhir adalah gejala klasik: Lambda yang baru dipindahkan ke VPC mendadak timeout saat memanggil layanan AWS mana pun. Penyebabnya hampir selalu tidak adanya rute keluar — dan jawabannya adalah endpoint, bukan menaikkan timeout.
Latihan: pindahkan Lambda-mu ke dalam VPC privat, tambahkan interface endpoint untuk
bedrock-runtime, dan pastikan ia tetap berjalan tanpa perubahan kode. Lalu tambahkan
Deny berkondisi aws:SourceVpce dan buktikan panggilan dari laptopmu ditolak.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.