View a markdown version of this page

AgentCore 執行期的安全最佳實務 - Amazon Bedrock AgentCore

AgentCore 執行期的安全最佳實務

本主題整合了 Amazon Bedrock AgentCore 執行期的安全最佳實務。使用這些建議來保護您的代理程式部署、保護資料,並遵循最低權限原則。

工作階段隔離和資料保護

Amazon Bedrock AgentCore 執行期透過專用microVMs提供強大的隔離界限。請遵循這些實務來維護資料保護:

  • 了解隔離界限 — 每個使用者工作階段都會在具有隔離 CPU、記憶體和檔案系統的專用microVM中執行。命令和代理程式程式碼無法存取其他客戶的工作負載或逸出 VM 界限。工作階段完成後,會終止整個 microVM 並清除記憶體。

  • 在您的後端強制執行session-to-user映射 — AgentCore 不會強制執行session-to-user映射。您的用戶端後端必須維護使用者與其工作階段 IDs之間的關係,並實作生命週期管理,例如每位使用者的工作階段數量上限。

  • 請注意檔案系統許可行為 — 使用持久性檔案系統時,許可會儲存但不在工作階段中強制執行。 chmodstat 可正常運作,但存取檢查一律會成功,因為代理程式以 microVM 中唯一的使用者身分執行。

  • 了解 VM 中的登入資料公開 — 在 microVM 內執行的任何程式碼或演員都可以呼叫中繼資料端點 (MMDS) 來存取執行角色登入資料。仔細範圍您的執行角色許可。如需詳細資訊,請參閱登入資料管理

IAM 和最低權限

將最低權限原則套用至與您的 AgentCore 執行期資源相關聯的所有 IAM 政策:

  • 請勿在生產環境中使用 CLI 產生的政策 — AgentCore CLI 建立的 IAM 政策旨在用於開發和測試目的。這些許可授予廣泛的存取權,並不適合生產。建立自訂 IAM 政策,將許可限制為僅需要的特定資源和動作。如需完整參考,請參閱 AgentCore 執行期的 IAM 許可

  • 特定執行時間 ARNs 的範圍許可 — 避免萬用字元資源陳述式。在 IAM 政策Resource欄位中使用執行時間資源的完整 ARN。

  • 限制 InvokeAgentRuntimeForUser — 只有信任的委託人應擁有此許可。使用 IAM 資源條件將其範圍限定在特定執行時間資源。

  • 不需要的地方拒絕使用者 ID 委派 — 對於不需要使用者 ID 委派的執行時間,明確拒絕動作:

    { "Statement": [ { "Sid": "DenyUserIdDelegation", "Effect": "Deny", "Action": "bedrock-agentcore:InvokeAgentRuntimeForUser", "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" } ] }
  • 防止權限提升 — 確保與執行時間相關聯的執行角色具有等於或小於可叫用它的主體的權限。如需詳細資訊,請參閱登入資料管理

  • 使用 IAM 條件金鑰強制執行 VPC 部署 — 使用 bedrock-agentcore:subnetsbedrock-agentcore:securityGroups條件金鑰,要求將所有執行時間部署在核准的 VPCs中。如需範例,請參閱搭配 AgentCore 執行期使用 VPC 條件金鑰

  • 使用 IAM Access Analyzer — 驗證您的 IAM 政策,以確保其遵守最佳實務和最低權限原則。

以資源為基礎的政策和跨帳戶存取

以資源為基礎的政策會直接在您的執行時間資源上提供精細的存取控制:

  • 了解階層授權 — 對於執行時間 API 操作,例如 InvokeAgentRuntimeInvokeAgentRuntimeCommandInvokeAgentRuntimeCommandShell, AWS 評估代理程式執行時間和代理程式端點的政策。兩者都必須允許 動作。

  • 設定兩個資源以進行跨帳戶存取 — 若要授予跨帳戶存取,請在代理程式執行期和代理程式端點上建立資源型政策。如果任一資源缺少明確允許,請求會被拒絕。

  • 請記住,明確拒絕一律獲勝 — 如果任何政策 (以身分為基礎或以資源為基礎) 明確拒絕動作,無論其他政策為何,存取都會遭到拒絕。

如需完整詳細資訊,請參閱 Amazon Bedrock AgentCore 的資源型政策

預防混淆代理人

