本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
記憶體的精細存取控制
透過 Amazon Bedrock AgentCore 記憶體的精細存取控制 (FGAC),您可以將記憶體存取繫結至 OAuth 驗證的發起人身分。
當呼叫者使用 IAM AWS 登入資料到達記憶體時,您可以使用具有記憶體條件索引鍵的 IAM 身分型和資源型政策,依動作、記憶體資源和請求的演員、工作階段和命名空間範圍來限制存取。如需這些控制項,請參閱 Amazon Bedrock AgentCore 的 AgentCore 記憶體和資源型政策中的記憶體組織。 AgentCore
這些 IAM 控制項與呼叫記憶體的 IAM 主體相符。他們無法對 OAuth/JWT 身分表示鍵控的規則,因為 OAuth 驗證的發起人不是 IAM 主體。這對於呼叫者使用 OAuth 而非 AWS 登入資料進行身分驗證的應用程式來說很重要,例如,最終使用者透過 OpenID Connect 提供者登入的客服人員應用程式。在該架構中,HTTP 呼叫者通常是代理程式或後端,它會在每次請求時傳遞最終使用者的 (或代理程式自己的) JWT;FGAC 會根據該字符中的身分評估政策。使用 FGAC,您可以撰寫將請求屬性與字符宣告進行比較的政策,以便強制執行規則,例如:
-
呼叫者只能存取請求
actorId等於其 JWTsub宣告的事件。 -
發起人只能在自己的權杖宣告中攜帶的命名空間下擷取記憶體記錄。
-
只會將存取權授予呈現特定 OAuth 的發起人
client_id。
FGAC 政策也可以以 IAM 提供的相同動作、記憶體資源和請求屬性範圍為條件,因此單一政策可以結合發起人與他們可以存取的操作和資料。
FGAC for Memory 是使用 Amazon Bedrock AgentCore 中的政策實作。您可以將政策引擎連接至位於記憶體資源前方的閘道,並在 Cedar 政策網站上記錄的開放原始碼政策語言 Cedar 中撰寫政策
注意
FGAC for Memory 是建置在 AgentCore Memory 連接器上。首先設定具有記憶體連接器目標的閘道。如需詳細資訊,請參閱透過閘道存取 AgentCore 記憶體。
精細存取控制的運作方式
政策引擎會保留一組 Cedar 政策,並針對每個流經相關聯閘道的請求進行評估。在閘道驗證發起人並將請求解析為記憶體操作後,政策引擎會根據請求的委託人 (呼叫者)、動作 (記憶體操作)、資源 (閘道) 和內容 (請求的屬性,例如路徑參數和內文欄位) 來評估政策。評估預設為deny-by-default,並forbid覆寫 permit。
由於記憶體連接器可將每個記憶體操作作為 Cedar 動作及其請求欄位,因此您的政策可以允許或拒絕其請求屬性的特定記憶體操作和條件。了解 Cedar 政策和核心概念中描述了一般 Cedar 模型 — 政策結構forbid、permit/、 AgentCore::OAuthUser和 AgentCore::IamEntity 委託人類型、標籤和 context.input 。
設定記憶體的精細存取控制
注意
您可以透過 AWS 管理主控台、 AWS SDK 和 AWS 命令列界面 (AWS CLI) 設定記憶體的精細存取控制。
在您擁有具有記憶體連接器目標的閘道之後 (請參閱透過閘道存取 AgentCore 記憶體):
-
建立政策引擎並新增您的 Cedar 政策。如需這些步驟,請參閱建立政策引擎和建立政策。如需要寫入的政策,請參閱記憶體的政策範例。
-
透過設定閘道的 ,將政策引擎與記憶體資源前方的閘道建立關聯
policyEngineConfiguration。您可以在使用 CreateGateway 建立閘道時設定它,或稍後使用 UpdateGateway 新增它。
政策引擎mode控制政策是否強制執行 (ENFORCE) 或僅評估和記錄,而不會封鎖流量 (LOG_ONLY)。在 中測試您的政策,LOG_ONLY然後再切換至 ENFORCE ,以避免意外拒絕。如需強制執行模式、政策驗證和測試,請參閱驗證和測試政策和使用政策。
記憶體動作和請求屬性
本節是撰寫政策的記憶體特定參考:每個記憶體操作的 Cedar 動作 ID,以及 下可用的請求屬性context.input。
記憶體動作 ID
每個記憶體操作都是名為 的 Cedar 動作<target-name>___<METHOD>:<uri-template>,其中 <target-name>是您連接器目標的名稱。URI 會保留其路徑參數預留位置,而不會以具體值取代。在下表中,<target-name>將 取代為連接器目標的名稱。
| 記憶體操作 | Cedar 動作 ID |
|---|---|
|
ListEvents |
|
|
CreateEvent |
|
|
GetEvent |
|
|
DeleteEvent |
|
|
ListSessions |
|
|
ListActors |
|
|
RetrieveMemoryRecords |
|
|
ListMemoryRecords |
|
|
GetMemoryRecord |
|
|
DeleteMemoryRecord |
|
|
ListMemoryExtractionJobs |
|
|
StartMemoryExtractionJob |
|
不支援動作 ID 萬用字元;若要在一個政策中授予多個操作,請使用 列出它們action in […]。
注意
記憶體批次操作 (BatchCreateMemoryRecords、 和 BatchDeleteMemoryRecords) 無法做為 Cedar 動作使用BatchUpdateMemoryRecords,也無法受精細存取控制控制。每個 會在單一請求中攜帶多個記錄,政策引擎無法個別評估,因此無法套用每個記錄或每個命名空間條件。
您仍然可以使用 IAM 身分型和資源型政策 (例如,允許或拒絕bedrock-agentcore:BatchCreateMemoryRecords動作) 來允許或拒絕批次操作。缺少的只是每筆記錄的精細程度:在精細存取控制層中,批次操作是all-or-nothing。
請求內容欄位
閘道會在 下公開每個請求的屬性context.input,結合路徑參數和請求內文欄位。讀取每個欄位has之前,請先使用 保護它 (例如,context has input && context.input has actorId)。
路徑參數 (來自 URI):
-
context.input.memoryId -
context.input.actorId -
context.input.sessionId -
context.input.eventId -
context.input.memoryRecordId
請求主體欄位 (依操作而定,來自請求承載):
-
context.input.namespace -
context.input.namespacePath -
context.input.metadata -
context.input.filter -
context.input.payload -
和每個操作結構描述定義的其他內文欄位
可用的欄位會因 操作而有所不同。一個操作承載的欄位 (例如,在 actorId上ListEvents) 可能不會出現在相同政策相符的另一個操作上。
警告
參考內容欄位的政策會根據其範圍內動作的結構描述進行驗證,但並非針對請求在執行時間可能達到的每個操作進行驗證。如果政策參考傳入請求未承載的欄位,則可以成功建立政策並到達 ACTIVE,但在政策引擎評估請求時以403回應拒絕請求,因為參考欄位遺失。當您建立政策時,不會報告此條件。
若要避免意外拒絕:
-
將每個政策範圍限定為請求攜帶政策參考欄位的特定動作,並根據記憶體動作 ID 資料表中的每個操作確認這些欄位。
-
使用 保護每個欄位存取
has(例如,context has input && context.input has actorId),讓permit條件在欄位不存在時可預測地評估。 -
在強制執行政策之前,在
LOG_ONLY模式下測試政策,以便您可以觀察評估結果,而不會拒絕即時流量。如需詳細資訊,請參閱設定記憶體的精細存取控制。
您可以強制執行的項目
透過記憶體連接器的 FGAC 強制執行可在所有閘道的傳入身分驗證模式中使用。使用上述動作和屬性,您可以強制執行:
-
委託人類型閘道 — 範圍限定為僅限 OAuth 或僅限 IAM 的呼叫者符合或拒絕呼叫者類別的政策。
-
依身分隔離 —
actorId可能需要 等請求屬性,才能等於 JWT 中已驗證使用者或代理程式的sub宣告,允許擁有者並拒絕其他使用者。 -
命名空間隔離 — 比較請求的
namespace或namespacePath與常值,或與權杖宣告中攜帶的命名空間路徑, 會限制發起人可以擷取的記錄。 -
動作範圍:可以允許單一動作、一組動作或任何動作;不允許的動作會遭到拒絕。
-
路徑參數條件 — 路徑參數,例如
memoryId、actorId和sessionId。 -
Request-body 條件 — 內文欄位,例如
metadata和namespacePath。 -
資源鎖定 — 允許相符的閘道 ARN;拒絕不同的 ARN。
-
JWT 宣告條件 — 字符宣告,例如
sub和client_id閘道存取 (OAuth 傳入)。 -
IAM 身分條件 — 發起人的 IAM ARN 可以根據模式 (IAM 傳入) 進行比對。
如需實作這些政策的政策,請參閱記憶體的政策範例。
在現有記憶體上採用精細存取控制
主要隔離模式要求請求actorId上的 等於發起人的 JWT sub宣告 (context.input.actorId == principal.getTag("sub"))。現有的部署通常會使用內部使用者 ID 做為與其身分提供者sub的值不相符actorId的 。如果您的actorId值已經等於提供者的 sub,則不需要變更。否則,請選擇下列其中一種方法:
- 符合自訂 JWT 宣告
-
如果您的身分提供者可以發出已持有內部使用者 ID 的宣告 (例如,反映您
actorId配置的自訂宣告),請將 與該宣告進行比較,而不是sub- 例如context.input.actorId == principal.getTag("custom:app_user_id")。hasTag請先保護它。這可避免變更任何儲存的資料。 - 依命名空間隔離,而非
actorId -
如果您的長期記憶體記錄組織成每個使用者命名空間,請在命名空間上強制執行隔離,而不是在 上
actorId。讓您的身分提供者發出保留發起人完整命名空間路徑的宣告,並將請求namespacePath與該宣告進行比較。如需命名空間隔離模式,請參閱記憶體的政策範例。 -
actorId與 對齊sub -
如果您想要使用預設
actorId == sub模式,請遷移新的事件和記錄,以使用提供者的sub做為actorId。由於 AgentCore Memory 會將事件和記錄存放在actorId您提供的 下,因此這通常適用於未來,而不是重寫歷史資料;規劃兩個方案都可能存在的轉換期間。
提示
您可以先在 LOG_ONLY 模式中連接政策並檢閱評估日誌,在不影響即時流量的情況下驗證任何這些方法。請參閱設定記憶體的精細存取控制。
與其他存取控制選項的關係
政策引擎評估的 Cedar 政策是透過閘道的記憶體流量的身分感知、每個請求授權層。它們補充且可以與閘道的其他存取控制選項結合:
-
閘道攔截器可讓您在程式碼中實作自訂授權邏輯。如需詳細資訊,請參閱 Amazon Bedrock AgentCore Gateway 的精細存取控制。
-
記憶體資源上的資源型政策會控制哪些 IAM 主體 - 包括特定閘道 - 可以使用
aws:SourceArn和 等條件索引鍵來呼叫記憶體aws:PrincipalArn。如需詳細資訊,請參閱 Amazon Bedrock AgentCore 的資源型政策,以及傳出憑證模式如何影響記憶體存取控制。