View a markdown version of this page

Cross-account accesso alla memoria - Amazon Bedrock AgentCore

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:

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

    2. 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:

    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 di risorse tra account.

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

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

  2. 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.

  3. 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

  4. 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

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

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

  1. 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.

  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 di più 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 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.