在信任政策中使用全域條件內容索引鍵,保護您的執行角色免於混淆代理人問題:

  • 使用 aws:SourceArnaws:SourceAccount — 將這些條件新增至執行角色信任政策,以限制哪些 AgentCore 資源可以擔任該角色:

    { "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:*" } } } ] }
  • 盡可能使用完整的 ARN — 如果您知道特定的執行時間資源,請在 中使用其完整的 ARN,aws:SourceArn而非萬用字元。

如需詳細資訊,請參閱預防跨服務混淆代理人

使用 AgentCore Gateway 開啟您的執行時間

常見的模式是使用 AgentCore Gateway 在您的 AgentCore 執行期前面,以便閘道成為執行期的單一受管進入點。將閘道放在前面可讓您在代理程式自己的環境之外套用控制項:

  • 政策型授權 — 使用閘道的政策引擎來控制哪些發起人可以叫用哪些目標,以及在哪些條件下叫用哪些目標。如需詳細資訊,請參閱使用政策來控制對閘道目標的存取

  • 護欄 — 透過政策引擎套用 Amazon Bedrock 護欄來篩選請求和回應。如需詳細資訊,請參閱在政策中使用護欄

  • 請求和回應攔截器 — 使用閘道上設定的攔截器 Lambda 函數來檢查或轉換流量。

這些控制項只會在所有流量實際流經閘道時保護您。如果發起人可以直接到達執行時間,它會完全略過閘道的政策、護欄和攔截器。若要避免這種情況,請將執行時間限制為只在呼叫來自您的閘道時才接受呼叫。執行方式取決於執行時間的傳入授權類型:

若要設定此項目,您可以建立閘道部署執行時間,然後將執行時間新增為該閘道上的閘道目標。如需目標組態、傳出授權和調用 URL 格式,請參閱 AgentCore 執行期目標

身分驗證最佳實務

AgentCore 執行期支援 IAM SigV4 和 JWT 承載字符身分驗證。請遵循這些實務來保護存取:

  • 選擇正確的身分驗證方法 — 將 IAM SigV4 用於其中service-to-service呼叫 AWS。當最終使用者直接透過身分提供者進行身分驗證時,請使用 JWT 承載字符身分驗證。執行時間一次可以支援一種方法;為不同的身分驗證類型建立不同的版本。

  • 偏好用於生產的 JWT 型使用者識別 — 當您的代理程式代表最終使用者擷取 OAuth 字符時,偏好 JWT 承載字符路徑 (GetWorkloadAccessTokenForJWT),其會驗證字符的發行者、簽章和過期。UserId 路徑 (GetWorkloadAccessTokenForUserId/ X-Amzn-Bedrock-AgentCore-Runtime-User-Id標頭) 會將使用者識別符視為沒有 IdP 驗證的不透明字串 - 僅用於開發、快速入門案例或解決上游使用者身分的企業架構。如需詳細資訊,請參閱取得工作負載存取字符

  • 完全設定 JWT 授權方 — 使用 JWT 身分驗證時,請設定所有可用的驗證欄位:探索 URL、允許對象、允許用戶端、允許範圍和必要的自訂宣告。

  • 絕不在生產程式碼中硬式編碼字符 — 使用安全的字符擷取機制。硬式編碼字符是來源控制和部署成品的安全風險。

  • 從已驗證的委託人衍生 user-id — 如果您使用 X-Amzn-Bedrock-AgentCore-Runtime-User-Id標頭,則該值應衍生自已驗證委託人的內容 (IAM 呼叫者身分或使用者字符宣告),而非任意客戶提供的值。這可防止已驗證的使用者模擬其他使用者。

  • 不需要的情況下拒絕 ForUserId — 對於始終有 JWT 可用的工作負載,請在 IAM 政策bedrock-agentcore:InvokeAgentRuntimeForUser中明確拒絕 bedrock-agentcore:GetWorkloadAccessTokenForUserId和 。這可確保所有使用者識別都會通過密碼編譯驗證的 JWT 路徑。

  • 為您的身分驗證方法設定 VPC 端點政策 — VPC 端點政策只能根據 IAM 主體來限制發起人,不能根據 OAuth 使用者。對於以 OAuth 為基礎的請求,請在端點政策*中將 Principal設定為 。針對以 SigV4-based身分驗證,指定允許的 IAM 身分。

