

# Cross-account acceso a la memoria
<a name="memory-cross-account-access"></a>

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.

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

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

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

**Topics**
+ [Requisitos previos](#memory-cross-account-access-prerequisites)
+ [Cross-account acceso al plano de datos](#memory-cross-account-access-data-plane)
+ [Cross-account destinos de entrega](#memory-cross-account-access-delivery-destinations)
+ [Prácticas recomendadas](#memory-cross-account-access-best-practices)

## Requisitos previos
<a name="memory-cross-account-access-prerequisites"></a>

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
<a name="memory-cross-account-access-data-plane"></a>

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](resource-based-policies.md). AgentCore

### Funcionamiento
<a name="memory-cross-account-access-data-plane-how-it-works"></a>

1. La cuenta A crea un recurso de memoria.

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

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

1.  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
<a name="memory-cross-account-access-supported-actions"></a>

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
<a name="memory-cross-account-access-attach-policy"></a>

#### Otorga una sola acción a otra cuenta
<a name="memory-cross-account-access-grant-single-action"></a>

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
<a name="memory-cross-account-access-grant-multiple-actions"></a>

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
<a name="memory-cross-account-access-grant-specific-role"></a>

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
<a name="memory-cross-account-access-remove-policy"></a>

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
<a name="memory-cross-account-access-calling-from-account-b"></a>

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
<a name="memory-cross-account-access-delivery-destinations"></a>

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
<a name="memory-cross-account-access-delivery-how-it-works"></a>

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.

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

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

1. 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
<a name="memory-cross-account-access-execution-role"></a>

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
<a name="memory-cross-account-access-s3-policy"></a>

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
<a name="memory-cross-account-access-sns-policy"></a>

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 name="memory-cross-account-access-kinesis-policy"></a>

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
<a name="memory-cross-account-access-create-memory-s3-sns"></a>

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
<a name="memory-cross-account-access-create-memory-kinesis"></a>

```
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
<a name="memory-cross-account-access-best-practices"></a>
+  **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.