Cross-account accès à la mémoire
Amazon Bedrock AgentCore Memory prend en charge l'accès entre comptes, ce qui vous permet de créer des architectures multicomptes dans lesquelles les ressources de mémoire et les agents consommateurs s'étendent sur plusieurs comptes. AWS Cross-account access couvre deux scénarios :
-
Opérations du plan de données depuis un autre compte — Les principaux du compte B peuvent appeler des API du plan de données mémoire (créer des événements, écrire des enregistrements, récupérer des enregistrements) par rapport à une ressource mémoire du compte A. Cela est configuré en attachant une politique basée sur les ressources à la ressource mémoire.
High-level étapes :
-
Configurez votre ressource mémoire pour autoriser l'accès entre comptes en y joignant une politique basée sur les ressources.
-
Référencez l'ARN de la mémoire dans les appels d'API de votre plan de données depuis le compte B.
-
-
Destinations de livraison dans un autre compte : votre ressource mémoire du compte A peut acheminer des charges utiles et diffuser des événements vers les compartiments Amazon S3, les rubriques Amazon SNS et les flux de données Amazon Kinesis résidant dans le compte B. Cela est configuré au moment de la création de la mémoire par le biais du rôle d'exécution de la mémoire et des politiques de ressources sur les ressources cibles.
High-level étapes :
-
Créez un rôle d'exécution de mémoire dans le compte A avec des autorisations pour accéder aux ressources cibles.
-
Ajoutez des politiques basées sur les ressources aux ressources de destination dans le compte B pour autoriser le rôle d'exécution.
-
Créez la mémoire dans le compte A, en faisant référence au rôle d'exécution et aux ARN des ressources entre comptes.
-
Rubriques
Conditions préalables
Avant de configurer l'accès à la mémoire entre comptes, vérifiez que vous disposez des éléments suivants :
-
Une ressource mémoire créée dans le compte du propriétaire de la ressource (compte A)
-
L'ARN complet de la ressource mémoire (par exemple,
arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id>) -
Pour l'accès au plan de données : un rôle ou un utilisateur IAM dans le compte B avec des autorisations basées sur l'identité qui autorisent les actions souhaitées
bedrock-agentcore -
Pour les destinations de livraison : le compartiment S3 cible, la rubrique SNS ou le flux de données Kinesis créé dans le compte B
Cross-account accès au plan de données
Vous pouvez autoriser les principaux d'un autre compte à appeler les API du plan de données mémoire directement sur votre ressource mémoire. Ceci est configuré en attachant une politique basée sur les ressources à la mémoire à l'aide de l'PutResourcePolicyAPI. Pour plus d'informations sur les politiques basées sur les ressources, consultez les politiques d'Amazon Resource-based Bedrock. AgentCore
Comment ça marche
-
Le compte A crée une ressource mémoire.
-
Le compte A attache une politique basée sur les ressources à la ressource mémoire à l'aide de l'
PutResourcePolicyAPI, accordant des actions spécifiques à un principal du compte B. -
Un principal du compte B appelle les API du plan de données mémoire, en spécifiant l'ARN complet de la ressource mémoire du compte A sous la forme
memory-id. -
AWS évalue à la fois la politique basée sur les ressources appliquée à la mémoire et la politique basée sur l'identité attachée au compte B principal. Si les deux autorisent l'action (et qu'aucune politique ne la refuse explicitement), la demande aboutit.
Actions prises en charge
Vous pouvez accorder un accès entre comptes pour n'importe quelle action sur le plan de données de la mémoire. Le tableau suivant répertorie les actions disponibles :
| Action | Description |
|---|---|
|
|
Création d'un événement de mémoire à court terme |
|
|
Récupérer un événement spécifique |
|
|
Supprimer un événement spécifique |
|
|
Répertorier les événements d'une session |
|
|
Répertorier les acteurs d'un souvenir |
|
|
Lister les sessions pour un acteur |
|
|
Récupérer un enregistrement mémoire spécifique |
|
|
Lister les enregistrements de mémoire dans un espace de noms |
|
|
Rechercher sémantiquement des enregistrements en mémoire |
|
|
Supprimer un enregistrement mémoire spécifique |
|
|
Création de plusieurs enregistrements en mémoire |
|
|
Mettre à jour plusieurs enregistrements de mémoire |
|
|
Supprimer plusieurs enregistrements en mémoire |
|
|
Lister les tâches d'extraction pour une mémoire |
|
|
Redémarrer les tâches d'extraction ayant échoué |
Associer une politique basée sur les ressources à une mémoire
Accorder une seule action à un autre compte
L'exemple suivant autorise le compte B (<account-B-id>) à appeler BatchCreateMemoryRecords une ressource mémoire dans le compte 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>" } ] }'
Accorder plusieurs actions à un autre compte
L'exemple suivant accorde au compte B un accès complet en lecture et en écriture aux enregistrements et événements en mémoire :
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>" } ] }'
Accorder l'accès à un rôle IAM spécifique
Pour respecter le principe du moindre privilège, accordez l'accès à un rôle spécifique plutôt qu'à l'intégralité du compte :
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>" } ] }'
Supprimer une politique basée sur les ressources
Pour révoquer l'accès au plan de données entre comptes, supprimez la politique basée sur les ressources :
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>"
Après avoir supprimé la politique, toutes les demandes intercomptes suivantes renvoient unAccessDeniedException.
Appelez les API du plan de données depuis le compte B
Une fois que la politique basée sur les ressources est attachée, un principal du compte B peut appeler les API du plan de données en spécifiant l'ARN de la mémoire complète comme étant le. memory-id
Créez des enregistrements de mémoire à partir du compte 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" } ]'
Récupérez les enregistrements de mémoire du compte 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
Créez des événements à partir du compte 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 destinations de livraison
Lorsque vous créez une mémoire avec une stratégie personnalisée (autogérée) ou une configuration de diffusion de flux, Amazon Bedrock AgentCore utilise un rôle d'exécution de mémoire pour acheminer les charges utiles vers vos ressources de destination. Lorsque ces ressources résident dans un compte différent, vous devez configurer les deux côtés : le rôle d'exécution dans le compte A nécessite des autorisations pour accéder aux ressources, et les ressources dans le compte B ont besoin de politiques autorisant l'accès depuis le compte A.
Comment ça marche
-
Vous créez des ressources de destination (compartiment S3, rubrique SNS ou Kinesis Data Stream) dans le compte B avec des politiques basées sur les ressources qui autorisent le rôle d'exécution de la mémoire dans le compte A.
-
Vous créez un rôle d'exécution de mémoire dans le compte A avec une politique de confiance pour Amazon Bedrock AgentCore et une politique d'autorisation qui accorde l'accès aux ressources entre comptes du compte B.
-
Vous créez la mémoire dans le compte A, en faisant référence au rôle d'exécution et aux ARN des ressources entre comptes.
-
Amazon Bedrock AgentCore assume le rôle d'exécution et l'utilise pour transmettre des charges utiles ou diffuser des événements vers les ressources du compte B.
Configuration du rôle d'exécution de la mémoire
Créez le rôle d'exécution de la mémoire dans le compte A. Ce rôle nécessite une politique de confiance qui permet AgentCore à Amazon Bedrock de l'assumer, et une politique d'autorisation qui accorde l'accès aux ressources cibles dans le compte B.
Stratégie d'approbation :
{ "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/*" } } } ] }
Politique d'autorisation (incluez uniquement les déclarations relatives aux ressources que vous utilisez) :
{ "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>" } ] }
Configurer la politique du compartiment S3 dans le compte B
Ajoutez la politique basée sur les ressources suivante au compartiment S3 du compte B pour permettre au rôle d'exécution de la mémoire du compte A de fournir des charges utiles :
{ "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>/*" } ] }
Configurer la politique des rubriques SNS dans le compte B
Ajoutez la politique basée sur les ressources suivante à la rubrique SNS du compte B pour permettre au rôle d'exécution de la mémoire dans le compte A de publier des notifications :
{ "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>" } ] }
Configuration de la politique Kinesis Data Stream dans le compte B
Ajoutez la politique basée sur les ressources suivante au flux de données Kinesis dans le compte B pour permettre au rôle d'exécution de la mémoire dans le compte A de diffuser des événements :
{ "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>" } ] }
Créez une mémoire avec S3 et SNS entre comptes
Après avoir configuré le rôle d'exécution et les politiques de ressources, créez une mémoire dans le compte A qui référence les ressources entre comptes dans le compte 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 } } } } ]'
Créez une mémoire grâce au streaming Kinesis entre comptes
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" } ] } } ] }'
Bonnes pratiques
-
Accorder le moindre privilège : accordez uniquement les actions spécifiques requises par le principal multicompte.
-
Utilisez des principes spécifiques : accordez l'accès à des rôles IAM spécifiques plutôt qu'à la racine complète du compte afin de limiter le rayon d'action.
-
Audit de l'accès entre comptes : AWS CloudTrail à utiliser pour surveiller les appels d'API entre comptes vers vos ressources de mémoire.
-
Accès séparé en lecture et en écriture : créez des déclarations de politique distinctes pour les consommateurs en lecture seule et les producteurs en lecture-écriture.
-
Valider avant de supprimer des politiques : avant de supprimer une politique basée sur les ressources, vérifiez qu'aucune charge de travail active dans d'autres comptes ne dépend de l'accès.