如需實作詳細資訊,請參閱使用傳入身分驗證和傳出身分驗證進行身分驗證和授權

登入資料和秘密管理

保護您的代理程式和執行期環境使用的登入資料:

  • 使用 AgentCore Identity 進行傳出身分驗證 — AgentCore Identity 可安全地管理 OAuth 憑證和 API 金鑰,防止憑證暴露在客服人員程式碼或日誌中。將其用於所有第三方服務存取 (Slack、GitHub、Zoom)。

  • 了解 MMDS 憑證公開 — MicroVM Metadata Service (MMDS) 為在 VM 中執行的任何程式碼提供執行角色憑證,類似於 EC2 的 IMDS。將執行角色許可範圍限定為僅代理程式所需的內容。

  • 啟用 MMDSv2 — 從 2026 年 6 月 30 日開始,您的代理程式執行時間必須啟用 MMDSv2。無法叫用未啟用 MMDSv2 的執行期,並傳回 ValidationException。若要啟用,請在 true中呼叫 UpdateAgentRuntime,並將 requireMMDSV2設定為 metadataConfiguration。如需解決此錯誤的詳細資訊,請參閱 MMDSv2 ValidationException 疑難排解

  • 非根使用者身分執行容器 — 建置自訂容器映像時,請將它們設定為以非根使用者身分執行。這可限制潛在程式碼執行漏洞的影響。

  • 個別的使用者委派和自主登入資料 — 當您的代理程式代表特定使用者時,請使用使用者委派身分驗證 (授權碼授予)。當代理程式獨立運作時,使用自動身分驗證 (用戶端登入資料授予)。

如需詳細資訊,請參閱登入資料管理和 AgentCore Identity

網路安全

安全的網路存取您的 AgentCore 執行期環境:

  • 在 VPC 中部署執行時間以進行私有資源存取 — 設定 VPC 連線以存取私有資料庫、內部 APIs和服務,而不會將其暴露到網際網路。如需組態詳細資訊,請參閱設定 VPC 的 AgentCore 執行期

  • Use AWS PrivateLink for API 存取 — 為 AgentCore 資料平面 (com.amazonaws.region.bedrock-agentcore) 和控制平面 (com.amazonaws.region.bedrock-agentcore-control) 建立介面 VPC 端點,以避免網際網路周遊。如需詳細資訊,請參閱 Use AWS PrivateLink

  • 將最低權限套用至安全群組 — 定義僅允許最低必要流量的傳出規則。除非必要,否則請勿開啟廣泛的對外存取。

  • 設定容器代理程式所需的 VPC 端點 — 對於 VPC 模式容器代理程式,為 ECR (com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api)、S3 (com.amazonaws.region.s3 閘道端點) 和 CloudWatch Logs () 設定 VPC 端點com.amazonaws.region.logs。S3 閘道端點消除了 ECR 映像層提取的 NAT 閘道資料處理費用。

  • 將容器代理程式的 S3 閘道端點政策範圍限制為僅限 Amazon ECR 用於映像層儲存的S3貯體:

    { "Statement": [ { "Sid": "AllowECRLayerAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::prod-region-starport-layer-bucket/*"] } ] }

    將 取代region為您的 AWS 區域識別符 (例如 us-east-2)。

  • 為直接程式碼部署代理程式範圍 S3 閘道端點政策 - 對於以 zip 為基礎的部署,請將政策限制為內部服務擁有的程式碼成品儲存貯體。新增 aws:PrincipalServiceName條件,以確保只有 AgentCore 服務主體可以透過此端點政策存取儲存貯體:

    { "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::acr-code-*-region-an", "arn:aws:s3:::acr-code-*-region-an/*" ], "Condition": { "StringEquals": { "aws:PrincipalServiceName": "bedrock-agentcore.amazonaws.com" } } } ] }

    將 取代region為您的 AWS 區域識別符 (例如 us-west-2)。AgentCore 程式碼成品儲存貯體會在帳戶區域命名空間一般用途儲存貯體中建立。只有 AWS 可以擁有服務使用的實際儲存貯體名稱。aws:PrincipalServiceName 條件可確保只有 AgentCore 服務主體可以透過此端點政策存取儲存貯體。如果您也使用持久性檔案系統,請將工作階段儲存貯體新增至此政策。如需詳細資訊,請參閱設定 VPC 的 AgentCore 執行期

  • 使用具有 NAT 閘道的私有子網路 — 公有子網路不提供 AgentCore 執行期的網際網路存取。一律將執行時間 ENIs放在具有 NAT 閘道路由的私有子網路中,以進行傳出網際網路存取。

  • 傳輸安全性 — 所有連線都使用 TLS 1.2 或更高版本。WebSocket 連線,包括 InvokeAgentRuntimeCommandShell,僅透過 HTTPS 使用 WSS (WebSocket Secure)。不支援純文字ws://連線。

  • 強制執行標頭限制 — 自訂標頭限制為每個值 4KB 和每個執行時間 20 個標頭。Authorization 標頭會保留給具有 OAuth 傳入存取權的客服人員。

