Cross-account Speicherzugriff
Amazon Bedrock AgentCore Memory unterstützt den kontenübergreifenden Zugriff, sodass Sie Architekturen mit mehreren Konten erstellen können, bei denen sich Speicherressourcen und verbrauchende Agenten über mehrere Konten erstrecken. AWS Cross-account Access deckt zwei Szenarien ab:
-
Datenebenenoperationen von einem anderen Konto aus — Prinzipale in Konto B können Speicherdatenebenen-APIs (Ereignisse erstellen, Datensätze schreiben, Datensätze abrufen) für eine Speicherressource in Konto A aufrufen. Dies wird konfiguriert, indem der Speicherressource eine ressourcenbasierte Richtlinie zugewiesen wird.
High-level Schritte:
-
Konfigurieren Sie Ihre Speicherressource so, dass sie kontoübergreifenden Zugriff ermöglicht, indem Sie eine ressourcenbasierte Richtlinie anhängen.
-
Verweisen Sie in Ihren API-Aufrufen auf der Datenebene von Konto B auf den Speicher-ARN.
-
-
Lieferziele in einem anderen Konto — Ihre Speicherressource in Konto A kann Payloads und Stream-Ereignisse an Amazon S3 S3-Buckets, Amazon SNS SNS-Themen und Amazon Kinesis Data Streams senden, die sich in Konto B befinden. Dies wird bei der Speichererstellung über die Speicherausführungsrolle und die Ressourcenrichtlinien für die Zielressourcen konfiguriert.
High-level Schritte:
-
Erstellen Sie eine Speicherausführungsrolle in Konto A mit Berechtigungen für den Zugriff auf die Zielressourcen.
-
Fügen Sie ressourcenbasierte Richtlinien zu den Zielressourcen in Konto B hinzu, um die Ausführungsrolle zuzulassen.
-
Erstellen Sie den Speicher in Konto A und verweisen Sie dabei auf die Ausführungsrolle und die kontoübergreifenden Ressourcen-ARNs.
-
Themen
Voraussetzungen
Bevor Sie den kontenübergreifenden Speicherzugriff konfigurieren, stellen Sie sicher, dass Sie über Folgendes verfügen:
-
Eine Speicherressource, die im Konto des Ressourcenbesitzers (Konto A) erstellt wurde
-
Der vollständige ARN der Speicherressource (zum Beispiel
arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id>) -
Für den Zugriff auf Datenebene: eine IAM-Rolle oder ein IAM-Benutzer in Konto B mit identitätsbasierten Berechtigungen, die die gewünschten Aktionen ermöglichen
bedrock-agentcore -
Für Lieferziele: der Ziel-S3-Bucket, das SNS-Thema oder der Kinesis Data Stream, der in Konto B erstellt wurde
Cross-account Zugriff auf die Datenebene
Sie können Principals in einem anderen Konto erlauben, APIs für die Speicherdatenebene direkt für Ihre Speicherressource aufzurufen. Dies wird konfiguriert, indem dem Speicher mithilfe der API eine ressourcenbasierte Richtlinie zugewiesen wird. PutResourcePolicy Weitere Informationen zu ressourcenbasierten Richtlinien finden Sie unter Resource-based Richtlinien für Amazon Bedrock. AgentCore
Funktionsweise
-
Konto A erstellt eine Speicherressource.
-
Konto A fügt der Speicherressource mithilfe der
PutResourcePolicyAPI eine ressourcenbasierte Richtlinie zu, wodurch einem Prinzipal in Konto B bestimmte Aktionen gewährt werden. -
Ein Principal in Konto B ruft APIs auf Speicherdatenebene auf und gibt den vollständigen ARN der Speicherressource in Konto A als an
memory-id. -
AWS bewertet sowohl die ressourcenbasierte Richtlinie für den Speicher als auch die identitätsbasierte Richtlinie, die dem Prinzipal für Konto B zugeordnet ist. Wenn beide die Aktion zulassen (und keine Richtlinie sie ausdrücklich ablehnt), ist die Anfrage erfolgreich.
Unterstützte Aktionen
Sie können kontenübergreifenden Zugriff für jede Aktion auf der Speicherdatenebene gewähren. In der folgenden Tabelle sind die verfügbaren Aktionen aufgeführt:
| Action | Description |
|---|---|
|
|
Erstellen Sie ein Kurzzeitgedächtnisereignis |
|
|
Rufen Sie ein bestimmtes Ereignis ab |
|
|
Löschen Sie ein bestimmtes Ereignis |
|
|
Ereignisse in einer Sitzung auflisten |
|
|
Listet die Akteure in einem Speicher auf |
|
|
Listet Sessions für einen Schauspieler auf |
|
|
Rufen Sie einen bestimmten Speicherdatensatz ab |
|
|
Listet Speicherdatensätze in einem Namespace auf |
|
|
Semantisch nach Speicherdatensätzen suchen |
|
|
Löschen Sie einen bestimmten Speicherdatensatz |
|
|
Erstellen Sie mehrere Speicherdatensätze |
|
|
Aktualisieren Sie mehrere Speicherdatensätze |
|
|
Löschen Sie mehrere Speicherdatensätze |
|
|
Listet Extraktionsaufträge für einen Speicher auf |
|
|
Fehlgeschlagene Extraktionsaufträge neu starten |
Ordnen Sie einem Speicher eine ressourcenbasierte Richtlinie zu
Erteilen Sie einem anderen Konto eine einzelne Aktion
Im folgenden Beispiel wird Konto B (<account-B-id>) die Berechtigung erteilt, eine Speicherressource in Konto A (<account-A-id>) aufzurufenBatchCreateMemoryRecords:
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>" } ] }'
Erteilen Sie einem anderen Konto mehrere Aktionen
Das folgende Beispiel gewährt Konto B vollen Lese- und Schreibzugriff auf Speicherdatensätze und Ereignisse:
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>" } ] }'
Gewähren Sie Zugriff auf eine bestimmte IAM-Rolle
Um dem Prinzip der geringsten Rechte zu folgen, gewähren Sie Zugriff auf eine bestimmte Rolle und nicht auf das gesamte Konto:
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>" } ] }'
Entfernen Sie eine ressourcenbasierte Richtlinie
Um den kontoübergreifenden Zugriff auf die Datenebene zu widerrufen, löschen Sie die ressourcenbasierte Richtlinie:
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>"
Nach dem Löschen der Richtlinie geben alle nachfolgenden kontoübergreifenden Anfragen eine zurück. AccessDeniedException
Rufen Sie Datenebenen-APIs von Konto B aus auf
Sobald die ressourcenbasierte Richtlinie angehängt ist, kann ein Principal in Konto B Datenebenen-APIs aufrufen, indem er den Vollspeicher-ARN als. memory-id
Speicherdatensätze von Konto B aus erstellen:
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" } ]'
Speicherdatensätze von Konto B abrufen:
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
Ereignisse aus Konto B erstellen:
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 Lieferziele
Wenn Sie einen Speicher mit einer benutzerdefinierten (selbstverwalteten) Strategie oder Stream-Bereitstellungskonfiguration erstellen, AgentCore verwendet Amazon Bedrock eine Speicherausführungsrolle, um Payloads an Ihre Zielressourcen zu liefern. Wenn sich diese Ressourcen in einem anderen Konto befinden, müssen Sie beide Seiten konfigurieren: Die Ausführungsrolle in Konto A benötigt Berechtigungen, um auf die Ressourcen zuzugreifen, und die Ressourcen in Konto B benötigen Richtlinien, die den Zugriff von Konto A aus ermöglichen.
Funktionsweise
-
Sie erstellen Zielressourcen (S3-Bucket, SNS-Thema oder Kinesis Data Stream) in Konto B mit ressourcenbasierten Richtlinien, die die Speicherausführungsrolle in Konto A zulassen.
-
Sie erstellen eine Speicherausführungsrolle in Konto A mit einer Vertrauensrichtlinie für Amazon Bedrock AgentCore und einer Berechtigungsrichtlinie, die Zugriff auf die kontoübergreifenden Ressourcen in Konto B gewährt.
-
Sie erstellen den Speicher in Konto A und verweisen dabei auf die Ausführungsrolle und die kontoübergreifenden Ressourcen-ARNs.
-
Amazon Bedrock AgentCore übernimmt die Ausführungsrolle und verwendet sie, um Payloads oder Stream-Ereignisse an die Ressourcen in Konto B zu senden.
Richten Sie die Rolle „Memory Execution“ ein
Erstellen Sie die Speicherausführungsrolle in Konto A. Die Rolle erfordert eine Vertrauensrichtlinie, die es Amazon Bedrock ermöglicht, sie AgentCore zu übernehmen, und eine Berechtigungsrichtlinie, die Zugriff auf die Zielressourcen in Konto B gewährt.
Vertrauensrichtlinie:
{ "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/*" } } } ] }
Berechtigungsrichtlinie (schließen Sie nur die Aussagen ein, die für die von Ihnen verwendeten Ressourcen relevant sind):
{ "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>" } ] }
Konfigurieren Sie die S3-Bucket-Richtlinie in Konto B
Fügen Sie dem S3-Bucket in Konto B die folgende ressourcenbasierte Richtlinie hinzu, damit die Speicherausführungsrolle in Konto A Payloads bereitstellen kann:
{ "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>/*" } ] }
Konfigurieren Sie die SNS-Themenrichtlinie in Konto B
Fügen Sie dem SNS-Thema in Konto B die folgende ressourcenbasierte Richtlinie hinzu, damit die Speicherausführungsrolle in Konto A Benachrichtigungen veröffentlichen kann:
{ "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>" } ] }
Konfigurieren Sie die Kinesis Data Stream-Richtlinie in Konto B
Fügen Sie dem Kinesis Data Stream in Konto B die folgende ressourcenbasierte Richtlinie hinzu, damit die Speicherausführungsrolle in Konto A Ereignisse streamen kann:
{ "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>" } ] }
Erstellen Sie einen Speicher mit kontoübergreifendem S3 und SNS
Nachdem Sie die Ausführungsrolle und die Ressourcenrichtlinien konfiguriert haben, erstellen Sie in Konto A einen Speicher, der auf die kontenübergreifenden Ressourcen in Konto B verweist:
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 } } } } ]'
Erstellen Sie einen Speicher mit kontoübergreifendem Kinesis-Streaming
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" } ] } } ] }'
Bewährte Methoden
-
Geringste Rechte gewähren — Gewähren Sie nur die spezifischen Aktionen, die für den kontoübergreifenden Prinzipal erforderlich sind.
-
Spezifische Hauptbenutzer verwenden — Gewähren Sie Zugriff auf bestimmte IAM-Rollen statt auf den gesamten Kontostamm, um den Explosionsradius zu begrenzen.
-
Kontoübergreifenden Zugriff prüfen — Wird verwendet AWS CloudTrail , um kontoübergreifende API-Aufrufe auf Ihre Speicherressourcen zu überwachen.
-
Getrennter Lese- und Schreibzugriff — Erstellen Sie separate Richtlinienerklärungen für Nutzer, die nur über Lese-/Schreibzugriff verfügen, und für Hersteller mit Lese-/Schreibzugriff.
-
Vor dem Entfernen von Richtlinien überprüfen — Stellen Sie vor dem Entfernen einer ressourcenbasierten Richtlinie sicher, dass keine aktiven Workloads in anderen Konten vom Zugriff abhängen.