Bedrock — akses model
Model di Bedrock harus diaktifkan aksesnya per akun per region. Ini lapisan izin yang terpisah dari IAM, dan hampir semua orang tersandung di sini sekali.
Intisari
- Akses model diberikan per akun per region, lewat konsol Bedrock.
- Ini bukan IAM. Policy yang sempurna tetap gagal kalau akses modelnya belum diaktifkan.
- Gejalanya:
AccessDeniedExceptionyang menyebut model, bukan menyebut policy. - Sebagian model butuh pengisian detail pemakaian sebelum disetujui.
- Ganti region berarti mengaktifkan ulang — pengaturan tidak ikut berpindah.
Dua lapisan izin yang sering tertukar
| Akses model | IAM policy | |
|---|---|---|
| Menjawab | Apakah akun ini boleh memakai model ini? | Apakah identitas ini boleh memanggil API-nya? |
| Diatur di | Konsol Bedrock → Model access | IAM / CDK |
| Cakupan | Per akun per region | Per identitas |
| Butuh keduanya? | Ya. Keduanya harus benar. | |
Mengaktifkan
- Buka konsol Amazon Bedrock, pastikan region-nya benar (pojok kanan atas).
- Masuk ke Model access.
- Pilih model yang kamu butuhkan. Untuk roadmap ini: satu keluarga Claude dan satu model embedding.
- Sebagian model meminta detail kasus pemakaian — isi apa adanya.
- Tunggu status menjadi Access granted. Sebagian instan, sebagian butuh beberapa menit.
Region adalah kesalahan nomor satu di sini. Kamu mengaktifkan model di us-east-1,
lalu kodemu memanggil dengan region default dari profil yang ternyata ap-southeast-1. Pesannya
terlihat seperti masalah izin, padahal cuma salah region. Cetak
boto3.Session().region_name sebelum menebak apa pun.
Memeriksa dari kode
import boto3
kelola = boto3.client("bedrock", region_name="us-east-1")
for m in kelola.list_foundation_models()["modelSummaries"]:
if m["providerName"] == "Anthropic":
print(m["modelId"])
Perhatikan: daftar ini menampilkan model yang ada di region tersebut, belum tentu yang aksesnya sudah kamu aktifkan. Cara paling jujur untuk memastikan adalah mencoba memanggilnya:
from botocore.exceptions import ClientError
runtime = boto3.client("bedrock-runtime", region_name="us-east-1")
try:
runtime.converse(
modelId=MODEL_ID,
messages=[{"role": "user", "content": [{"text": "tes"}]}],
inferenceConfig={"maxTokens": 5},
)
print("akses OK")
except ClientError as e:
kode = e.response["Error"]["Code"]
print("gagal:", kode, "-", e.response["Error"]["Message"])
Membaca pesan errornya
| Kode | Artinya | Perbaikan |
|---|---|---|
AccessDeniedException menyebut model | Akses model belum aktif | Aktifkan di konsol, region yang benar |
AccessDeniedException menyebut action IAM | Policy kurang | Tambahkan bedrock:InvokeModel |
ValidationException menyebut modelId | Model tidak ada di region ini | Pindah region, atau pakai inference profile |
ResourceNotFoundException | Model ID salah ketik | Cocokkan dengan list_foundation_models |
Latihan: aktifkan akses ke satu model Claude dan satu model embedding di us-east-1,
lalu jalankan skrip pemeriksa di atas untuk keduanya. Setelah itu jalankan skrip yang sama dengan
region_name yang belum kamu aktifkan, dan baca perbedaan pesan errornya — itu latihan diagnostik
yang akan sering terpakai.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.