加密

AgentCore 執行期透過靜態和傳輸中的加密來保護資料:

  • 傳輸中加密 — 用戶端和 AgentCore 執行期以及 AgentCore 執行期及其相依項之間的所有通訊都會使用 TLS 1.2 或更高版本進行保護。這是預設設定,不需要額外的設定。

  • 靜態加密 — 根據預設,靜態資料會使用 AWS Key Management Service (AWS KMS) 中 AWS 擁有的加密金鑰進行加密。

  • 盡可能使用 TLS 1.3 — 雖然 TLS 1.2 是最小值,但 AWS 建議使用 TLS 1.3 以提高安全性和效能。

如需詳細資訊,請參閱資料加密

稽核和監控

實作全方位稽核,以偵測和調查安全事件:

  • 啟用 CloudTrail 記錄 — AWS CloudTrail 記錄 API 呼叫InvokeAgentRuntimeCommand,包括 InvokeAgentRuntimeInvokeAgentRuntimeCommandShell、 和 控制平面操作。每個記錄都包含發起人身分、時間戳記、來源 IP 地址和回應狀態。

  • 使用 CloudWatch Logs 進行命令稽核 — AgentCore 執行期會將請求 ID 和輸入命令傳送至代理程式的 CloudWatch Logs 日誌群組。使用這些日誌來維護在工作階段中執行之命令的稽核線索。

  • 使用請求 IDs 關聯日誌 — 使用請求 ID 將 CloudTrail 記錄 (稱為 API) 與 CloudWatch Logs (執行的命令) 關聯。

  • 設定指標篩選條件和警示 — 設定 CloudWatch Logs 指標篩選條件,以偵測非預期的命令模式或未經授權的存取嘗試。建立警示以通知您的團隊異常情況。

  • 記錄使用者 ID 委派關係 — 使用 X-Amzn-Bedrock-AgentCore-Runtime-User-Id標頭時,請記錄已驗證的 IAM 主體與使用者 ID 值之間的關係,以供稽核之用。

  • 啟用 VPC 流程日誌 — 對於 VPC 連線的執行時間,啟用 VPC 流程日誌以稽核網路層級流量並識別非預期的通訊模式。

  • 定期檢閱 CloudTrail 日誌 — 定期檢閱日誌是否有未經授權的存取嘗試,尤其是敏感工作負載。

共同責任模型

了解 AWS 與您之間的安全責任劃分:

AWS 責任:
  • 在硬體層級保護基礎設施和microVM隔離

  • 適用於所有部署模式的作業系統核心修補

  • 適用於直接程式碼部署的語言執行期修補

  • 網路基礎設施安全性

  • 服務可用性和彈性

您的責任:
  • 代理程式程式碼安全性和相依性管理

  • IAM 存取控制和資源政策

  • 在執行階段工作階段中執行命令的安全性

  • Session-to-user映射強制執行

  • 容器映像更新 (適用於容器部署) — 定期使用最新的安全基礎映像重建

  • 輸入驗證和提示注入預防 — 包括在使用受管繫帶時驗證InvokeHarness輸入 (請參閱 Harness 共用 AgentCore 執行期信任界限)

  • 網路組態 (安全群組、VPC 端點、路由表)

重要

對於直接程式碼部署,AgentCore 執行期會自動將安全修補程式套用至執行期作業系統。AgentCore 執行期在到達支援結束日期後,不會將安全修補程式套用至程式設計語言執行期。已取代的執行時間會依原狀提供,且可能包含未修補的漏洞。如需支援的執行時間,請參閱程式碼部署支援的執行時間

