AWS Bedrock 安全深度剖析
對 AWS Bedrock 的進階安全評估,涵蓋模型呼叫控制、Guardrails 繞過測試、VPC 配置,以及基礎模型 API 的紅隊方法論。
概觀
AWS Bedrock 透過統一 API 提供對來自 Anthropic、Meta、Mistral、Cohere 與 Amazon 的基礎模型的代管存取。與自營模型部署(由營運者控制整個堆疊)不同,Bedrock 抽象化基礎設施,同時引入一組紅隊人員必須理解的獨特安全邊界。本文超越 AWS Bedrock 安全指南所涵蓋的基礎內容,以適合進行授權評估之攻擊性安全從業人員的深度檢視此服務。
Bedrock 的核心安全挑戰在於它位於傳統 AWS IAM 控制與新穎 AI 特定風險的交會。錯誤設定的 IAM 政策不僅授予資料存取權,還可能授予呼叫昂貴基礎模型的能力、從自訂模型外洩訓練資料,或繞過組織用於合規的內容安全控制。
本深度剖析涵蓋五個領域:IAM 與資源政策攻擊面、Bedrock Guardrails 繞過測試、網路層控制與 VPC 端點配置、自訂模型與微調安全,以及針對 Bedrock 特定威脅的偵測工程。
Bedrock 的 IAM 攻擊面
理解 Bedrock IAM 動作
AWS Bedrock 公開一組廣泛的 IAM 動作,用於控制對不同能力的存取。常見錯誤設定是在僅需 bedrock:InvokeModel 時授予 bedrock:* 權限,無意中允許存取模型管理、Guardrail 配置與自訂模型訓練操作。
關鍵 IAM 動作家族:
| 動作前綴 | 範圍 | 過度授權時的風險 |
|---|---|---|
bedrock:InvokeModel* | 模型呼叫與串流 | 成本濫用、透過提示詞的資料暴露 |
bedrock:CreateModelCustomizationJob | 微調與持續預訓練 | 訓練資料投毒、模型盜竊 |
bedrock:GetModelCustomizationJob | 讀取微調工作詳情 | 中繼資料洩漏、S3 儲存貯體探索 |
bedrock:CreateGuardrail / UpdateGuardrail | Guardrail 管理 | 弱化內容安全控制 |
bedrock:CreateAgent / InvokeAgent | Bedrock 代理 | 工具使用濫用、透過 action groups 的 SSRF |
bedrock:GetFoundationModelAgreement | 模型存取協議 | 發現哪些模型已啟用 |
bedrock:CreateProvisionedModelThroughput | 保留容量 | 重大成本攻擊(每小時數千美元) |
列舉 Bedrock 權限
評估的第一步是了解被入侵身分持有哪些 Bedrock 權限。以下指引說明如何以 boto3 建立列舉腳本:使用 boto3.Session 同時建立 bedrock 與 bedrock-runtime 客戶端。先呼叫 STS 的 get_caller_identity() 取得呼叫者 ARN 與帳號。接著依序呼叫 list_foundation_models() 收集可用模型(模型 ID、供應商、輸入/輸出模態)、list_guardrails() 收集 Guardrail(ID、名稱、狀態、版本)、list_custom_models() 收集自訂模型(名稱、ARN、基礎模型、建立時間),以及 list_agents() 收集代理。每個呼叫都需以 ClientError 搭配 AccessDeniedException 包裝,使缺少權限時可優雅降級,並將成功確認的權限記錄到 permissions_confirmed 清單中。
資源政策錯誤設定
Bedrock 的自訂模型與預配置吞吐量資源支援以資源為基礎的政策。常見漏洞模式為過度寬鬆的資源政策,允許跨帳號存取。
此類審計可以 Python 函式 check_custom_model_policy(session, model_arn, region) 實作:呼叫 bedrock.get_model_invocation_logging_configuration() 檢視呼叫日誌組態,若未設定 CloudWatch 或 S3 記錄即標為高嚴重度(無法鑑識分析)。接著呼叫 bedrock.get_custom_model(modelIdentifier=model_arn) 取得訓練資料 S3 URI,並提示驗證該 S3 儲存貯體政策是否適當限制存取。所有發現以 severity、finding、detail 欄位結構化輸出。
透過模型自訂達成權限提升
若攻擊者取得 bedrock:CreateModelCustomizationJob 權限搭配 iam:PassRole,可能可提升權限。自訂工作需要 Bedrock 承擔的 IAM 角色以從 S3 讀取訓練資料並寫入模型產物。若該角色具有過寬的 S3 權限,攻擊者可利用訓練工作從帳號內任意 S3 儲存貯體外洩資料。
測試此提權的方法為:呼叫 bedrock.create_model_customization_job(),將 trainingDataConfig.s3Uri 設為目標 S3 URI,roleArn 設為 Bedrock 服務角色 ARN,基礎模型使用 amazon.titan-text-express-v1,並以最小超參數(epochCount=1、batchSize=1、learningRate=0.00001)。若成功建立工作,即表示脆弱,Bedrock 服務角色 S3 權限過寬;若回傳 AccessDeniedException 則表示 IAM 政策正確阻擋;若回傳 ValidationException 則為部分脆弱(IAM 允許但輸入驗證阻擋)。
Bedrock Guardrails 繞過測試
Guardrails 的運作方式
Bedrock Guardrails 提供可配置的內容過濾,獨立於基礎模型內建的安全訓練運作。Guardrails 依可配置政策評估輸入提示與模型回應,涵蓋:
- 內容過濾器:阻擋各類別有害內容(仇恨、侮辱、性、暴力、不當行為、提示詞攻擊)
- 拒絕主題:應被拒絕的自訂主題定義
- 字詞過濾器:明確封鎖清單與髒話偵測
- 敏感資訊過濾器:以模式比對與 NLP 進行 PII 偵測與遮罩
- 情境紮根檢查:相對於參考內容偵測幻覺與不相關回應
每項過濾器對輸入與輸出皆可配置強度等級 (NONE、LOW、MEDIUM、HIGH)。理解這些機制對測試其有效性至關重要。
測試方法論
系統化的 Guardrails 測試需透過過濾器類別與強度等級迭代。
可以 Python 類別 BedrockGuardrailTester 建構:初始化接受 session、guardrail_id、guardrail_version (預設 "DRAFT")、model_id (預設 anthropic.claude-3-sonnet-20240229-v1:0)、region。get_guardrail_config() 呼叫 bedrock.get_guardrail() 以取得當前配置(content_policy、topic_policy、word_policy、sensitive_info_policy、contextual_grounding_policy)。test_prompt(prompt, test_name, expected_block) 透過 bedrock_runtime.invoke_model() 送出測試提示,傳遞 guardrailIdentifier 與 guardrailVersion,並從回應標頭 x-amzn-bedrock-guardrail-action 讀取 Guardrail 動作;結果結構包含測試名稱、提示詞長度、是否被阻擋、預期是否阻擋、是否通過,以及回應預覽。run_content_filter_suite() 執行結構化測試套件,涵蓋直接有害請求、Base64 編碼規避、虛構框架、多輪上下文建構,以及良性基準。每回合間呼叫 time.sleep(1) 以尊重速率限制。最後 generate_report() 產出含 total_tests、passed、failed、pass_rate、bypasses_found 與繞過詳情的摘要。
常見 Guardrail 弱點
基於真實評估,最常見的 Guardrail 繞過模式分為幾類:
-
強度等級缺口:組織常將內容過濾器設為 LOW 或 MEDIUM,以降低合法業務使用案例的誤判。較低門檻可能漏掉重新表述或情境轉移的有害請求。
-
拒絕主題特定性:自訂拒絕主題依賴語意相似度比對。過於狹窄的主題定義會漏掉換詞後的請求;過於廣泛的定義則導致誤判,使組織弱化過濾器。
-
PII 過濾器規避:敏感資訊過濾器依賴模式比對與 NLP 模型。帶有特殊空格或分隔符格式化的 PII(如信用卡號)可規避偵測。
-
僅輸出過濾的缺口:部分組織僅在輸出側配置 Guardrail,允許惡意提示詞進入模型。雖然輸出過濾器可能捕捉明顯有害回應,模型仍可能洩漏系統提示詞或內部推理。
-
Guardrail 版本管理:在生產中使用
DRAFTGuardrail 版本的組織可能存在未測試配置。版本制度 (1、2等) 意味舊版本在未明確更新前仍在使用中。
網路層控制與 VPC 端點
Bedrock 的 VPC 端點配置
Bedrock 支援 VPC 介面端點,讓組織呼叫模型時流量不經過公有網際網路。從安全評估角度,關鍵問題是 VPC 端點是否已配置、端點政策是否適當限制存取,以及安全群組與網路 ACL 配置是否防止未授權存取。
稽核腳本要點:使用 ec2.describe_vpc_endpoints() 以 com.amazonaws.{region}.bedrock 與 com.amazonaws.{region}.bedrock-runtime 兩個服務名稱過濾。若無端點存在,記錄 HIGH 等級發現(Bedrock API 呼叫皆通過公有網際網路)。對每個端點,檢查 PolicyDocument,若 Statement 中 Principal 為 "*"、Effect 為 "Allow" 且無 Condition,即記為 HIGH 等級(所有 VPC 中身分皆可呼叫)。再檢查安全群組,若任一 IpPermissions 的 IpRanges 包含 0.0.0.0/0,記為 HIGH 等級(允許任意 IP 入站)。若端點無安全群組限制,記為 MEDIUM 等級。
網路限制的 IAM 條件鍵
除 VPC 端點外,IAM 條件鍵可強制 Bedrock API 呼叫僅來自特定網路情境:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RestrictBedrockToVPCEndpoint",
"Effect": "Deny",
"Action": "bedrock:*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-0123456789abcdef0"
}
}
},
{
"Sid": "RestrictToSpecificModels",
"Effect": "Deny",
"Action": "bedrock:InvokeModel",
"NotResource": [
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
]
}
]
}此政策模式強制兩項控制:所有 Bedrock 存取必須透過指定 VPC 端點,且模型呼叫限於特定核准模型。評估期間,測試這些條件鍵是否到位,以及是否可透過角色鏈結或跨帳號存取路徑繞過。
自訂模型與微調安全
訓練資料暴露風險
組織透過 Bedrock 微調模型時,訓練資料存於 S3 並由 Bedrock 服務角色存取。安全風險包括:
-
S3 中的訓練資料:含訓練資料的 S3 儲存貯體可能缺乏適當存取控制、加密或生命週期政策。AI 模型的訓練資料常包含敏感業務資料、客戶互動或專有資訊。
-
模型產物儲存:輸出模型產物寫入 S3。這些產物隱含編碼訓練資料,可能受訓練資料萃取攻擊。
-
服務角色過度授權:Bedrock 為訓練承擔的 IAM 角色通常具有超過必要的 S3 權限,使前述權限提升攻擊成為可能。
稽核腳本要點:使用 bedrock.list_custom_models() 列舉所有自訂模型,對每個模型呼叫 bedrock.get_custom_model(),取得 trainingDataConfig.s3Uri,再拆出 bucket 名稱。對該 bucket 分別檢查:s3.get_bucket_encryption() 確認是否使用 aws:kms 加密(若非則為 MEDIUM)、s3.get_bucket_versioning() 確認狀態為 "Enabled"(否則為 LOW)、s3.get_public_access_block() 確認四項 (BlockPublicAcls、IgnorePublicAcls、BlockPublicPolicy、RestrictPublicBuckets) 皆為 True(否則為 CRITICAL:訓練資料可能公開存取)。
透過 GetCustomModel 進行模型盜竊
透過 Bedrock 訓練的自訂模型無法直接下載為權重檔案。然而,具 bedrock:InvokeModel 存取自訂模型的攻擊者,可透過系統化提示詞萃取模型的專業知識,實質上盜竊微調投資。這是一種模型萃取攻擊,攻擊者透過查詢目標模型建立蒸餾資料集。
緩解方式是套用最小權限 IAM 政策限制哪些身分可呼叫自訂模型,並監控異常呼叫模式(高量、主題系統覆蓋)。
針對 Bedrock 威脅的偵測工程
CloudTrail 事件模式
所有 Bedrock 管理 API 呼叫記錄於 CloudTrail。執行期呼叫 (InvokeModel、InvokeModelWithResponseStream) 啟用時記錄為資料事件。以下 CloudTrail 查詢模式偵測常見攻擊行為。
建議四組 Amazon Athena 查詢:(1) 未授權模型存取嘗試:從 bedrock.amazonaws.com 來源、errorCode = 'AccessDeniedException'、過去七天事件,輸出 eventTime、caller ARN、請求參數與來源 IP;(2) Guardrail 修改:事件名稱為 CreateGuardrail、UpdateGuardrail、DeleteGuardrail、CreateGuardrailVersion,過去三十天;(3) 自訂模型操作:事件名稱為 CreateModelCustomizationJob、GetCustomModel、DeleteCustomModel、CreateProvisionedModelThroughput,過去三十天;(4) 高量呼叫:依 caller ARN 分組計算過去一小時 InvokeModel 與 InvokeModelWithResponseStream 次數,以 HAVING COUNT(*) > 100 篩選並依呼叫次數降冪排序。
模型呼叫日誌分析
Bedrock 的模型呼叫日誌(啟用時)捕捉實際送往模型的提示詞與回應。此資料儲存於 S3 或 CloudWatch,對偵測提示詞注入攻擊、資料外洩嘗試與 Guardrail 繞過技術極為寶貴。
分析腳本要點:使用 S3 分頁器列出 bucket 內指定前綴的近期日誌(依 LastModified 過濾最近 N 小時)。讀取每個物件,若副檔名為 .gz 以 gzip 解壓,再以 JSON 解析。統計 total_invocations、guardrail_blocks(guardrailAction == "BLOCKED")、long_prompts(inputTokenCount > 4000,可能為萃取嘗試),並掃描輸入文字中可疑關鍵字(如 "ignore previous"、"system prompt"、"you are now"、"disregard"、"override"、"jailbreak"、"repeat everything above"、"show me your instructions"),記錄時間戳、比中關鍵字、呼叫者身分與模型 ID。
紅隊評估檢查清單
進行 AWS Bedrock 部署的授權紅隊評估時,使用以下結構化檢查清單:
IAM 與存取控制
- 列舉所有授予
bedrock:*或廣泛 Bedrock 動作的 IAM 政策 - 測試跨帳號存取自訂模型與預配置吞吐量
- 確認
bedrock:InvokeModel範圍限於特定模型 ARN 而非萬用字元 - 檢查自訂化工作上的服務連結角色過度授權
- 測試強制 VPC 端點、來源 IP 與 MFA 要求的 IAM 條件鍵
Guardrails 配置
- 擷取並分析所有已部署 Guardrail 的配置
- 以配置強度測試每個內容過濾器類別
- 確認拒絕主題涵蓋組織特定風險領域
- 以各種格式與編碼模式測試 PII 過濾器
- 確認 Guardrail 一致套用於所有模型呼叫路徑
網路安全
- 確認
bedrock與bedrock-runtime服務皆有 VPC 端點 - 檢查 VPC 端點政策是否過度寬鬆的 principal 配置
- 確認 VPC 端點上的安全群組限制來源 CIDR
- 測試是否可從 VPC 外部存取 Bedrock
資料保護
- 稽核訓練資料與模型產物的 S3 bucket 安全
- 確認靜態加密使用客戶管理 KMS 金鑰
- 檢查模型呼叫日誌已啟用並涵蓋所有模型
- 確認日誌資料已加密且存取受限
監控與偵測
- 確認 Bedrock 的 CloudTrail 資料事件已啟用
- 以產生已知不良模式測試偵測規則
- 確認對 Guardrail 修改與自訂模型操作的告警
- 檢查呼叫日誌捕捉足夠鑑識分析細節
參考資料
- AWS Documentation, "Security in Amazon Bedrock," https://docs.aws.amazon.com/bedrock/latest/userguide/security.html
- AWS Documentation, "Amazon Bedrock Guardrails," https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
- NIST AI 100-2, "Adversarial Machine Learning: A Taxonomy and Terminology of Attacks and Mitigations," January 2024, https://csrc.nist.gov/publications/detail/nistir/ai/100-2e2023/final
- OWASP, "Top 10 for Large Language Model Applications," 2025, https://owasp.org/www-project-top-10-for-large-language-model-applications/
- AWS Documentation, "Logging and monitoring in Amazon Bedrock," https://docs.aws.amazon.com/bedrock/latest/userguide/logging-monitoring.html
攻擊者取得 bedrock:CreateModelCustomizationJob 與 iam:PassRole 權限。最重大風險為何?
哪種 Bedrock Guardrail 繞過技術利用輸入端與輸出端過濾的缺口?