從 Bedrock Playground 測試完各種 AI Model 參數,接下來進入實作!
雲端環境中不管做什麼,都要優先考慮安全。
在撰寫程式碼調用 Bedrock 服務之前,先開通使用者權限。
AWS Identity Center & Permission Set 可參考這篇:Day 7. Identity Center:Final Season
先前已經為程式開發期間需要的權限建立過 Identity User,也設定好了讀取 S3 的許可集 (Permission Set)。現在,為了讓開發者也能透過程式呼叫 Bedrock 服務,需要再另外加上相關的 Permission Set 設定。
如果只是要完成授權,兩種都可以達到呼叫 Bedrock 的使用目的。
最大的差別在於後續的維護和管理。
直接修改原有 Permission Set
建立專屬 Bedrock 的 Permission Set
Permission Set 是一個十分彈性的機制。
最終如何使用,還是要以組織的管理策略與成本做考慮。
⚠️ 概念釐清
AWS Identity Center 是給「人」使用的登入和授權。
之所以先開通,是因為開發者需要在本機透過 CLI 或 SDK 呼叫服務。
程式碼佈署到雲端後,應該要透過 IAM Role 處理授權。
為了做測試,這篇會使用方案二:另外建立一組授權 Bedrock 的 Permission Set
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Bedrock",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:ListFoundationModels"
],
"Resource": "*"
}
]
}
Action | Description |
---|---|
InvokeModel | 呼叫 Bedrock AI Model |
InvokeModelWithResponseStream | 用串流方式呼叫 Bedrock AI Model |
ListFoundationModels | 查詢支援的 Model 清單 (支援,不等於有開通) (建議開啟這個權限,可以用來確認需要調用的 Model ID) |
在 Day 7 的時候,為了測試 S3 的讀寫,已經建立過一個 Identity Center User:developer
並將這個 User 指派到目前僅有的 AWS Account:MinxSu,給予的 Permission Set 是 s3-ironman2025
接下來要進行本機開發環境的調整,回到 VS Code,開啟先前測試 S3 的專案。
aws configure list-profiles
~/.aws/config
[profile ithome-2025-developer]
sso_session = ithome-2025-sso
sso_account_id = 590184072539
sso_role_name = s3-ironman2025
region = ap-northeast-1
[sso-session ithome-2025-sso]
sso_start_url = https://d-9767a7e172.awsapps.com/start
sso_region = ap-southeast-2
sso_registration_scopes = sso:account:access
[profile dev-call-bedrock]
sso_session = aws-session
sso_account_id = 590184072539
sso_role_name = call-bedrock
region = ap-northeast-1
output = json
[profile dev-s3-ironman2025]
sso_session = aws-session
sso_account_id = 590184072539
sso_role_name = s3-ironman2025
region = ap-northeast-1
[sso-session aws-session]
sso_start_url = https://d-9767a7e172.awsapps.com/start
sso_region = ap-southeast-2
sso_registration_scopes = sso:account:access
aws sso login --profile <SSO profile name>
session = boto3.Session(profile_name="dev-call-bedrock")
client = session.client("bedrock", region_name="ap-southeast-1")
resp = client.list_foundation_models()
print(json.dumps(resp, indent=2, ensure_ascii=False))
⚠️ You don't have access to the model with the specified model ID.
如果出現沒有授權的錯誤訊息,可能有兩個原因:
沒有開通模型的使用權限
Bedrock 授權 AI Model 的方式是逐一開通
(但是在 2025/09/29 後修改過政策,有些模型不需要開通就可以直接使用)
即使帳號能列出模型清單 (ListFoundationModels),也不代表可以調用。→ 解決方式
登入 AWS Console → Amazon Bedrock
左側選單點:模型存取權 (Model access)
檢查你要呼叫的模型(如:anthropic.claude-3-haiku-20240307-v1:0)是否為「已授予存取權」(Access granted)
地區設定有誤
請確保建立 client 時候的 region_name 一定一定一定要跟實際上在 console 上啟用的相同!
session.client("bedrock-runtime", region_name="ap-northeast-1")
⚠️ 小提醒:
每個 Region 的模型開通是獨立的。
在 ap-southeast-1 開通,ap-northeast-1 並不會自動擁有。