注意

安全修補程式可能會公開依賴先前不安全行為的現有程式碼問題。如果無法接受此風險,請使用容器映像來部署您的代理程式。

Harness 共用 AgentCore 執行期信任界限

受管繫帶是以 AgentCore 執行期為基礎。它不會在發起人和 microVM 之間新增安全層。安全界限與 AgentCore 執行期相同:IAM 或 JWT 身分驗證結合 microVM 隔離。

如需完整的安全模型,包括信任界限詳細資訊、模型組態參數風險,以及輸入驗證指引,請參閱利用共同責任模型

命令執行安全性

AgentCore 執行期提供兩個命令執行 APIs:

  • InvokeAgentRuntimeCommand — 透過 HTTP/2 執行一次性、非互動式命令。IAM 動作:bedrock-agentcore:InvokeAgentRuntimeCommand

  • InvokeAgentRuntimeCommandShell — 具有持久性 PTY 存取的互動式 WebSocket shell 工作階段。IAM 動作:bedrock-agentcore:InvokeAgentRuntimeCommandShell

兩個 APIs都在相同的 microVM 隔離界限內運作,並共用相同的安全模型。將下列實務套用至兩者:

  • 了解安全界限 — 命令具有容器檔案系統的完整存取權,以及microVM內任何已設定的登入資料或秘密。隔離界限是 microVM 本身。在共同責任模型下,您必須負責在執行期容器中執行之任何程式碼的安全性。

  • 將確定性操作用於確定性任務 — 將 InvokeAgentRuntimeCommandInvokeAgentRuntimeCommandShell用於測試、git 和組建等操作。請勿透過 LLM 透過 路由決定性操作InvokeAgentRuntime

  • 限制誰可以執行命令 — 使用 IAM 政策來限制哪些委託人可以呼叫 InvokeAgentRuntimeCommandInvokeAgentRuntimeCommandShell。並非所有可以叫用代理程式的使用者都應該能夠執行任意命令。資源 ARN 範例:arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent

  • WebSocket shell 僅使用 wss: InvokeAgentRuntimeCommandShell連線僅透過 WSS (WebSocket Secure) 建立。不支援純文字ws://連線。來電者在 WebSocket 升級時透過 SigV4 驗證。

  • 流量保留在您的網路中 — 設定 VPC 端點,以避免命令執行 API 呼叫的網際網路周遊。

  • 設定適當的逾時 — 根據預期的執行持續時間設定命令逾時,以防止資源浪費耗盡程序。

如需完整詳細資訊,請參閱在執行階段工作階段中執行命令

VM 平台伺服器

每個 AgentCore Runtime microVM 都包含在 localhost 上執行的平台伺服器。此伺服器會管理 VM 工作階段生命週期、儲存操作,並提供 Shell 存取以支援執行時間操作。平台伺服器完全在代理程式的 microVM 內執行,這是隔離界限,不包含服務關鍵基礎設施程式碼,也無法存取其他工作階段或客戶的工作負載。

重要

在 microVM 中執行的所有項目,包括與平台伺服器的互動,都是您在共同責任模型下的責任。如果代理程式程式碼或工具與平台伺服器互動,影響僅限於目前的 VM 工作階段,而不會影響其他工作階段或跨隔離界限。不過,未經授權的存取可能會中斷工作階段的 VM 生命週期,或在該工作階段中提供 Shell 存取。

請遵循這些實務來限制對平台伺服器不必要的存取:

  • 限制代理程式程式碼中的 localhost 存取 — 設定您的代理程式和任何聯網工具,以防止對 localhost 進行不受限制的存取。除非特定整合需要,否則客服人員程式碼不應對 localhost 進行任意 HTTP 呼叫。

  • 僅允許列出附屬設定所需的連接埠 — 如果您的架構在 localhost container-in-container或附屬模式,則明確允許僅列出附屬服務使用的特定連接埠。請勿開啟廣泛的 localhost 存取。

  • 稽核 localhost 連線的網路工具 — 檢閱您提供給代理程式的任何工具 (例如 HTTP 請求工具或一般聯網公用程式),以確保他們無法對 localhost 端點提出意外的請求。在工具層級套用 URL 篩選或允許清單。