View a markdown version of this page

Cross-account acceso a la memoria - Amazon Bedrock AgentCore

Cross-account acceso a la memoria

Amazon Bedrock AgentCore Memory admite el acceso entre cuentas, lo que le permite crear arquitecturas de varias cuentas en las que los recursos de memoria y los agentes de consumo abarquen varias cuentas. AWS Cross-account el acceso cubre dos escenarios:

  • Operaciones del plano de datos desde otra cuenta: los directores de la cuenta B pueden llamar a las API del plano de datos de memoria (crear eventos, escribir registros, recuperar registros) a un recurso de memoria de la cuenta A. Esto se configura adjuntando al recurso de memoria una política basada en recursos.

    High-level pasos:

    1. Configure su recurso de memoria para permitir el acceso entre cuentas adjuntando una política basada en los recursos.

    2. Haga referencia al ARN de memoria en las llamadas a la API de su plano de datos desde la cuenta B.

  • Destinos de entrega en otra cuenta: el recurso de memoria de la cuenta A puede entregar cargas útiles y transmitir eventos a buckets de Amazon S3, temas de Amazon SNS y Amazon Kinesis Data Streams que residen en la cuenta B. Esto se configura en el momento de la creación de la memoria mediante la función de ejecución de memoria y las políticas de recursos de los recursos de destino.

    High-level pasos:

    1. Cree una función de ejecución de memoria en la cuenta A con permisos para acceder a los recursos de destino.

    2. Agregue políticas basadas en recursos a los recursos de destino de la cuenta B para permitir la función de ejecución.

    3. Cree la memoria en la cuenta A, haciendo referencia a la función de ejecución y a los ARN de recursos entre cuentas.

Requisitos previos

Antes de configurar el acceso a la memoria entre cuentas, compruebe que dispone de lo siguiente:

  • Un recurso de memoria creado en la cuenta del propietario del recurso (cuenta A)

  • El ARN completo del recurso de memoria (por ejemplo,) arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id>

  • Para el acceso al plano de datos: un rol o usuario de IAM en la cuenta B con permisos basados en la identidad que permitan realizar las acciones deseadas bedrock-agentcore

  • Para los destinos de entrega: el bucket de S3 de destino, el tema de SNS o Kinesis Data Stream creado en la cuenta B

Cross-account acceso al plano de datos

Puede permitir que los directores de otra cuenta llamen a las API del plano de datos de memoria directamente desde su recurso de memoria. Esto se configura adjuntando una política basada en recursos a la memoria mediante la API. PutResourcePolicy Para obtener más información sobre las políticas basadas en recursos, consulte las Resource-based políticas de Amazon Bedrock. AgentCore

Funcionamiento

  1. La cuenta A crea un recurso de memoria.

  2. La cuenta A adjunta una política basada en recursos al recurso de memoria mediante la PutResourcePolicy API, que permite realizar acciones específicas a una entidad principal de la cuenta B.

  3. Un director de la cuenta B llama a las API del plano de datos de memoria y especifica el ARN completo del recurso de memoria de la cuenta A como. memory-id

  4. AWS evalúa tanto la política basada en los recursos de la memoria como la política basada en la identidad asociada al principal de la cuenta B. Si ambas permiten la acción (y ninguna política la deniega explícitamente), la solicitud se realiza correctamente.

Acciones admitidas

Puedes conceder acceso entre cuentas para cualquier acción del plano de datos de memoria. En la siguiente tabla se enumeran las acciones disponibles:

Action Description (Descripción)

bedrock-agentcore:CreateEvent

Cree un evento de memoria a corto plazo

bedrock-agentcore:GetEvent

Recupera un evento específico

bedrock-agentcore:DeleteEvent

Eliminar un evento específico

bedrock-agentcore:ListEvents

Listar los eventos de una sesión

bedrock-agentcore:ListActors

Enumere los actores de una memoria

bedrock-agentcore:ListSessions

Enumere las sesiones de un actor

bedrock-agentcore:GetMemoryRecord

Recupera un registro de memoria específico

bedrock-agentcore:ListMemoryRecords

Listar los registros de memoria en un espacio de nombres

bedrock-agentcore:RetrieveMemoryRecords

Busque semánticamente los registros de memoria

bedrock-agentcore:DeleteMemoryRecord

Eliminar un registro de memoria específico

bedrock-agentcore:BatchCreateMemoryRecords

Crea varios registros de memoria

bedrock-agentcore:BatchUpdateMemoryRecords

Actualice varios registros de memoria

bedrock-agentcore:BatchDeleteMemoryRecords

Eliminar varios registros de memoria

bedrock-agentcore:ListMemoryExtractionJobs

Listar los trabajos de extracción de una memoria

