View a markdown version of this page

Cross-account accesso alla memoria - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Cross-account accesso alla memoria

Amazon Bedrock AgentCore Memory supporta l'accesso tra 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 l'accesso copre due scenari:

  • Operazioni sul piano dati da un altro account: i titolari 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 operazione viene configurata allegando una policy basata sulle risorse alla risorsa di memoria.

    High-level passaggi:

    1. Configura la tua risorsa di memoria per consentire l'accesso tra più account allegando una policy basata sulle risorse.

    2. Fai riferimento all'ARN di memoria nelle chiamate API del tuo piano dati dall'Account B.

  • Destinazioni di consegna in un altro account: la tua risorsa di memoria nell'Account A può fornire payload ed eventi di streaming a bucket Amazon S3, argomenti Amazon SNS e Amazon Kinesis Data Streams che risiedono nell'account B. Ciò viene configurato 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:

    1. Crea un ruolo di esecuzione della memoria nell'Account A con le autorizzazioni per accedere alle risorse di destinazione.

    2. Aggiungi politiche basate sulle risorse alle risorse di destinazione nell'Account B per consentire il ruolo di esecuzione.

    3. Crea la memoria nell'Account A, facendo riferimento al ruolo di esecuzione e agli ARN delle risorse tra account.

Prerequisiti

Prima di configurare l'accesso alla memoria tra più account, verifica di avere:

  • 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 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

Puoi consentire ai principali di un altro account di chiamare le API del piano dati di memoria direttamente sulla tua risorsa di memoria. Questa operazione viene configurata allegando una policy basata sulle risorse alla memoria tramite l'API. PutResourcePolicy Per ulteriori informazioni sulle politiche basate sulle risorse, consulta le politiche per Amazon Bedrock. Resource-based AgentCore

Come funziona

  1. L'account A crea una risorsa di memoria.

  2. L'account A allega una politica basata sulle risorse alla risorsa di memoria utilizzando l'PutResourcePolicyAPI, concedendo azioni specifiche a un principale nell'account B.

  3. Un principale nell'account B chiama le API del piano dati di memoria, specificando l'ARN completo della risorsa di memoria nell'account A come. memory-id

  4. AWS valuta sia la politica basata sulle risorse sulla memoria sia la politica basata sull'identità associata all'entità principale dell'Account B. Se entrambi consentono l'azione (e nessuna politica la nega esplicitamente), la richiesta ha esito positivo.

Azioni supportate

È possibile concedere l'accesso tra account per qualsiasi azione del piano dati di memoria. La tabella seguente elenca le azioni disponibili:

Azione Description

bedrock-agentcore:CreateEvent

Crea un evento di memoria a breve termine

bedrock-agentcore:GetEvent

Recupera un evento specifico

bedrock-agentcore:DeleteEvent

Eliminare un evento specifico

bedrock-agentcore:ListEvents

Elenca gli eventi in una sessione

bedrock-agentcore:ListActors

Elenca gli attori in una memoria

bedrock-agentcore:ListSessions

Elenca le sessioni per un attore

bedrock-agentcore:GetMemoryRecord

Recupera un record di memoria specifico

bedrock-agentcore:ListMemoryRecords

Elenca i record di memoria in un namespace

bedrock-agentcore:RetrieveMemoryRecords

Cerca semanticamente i record di memoria

bedrock-agentcore:DeleteMemoryRecord

Eliminare un record di memoria specifico

bedrock-agentcore:BatchCreateMemoryRecords

Crea più record di memoria

bedrock-agentcore:BatchUpdateMemoryRecords

Aggiorna più record di memoria

bedrock-agentcore:BatchDeleteMemoryRecords

Eliminare più record di memoria

bedrock-agentcore:ListMemoryExtractionJobs

Elenca i lavori di estrazione di una memoria

bedrock-agentcore:StartMemoryExtractionJobs

Riavviare i processi di estrazione non riusciti

Allega una policy basata sulle risorse a una memoria

Concedi una singola azione a un altro account

L'esempio seguente concede all'Account B (<account-B-id>) il permesso di richiamare una BatchCreateMemoryRecords 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 di memoria e agli eventi:

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>" } ] }'

Rimuovere una politica basata sulle risorse

Per revocare l'accesso al data plane tra più account, 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 policy, 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ò chiamare le API del data plane specificando l'ARN di 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 dello streaming, 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, è necessario configurare entrambe le parti: il ruolo di esecuzione nell'Account A richiede le autorizzazioni per accedere alle risorse e le risorse nell'Account B necessitano di policy che consentano l'accesso dall'Account A.

Come funziona

  1. È possibile creare 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.

  2. 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 tra account nell'Account B.

  3. Crei la memoria nell'Account A, facendo riferimento al ruolo di esecuzione e agli ARN delle risorse tra account.

  4. Amazon Bedrock AgentCore assume il ruolo di esecuzione e lo utilizza per distribuire payload o eventi di streaming alle risorse nell'Account B.

Configura il ruolo di esecuzione della memoria

Crea il ruolo di esecuzione della memoria nell'Account A. Il ruolo richiede una politica di fiducia che AgentCore consenta ad Amazon Bedrock di assumerlo e una politica di autorizzazioni che conceda 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 sulle autorizzazioni (includi 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 politica del bucket S3 nell'account B

Aggiungi la seguente policy basata sulle risorse al bucket S3 nell'Account B per consentire al ruolo di esecuzione della memoria nell'Account A di erogare i 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 politica relativa agli argomenti SNS nell'Account B

Aggiungi la seguente politica basata sulle risorse all'argomento SNS nell'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

Aggiungete la seguente policy basata sulle risorse al 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 più account S3 e SNS

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 principale con più account.

  • Usa principi specifici: concedi l'accesso a ruoli IAM specifici anziché all'intero account root per limitare il raggio d'accesso.

  • Verifica l'accesso tra più account: utilizzalo AWS CloudTrail per monitorare le chiamate API tra più account alle tue risorse di memoria.

  • Accesso separato in lettura e scrittura: crea dichiarazioni politiche separate per i consumatori di sola lettura e per 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.