Cross-account accesso alla memoria
Amazon Bedrock AgentCore Memory supporta l'accesso su più account, consentendoti di creare architetture multi-account in cui le risorse di memoria e gli agenti di consumo si estendono su più account. AWS Cross-account access copre due scenari:
-
Operazioni sul piano dati da un altro account: i responsabili dell'Account B possono richiamare le API del piano dati di memoria (creare eventi, scrivere record, recuperare record) su una risorsa di memoria nell'Account A. Questa configurazione viene configurata allegando una policy basata sulle risorse alla risorsa di memoria.
High-level passaggi:
-
Configura la tua risorsa di memoria per consentire l'accesso da più account allegando una policy basata sulle risorse.
-
Fai riferimento all'ARN di memoria nelle chiamate API del piano dati dall'Account B.
-
-
Destinazioni di consegna in un altro account: la tua risorsa di memoria nell'Account A può distribuire payload ed eventi in streaming a bucket Amazon S3, argomenti Amazon SNS e Amazon Kinesis Data Streams che risiedono nell'Account B. Questa configurazione viene configurata al momento della creazione della memoria tramite il ruolo di esecuzione della memoria e le politiche delle risorse sulle risorse di destinazione.
High-level passaggi:
-
Crea un ruolo di esecuzione della memoria nell'Account A con le autorizzazioni per accedere alle risorse di destinazione.
-
Aggiungi politiche basate sulle risorse alle risorse di destinazione nell'Account B per consentire il ruolo di esecuzione.
-
Crea la memoria nell'Account A, facendo riferimento al ruolo di esecuzione e agli ARN di risorse tra account.
-
Argomenti
Prerequisiti
Prima di configurare l'accesso alla memoria tra account diversi, verifica di disporre di:
-
Una risorsa di memoria creata nell'account del proprietario della risorsa (account A)
-
L'ARN completo della risorsa di memoria (ad esempio,)
arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id> -
Per l'accesso al piano dati: un ruolo o un utente IAM nell'Account B con autorizzazioni basate sull'identità che consentono le azioni desiderate
bedrock-agentcore -
Per le destinazioni di consegna: il bucket S3 di destinazione, l'argomento SNS o Kinesis Data Stream creato nell'Account B
Cross-account accesso al piano dati
È possibile consentire ai principali di un altro account di richiamare le API del piano dati di memoria direttamente sulla risorsa di memoria. Questo viene configurato allegando una policy basata sulle risorse alla memoria utilizzando l'API. PutResourcePolicy Per ulteriori informazioni sulle politiche basate sulle risorse, consulta le politiche Resource-based per Amazon Bedrock. AgentCore
Come funziona
-
L'account A crea una risorsa di memoria.
-
L'account A attribuisce una politica basata sulle risorse alla risorsa di memoria utilizzando l'
PutResourcePolicyAPI, concedendo azioni specifiche a un responsabile dell'account B. -
Un principale dell'Account B chiama le API del piano dati di memoria, specificando l'ARN completo della risorsa di memoria nell'Account A come.
memory-id -
AWS valuta sia la politica basata sulle risorse sulla memoria sia la politica basata sull'identità allegata al principale dell'Account B. Se entrambi consentono l'azione (e nessuna policy la nega esplicitamente), la richiesta ha esito positivo.
Azioni supportate
È possibile concedere l'accesso a più account per qualsiasi azione sul piano dati di memoria. La tabella seguente elenca le azioni disponibili:
| Azione | Description |
|---|---|
|
|
Crea un evento di memoria a breve termine |
|
|
Recupera un evento specifico |
|
|
Eliminare un evento specifico |
|
|
Elenca gli eventi in una sessione |
|
|
Elenca gli attori in una memoria |
|
|
Elenca le sessioni per un attore |
|
|
Recupera un record di memoria specifico |
|
|
Elenca i record di memoria in un namespace |
|
|
Cerca semanticamente i record di memoria |
|
|
Eliminare un record di memoria specifico |
|
|
Crea più record di memoria |
|
|
Aggiorna più record di memoria |
|
|
Eliminare più record di memoria |
|
|
Elenca i lavori di estrazione di una memoria |
|
|
Riavvia i processi di estrazione non riusciti |
Associa una politica basata sulle risorse a una memoria
Concedi una singola azione a un altro account
L'esempio seguente concede all'Account B (<account-B-id>) l'autorizzazione a richiamare BatchCreateMemoryRecords una risorsa di memoria nell'Account A (<account-A-id>):
aws bedrock-agentcore-control put-resource-policy \ --region us-east-1 \ --resource-arn "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountBatchCreate", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-B-id>:root" }, "Action": "bedrock-agentcore:BatchCreateMemoryRecords", "Resource": "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" } ] }'
Concedi più azioni a un altro account
L'esempio seguente concede all'Account B l'accesso completo in lettura e scrittura ai record e agli eventi di memoria:
aws bedrock-agentcore-control put-resource-policy \ --region us-east-1 \ --resource-arn "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountMemoryReadWrite", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-B-id>:root" }, "Action": [ "bedrock-agentcore:CreateEvent", "bedrock-agentcore:GetEvent", "bedrock-agentcore:ListEvents", "bedrock-agentcore:ListActors", "bedrock-agentcore:ListSessions", "bedrock-agentcore:BatchCreateMemoryRecords", "bedrock-agentcore:BatchUpdateMemoryRecords", "bedrock-agentcore:BatchDeleteMemoryRecords", "bedrock-agentcore:ListMemoryRecords", "bedrock-agentcore:RetrieveMemoryRecords", "bedrock-agentcore:GetMemoryRecord", "bedrock-agentcore:DeleteMemoryRecord" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" } ] }'
Concedi l'accesso a un ruolo IAM specifico
Per seguire il principio del privilegio minimo, concedi l'accesso a un ruolo specifico anziché all'intero account:
aws bedrock-agentcore-control put-resource-policy \ --region us-east-1 \ --resource-arn "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSpecificRoleReadAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-B-id>:role/AgentMemoryReaderRole" }, "Action": [ "bedrock-agentcore:RetrieveMemoryRecords", "bedrock-agentcore:ListMemoryRecords", "bedrock-agentcore:GetMemoryRecord" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" } ] }'
Rimuovi una politica basata sulle risorse
Per revocare l'accesso al piano dati tra account diversi, elimina la policy basata sulle risorse:
aws bedrock-agentcore-control delete-resource-policy \ --region us-east-1 \ --resource-arn "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>"
Dopo aver eliminato la politica, tutte le successive richieste tra account restituiscono un. AccessDeniedException
Chiama le API del piano dati dall'account B
Una volta allegata la policy basata sulle risorse, un principale dell'Account B può richiamare le API del piano dati specificando l'ARN della memoria completa come. memory-id
Crea record di memoria dall'account B:
aws bedrock-agentcore batch-create-memory-records \ --region us-east-1 \ --memory-id "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --records '[ { "requestIdentifier": "rec-001", "content": {"text": "User prefers morning meeting times before 10 AM"}, "namespaces": ["preferences/user-123"], "timestamp": "1729525989" } ]'
Recupera i record di memoria dall'account B:
aws bedrock-agentcore retrieve-memory-records \ --region us-east-1 \ --memory-id "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --namespace "preferences/user-123" \ --search-criteria '{"searchQuery": "meeting preferences"}' \ --max-results 10
Crea eventi dall'account B:
aws bedrock-agentcore create-event \ --region us-east-1 \ --memory-id "arn:aws:bedrock-agentcore:us-east-1:<account-A-id>:memory/<memory-id>" \ --actor-id "agent-in-account-b" \ --session-id "cross-account-session-1" \ --event-timestamp "$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")" \ --payload '[ { "conversational": { "content": {"text": "Schedule my standup for 9 AM tomorrow"}, "role": "USER" } } ]'
Cross-account destinazioni di consegna
Quando crei una memoria con una strategia personalizzata (autogestita) o una configurazione di distribuzione dei flussi, Amazon Bedrock AgentCore utilizza un ruolo di esecuzione della memoria per distribuire i payload alle risorse di destinazione. Quando tali risorse risiedono in un account diverso, devi configurare entrambe le parti: il ruolo di esecuzione nell'Account A richiede le autorizzazioni per accedere alle risorse, mentre le risorse nell'Account B necessitano di politiche che consentano l'accesso dall'Account A.
Come funziona
-
Si creano risorse di destinazione (bucket S3, argomento SNS o Kinesis Data Stream) nell'Account B con policy basate sulle risorse che consentono il ruolo di esecuzione della memoria nell'Account A.
-
Crei un ruolo di esecuzione della memoria nell'Account A con una politica di fiducia per Amazon Bedrock AgentCore e una politica di autorizzazioni che concede l'accesso alle risorse di più account nell'Account B.
-
Crei la memoria nell'Account A, facendo riferimento al ruolo di esecuzione e agli ARN delle risorse tra account.
-
Amazon Bedrock AgentCore assume il ruolo di esecuzione e lo utilizza per distribuire payload o trasmettere eventi alle risorse dell'Account B.
Configura il ruolo di esecuzione della memoria
Crea il ruolo di esecuzione della memoria nell'Account A. Il ruolo richiede una policy di fiducia che AgentCore consenta ad Amazon Bedrock di assumerlo e una policy di autorizzazioni che garantisca l'accesso alle risorse di destinazione nell'Account B.
Policy di trust:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:<region>:<account-A-id>:memory/*" } } } ] }
Politica in materia di autorizzazioni (include solo le dichiarazioni relative alle risorse che stai utilizzando):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3Access", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::<bucket-name-in-account-B>/*" }, { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:<region>:<account-B-id>:<topic-name>" }, { "Sid": "AllowKinesisAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecords", "kinesis:DescribeStream" ], "Resource": "arn:aws:kinesis:<region>:<account-B-id>:stream/<stream-name>" } ] }
Configura la policy del bucket S3 nell'Account B
Aggiungi la seguente politica basata sulle risorse al bucket S3 nell'Account B per consentire al ruolo di esecuzione della memoria nell'Account A di fornire payload:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMemoryExecutionRoleAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-A-id>:role/<memory-execution-role-name>" }, "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::<bucket-name>/*" } ] }
Configura la policy tematica SNS nell'Account B
Aggiungi la seguente politica basata sulle risorse all'argomento SNS dell'Account B per consentire al ruolo di esecuzione della memoria nell'Account A di pubblicare le notifiche:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMemoryExecutionRolePublish", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-A-id>:role/<memory-execution-role-name>" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:<region>:<account-B-id>:<topic-name>" } ] }
Configurare la policy Kinesis Data Stream nell'Account B
Aggiungi la seguente policy basata sulle risorse a Kinesis Data Stream nell'Account B per consentire al ruolo di esecuzione della memoria nell'Account A di trasmettere gli eventi:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMemoryExecutionRolePutRecords", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-A-id>:role/<memory-execution-role-name>" }, "Action": [ "kinesis:PutRecords", "kinesis:DescribeStream" ], "Resource": "arn:aws:kinesis:<region>:<account-B-id>:stream/<stream-name>" } ] }
Crea una memoria con S3 e SNS multiaccount
Dopo aver configurato il ruolo di esecuzione e le politiche relative alle risorse, crea una memoria nell'Account A che faccia riferimento alle risorse tra account nell'Account B:
aws bedrock-agentcore-control create-memory \ --region us-east-1 \ --name "cross-account-memory" \ --description "Memory with cross-account S3 and SNS delivery" \ --event-expiry-duration 30 \ --memory-execution-role-arn "arn:aws:iam::<account-A-id>:role/MemoryCrossAccountRole" \ --memory-strategies '[ { "customMemoryStrategy": { "name": "cross_account_strategy", "configuration": { "selfManagedConfiguration": { "triggerConditions": [ {"messageBasedTrigger": {"messageCount": 5}} ], "invocationConfiguration": { "topicArn": "arn:aws:sns:us-east-1:<account-B-id>:memory-notifications", "payloadDeliveryBucketName": "<bucket-name>" }, "historicalContextWindowSize": 10 } } } } ]'
Crea una memoria con lo streaming Kinesis tra più account
aws bedrock-agentcore-control create-memory \ --region us-east-1 \ --name "cross-account-streaming-memory" \ --description "Memory with cross-account Kinesis streaming" \ --event-expiry-duration 30 \ --memory-execution-role-arn "arn:aws:iam::<account-A-id>:role/MemoryCrossAccountRole" \ --stream-delivery-resources '{ "resources": [ { "kinesis": { "dataStreamArn": "arn:aws:kinesis:us-east-1:<account-B-id>:stream/memory-record-stream", "contentConfigurations": [ { "type": "MEMORY_RECORDS", "level": "FULL_CONTENT" } ] } } ] }'
Best practice
-
Concedi il privilegio minimo: concedi solo le azioni specifiche necessarie al gestore interaccount.
-
Utilizza principi specifici: concedi l'accesso a ruoli IAM specifici anziché alla radice dell'intero account per limitare il raggio d'azione.
-
Verifica l'accesso tra account: utilizzalo AWS CloudTrail per monitorare le chiamate API tra account alle tue risorse di memoria.
-
Accesso separato in lettura e scrittura: crea dichiarazioni politiche separate per i consumatori di sola lettura e i produttori di lettura/scrittura.
-
Convalida prima di rimuovere le policy: prima di rimuovere una policy basata sulle risorse, verifica che nessun carico di lavoro attivo in altri account dipenda dall'accesso.