bedrock-agentcore:StartMemoryExtractionJobs

Reinicie los trabajos de extracción fallidos

Adjunte una política basada en recursos a una memoria

Otorga una sola acción a otra cuenta

El siguiente ejemplo otorga permiso a la cuenta B (<account-B-id>) para invocar BatchCreateMemoryRecords un recurso de memoria de la cuenta 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>" } ] }'

Otorga varias acciones a otra cuenta

El siguiente ejemplo otorga a la cuenta B pleno acceso de lectura y escritura a los registros y eventos de la 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>" } ] }'

Conceda acceso a una función de IAM específica

Para seguir el principio del privilegio mínimo, concede acceso a un rol específico en lugar de a toda la cuenta:

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

Elimine una política basada en recursos

Para revocar el acceso al plano de datos entre cuentas, elimine la política basada en recursos:

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

Tras eliminar la política, cualquier solicitud posterior entre cuentas devolverá un. AccessDeniedException

Llame a las API del plano de datos desde la cuenta B

Una vez adjunta la política basada en recursos, un director de la cuenta B puede llamar a las API del plano de datos especificando el ARN de memoria completa como. memory-id

Cree registros de memoria a partir de la cuenta 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" } ]'

Recupere los registros de memoria de la cuenta 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 eventos desde la cuenta 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 destinos de entrega

Cuando crea una memoria con una estrategia personalizada (autogestionada) o una configuración de entrega de transmisiones, Amazon Bedrock AgentCore utiliza una función de ejecución de memoria para entregar las cargas útiles a los recursos de destino. Cuando esos recursos residen en una cuenta diferente, debe configurar ambas partes: la función de ejecución de la cuenta A necesita permisos para acceder a los recursos, y los recursos de la cuenta B necesitan políticas que permitan el acceso desde la cuenta A.

Funcionamiento

  1. Los recursos de destino (un bucket de S3, un tema de SNS o Kinesis Data Stream) en la cuenta B con políticas basadas en recursos que permiten la función de ejecución de memoria en la cuenta A.

  2. Cree una función de ejecución de memoria en la cuenta A con una política de confianza para Amazon Bedrock AgentCore y una política de permisos que conceda acceso a los recursos multicuenta de la cuenta B.

  3. La memoria se crea en la cuenta A, haciendo referencia a la función de ejecución y a los ARN de los recursos multicuenta.

  4. Amazon Bedrock AgentCore asume la función de ejecución y la utiliza para entregar cargas útiles o transmitir eventos a los recursos de la cuenta B.

Configure la función de ejecución de la memoria

Cree la función de ejecución de memoria en la cuenta A. La función requiere una política de confianza que permita AgentCore a Amazon Bedrock asumirla y una política de permisos que conceda acceso a los recursos de destino en la cuenta B.

Política de confianza:

{ "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/*" } } } ] }

Política de permisos (incluya únicamente las declaraciones pertinentes a los recursos que esté utilizando):

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

Configure la política de bucket de S3 en la cuenta B

Agrega la siguiente política basada en recursos al depósito de S3 de la cuenta B para permitir que la función de ejecución de memoria de la cuenta A entregue cargas útiles:

{ "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>/*" } ] }

Configure la política temática de SNS en la cuenta B

Agregue la siguiente política basada en recursos al tema de SNS en la cuenta B para permitir que la función de ejecución de memoria de la cuenta A publique las notificaciones:

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

Configurar la política de transmisión de datos de Kinesis en la cuenta B

Añada la siguiente política basada en recursos al flujo de datos de Kinesis en la cuenta B para permitir que la función de ejecución de memoria de la cuenta A transmita eventos:

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

Cree una memoria con S3 y SNS multicuenta

Tras configurar la función de ejecución y las políticas de recursos, cree una memoria en la cuenta A que haga referencia a los recursos entre cuentas de la cuenta 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 } } } } ]'

Cree un recuerdo con la transmisión multicuenta de Kinesis

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

Prácticas recomendadas

  • Otorgue el mínimo privilegio: conceda únicamente las acciones específicas que necesite el director de varias cuentas.

  • Utilice directores específicos: conceda acceso a funciones de IAM específicas en lugar de a toda la raíz de la cuenta para limitar el radio de acción.

  • Audite el acceso entre cuentas: utilícelo AWS CloudTrail para supervisar las llamadas de API entre cuentas a sus recursos de memoria.

  • Acceso de lectura y escritura separados: cree declaraciones de políticas independientes para los consumidores que solo leen y los productores de libros de lectura y escritura.

  • Valide las políticas antes de eliminarlas: antes de eliminar una política basada en recursos, compruebe que ninguna carga de trabajo activa en otras cuentas dependa del acceso.