iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
從 Bedrock Playground 測試完各種 AI Model 參數,接下來進入實作!
雲端環境中不管做什麼,都要優先考慮安全。

在撰寫程式碼調用 Bedrock 服務之前,先開通使用者權限。

AWS Identity Center & Permission Set 可參考這篇:Day 7. Identity Center:Final Season

先前已經為程式開發期間需要的權限建立過 Identity User,也設定好了讀取 S3 的許可集 (Permission Set)。現在,為了讓開發者也能透過程式呼叫 Bedrock 服務,需要再另外加上相關的 Permission Set 設定。


直接修改原有的 Permission Set,還是另外建立一組 Bedrock 專用?

如果只是要完成授權,兩種都可以達到呼叫 Bedrock 的使用目的。
最大的差別在於後續的維護和管理。

  • 方案一:直接修改原有 Permission Set
    以「」作為劃分基準。
    當組織以開發者或團隊為單位,分別設定 Permission Set,就比較適合使用方案一。
    能確保所有使用者的設定檔各自獨立,即使調整 Permission Set 也不會造成連動影響。
    但隨著使用者和雲端服務增加、設定檔可能變得越來越難管理。
    比如:
    • 新增一個服務,需要替所有團隊一個一個調整 Permission Set。
    • 開發人員同時參與多個團隊,可能會發生 Permission 重複疊加,難以清楚管理授權的問題。
  • 方案二:建立專屬 Bedrock 的 Permission Set
    以「AWS 服務類別」作為劃分基準。
    這組 Permission Set 可以直接指派給任何需要使用 Bedrock 的使用者,與其他服務權限互不影響。
    權限劃分更清晰、可重複利用的彈性高。
    但隨著雲端服務項目增加,Permission Set 的數量也會隨著增長。

Permission Set 是一個十分彈性的機制。
最終如何使用,還是要以組織的管理策略與成本做考慮。

⚠️ 概念釐清
AWS Identity Center 是給「人」使用的登入和授權。
之所以先開通,是因為開發者需要在本機透過 CLI 或 SDK 呼叫服務。
程式碼佈署到雲端後,應該要透過 IAM Role 處理授權。


設定 Permission Set

為了做測試,這篇會使用方案二:另外建立一組授權 Bedrock 的 Permission Set

  • 開啟 IAM Identiry Center > 許可集
    畫面中已經有一組 Permission Set,是為了讓自己建立的服務可以讀寫 S3 Bucket 而建立
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437COotuGy0kt.png
  • 點選「建立許可集」。選擇自訂許可合集,
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437TQkwmh3oFZ.png
  • 在「內嵌政策」中輸入需要的 Bedrock 權限
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437vCaGIXdSB8.png
    {
        "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)
  • 建立許可集
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437gca3d3EGss.png

指派到帳戶(Account)

Day 7 的時候,為了測試 S3 的讀寫,已經建立過一個 Identity Center User:developer
並將這個 User 指派到目前僅有的 AWS Account:MinxSu,給予的 Permission Set 是 s3-ironman2025

  • 先從 IAM Identity Center 找到開發用的使用者:developer
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437jZD6tIcC0Y.png
  • 切換到「AWS 帳戶」分頁,點選「指派帳戶」
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437F5evL6WifB.png
  • 勾選要指派的帳戶,並選擇要使用的 Permission Set,最後按下指派
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437moEWyF3hvP.png
  • 完成指派
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437ONQAmd1PpX.png

調整程式使用的登入設定

接下來要進行本機開發環境的調整,回到 VS Code,開啟先前測試 S3 的專案。

  • 查看目前的設定檔,目前只有 Day 10 設定好的 ithome-2025-developer
    aws configure list-profiles
    
  • 開啟設定檔
     ~/.aws/config
    
  • 編輯設定檔
    接下來要做的,是讓一個 SSO 登入可以對應到兩組許可集
    所以要調整現有的設定檔。
    • 原有設定檔
      [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
      
      • sso-session:ithome-2025-sso
      • 可用設定:ithome-2025-developer,對應到可使用 S3 的 IAM Role
    • 調整後的設定檔
      [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
      
      • sso-session:aws-session
      • 可用設定
        dev-s3-ironman2025:讀取 S3 Bucket 清單、讀寫 S3 Bucket 物件
        dev-call-bedrock:列出 Bedrock Model 清單、一般/串流方式調用 Bedrock API

測試

  1. 連線設定
    既然是透過 sso-session 取得授權,當然就要先做好登入。
    使用指令:
    aws sso login --profile <SSO profile name>
    
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437JJq4tSIm75.png
    會跳出登入用的連結,在瀏覽器上完成登入
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437IYaIPlfx7h.png
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437Oz9WtCTWr3.png
  2. 使用程式碼調用 AWS Bedrock API
    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))
    
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20251005/20168437WwpIgNUkBm.png

ERROR

⚠️ You don't have access to the model with the specified model ID.

如果出現沒有授權的錯誤訊息,可能有兩個原因:

  1. 沒有開通模型的使用權限
    Bedrock 授權 AI Model 的方式是逐一開通
    (但是在 2025/09/29 後修改過政策,有些模型不需要開通就可以直接使用)
    即使帳號能列出模型清單 (ListFoundationModels),也不代表可以調用。
    → 解決方式
    登入 AWS Console → Amazon Bedrock
    左側選單點:模型存取權 (Model access)
    檢查你要呼叫的模型(如:anthropic.claude-3-haiku-20240307-v1:0)是否為「已授予存取權」(Access granted)

  2. 地區設定有誤
    請確保建立 client 時候的 region_name 一定一定一定要跟實際上在 console 上啟用的相同!

session.client("bedrock-runtime", region_name="ap-northeast-1")

⚠️ 小提醒:
每個 Region 的模型開通是獨立的。
在 ap-southeast-1 開通,ap-northeast-1 並不會自動擁有。

上一篇
Day 20. 沒踩點坑怎麼算是技術文章
下一篇
Day 22. 停下來喘口氣很重要
系列文
科學的盡頭是玄學?AI占卜小助手與知識庫驗證23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言