Cross-account akses memori
Amazon Bedrock AgentCore Memory mendukung akses lintas akun, memungkinkan Anda membangun arsitektur multi-akun di mana sumber daya memori dan agen konsumsi menjangkau banyak akun. AWS Cross-account akses mencakup dua skenario:
-
Operasi bidang data dari akun lain — Prinsipal di Akun B dapat memanggil API bidang data memori (membuat peristiwa, menulis catatan, mengambil catatan) terhadap sumber daya memori di Akun A. Ini dikonfigurasi dengan melampirkan kebijakan berbasis sumber daya ke sumber daya memori.
High-level langkah-langkah:
-
Konfigurasikan sumber daya memori Anda untuk mengizinkan akses lintas akun dengan melampirkan kebijakan berbasis sumber daya.
-
Referensikan memori ARN dalam panggilan API pesawat data Anda dari Akun B.
-
-
Tujuan pengiriman di akun lain — Sumber daya memori Anda di Akun A dapat mengirimkan muatan dan streaming peristiwa ke bucket Amazon S3, topik Amazon SNS, dan Amazon Kinesis Data Streams yang berada di Akun B. Ini dikonfigurasi pada waktu pembuatan memori melalui peran eksekusi memori dan kebijakan sumber daya pada sumber daya target.
High-level langkah-langkah:
-
Buat peran eksekusi memori di Akun A dengan izin untuk mengakses sumber daya target.
-
Tambahkan kebijakan berbasis sumber daya ke sumber daya tujuan di Akun B untuk mengizinkan peran eksekusi.
-
Buat memori di Akun A, referensi peran eksekusi dan ARN sumber daya lintas akun.
-
Prasyarat
Sebelum mengonfigurasi akses memori lintas akun, verifikasi bahwa Anda memiliki:
-
Sumber daya memori yang dibuat di akun pemilik sumber daya (Akun A)
-
ARN penuh dari sumber daya memori (misalnya,)
arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id> -
Untuk akses pesawat data: peran IAM atau pengguna di Akun B dengan izin berbasis identitas yang memungkinkan tindakan yang diinginkan
bedrock-agentcore -
Untuk tujuan pengiriman: bucket S3 target, topik SNS, atau Kinesis Data Stream yang dibuat di Akun B
Cross-account akses pesawat data
Anda dapat mengizinkan prinsipal di akun lain untuk memanggil API bidang data memori secara langsung terhadap sumber daya memori Anda. Ini dikonfigurasi dengan melampirkan kebijakan berbasis sumber daya ke memori menggunakan API. PutResourcePolicy Untuk informasi selengkapnya tentang kebijakan berbasis sumber daya, lihat kebijakan Resource-based untuk Amazon Bedrock. AgentCore
Cara kerjanya
-
Akun A menciptakan sumber daya memori.
-
Akun A melampirkan kebijakan berbasis sumber daya ke sumber daya memori menggunakan
PutResourcePolicyAPI, memberikan tindakan khusus kepada prinsipal di Akun B. -
Seorang prinsipal di Akun B memanggil API bidang data memori, menentukan ARN lengkap dari sumber daya memori di Akun A sebagai.
memory-id -
AWS mengevaluasi kebijakan berbasis sumber daya pada memori dan kebijakan berbasis identitas yang dilampirkan pada prinsipal Akun B. Jika keduanya mengizinkan tindakan (dan tidak ada kebijakan yang secara eksplisit menyangkalnya), permintaan berhasil.
Tindakan yang didukung
Anda dapat memberikan akses lintas akun untuk tindakan bidang data memori apa pun. Tabel berikut mencantumkan tindakan yang tersedia:
| Tindakan | Deskripsi |
|---|---|
|
|
Buat acara memori jangka pendek |
|
|
Ambil acara tertentu |
|
|
Hapus acara tertentu |
|
|
Daftar acara dalam sesi |
|
|
Buat daftar aktor dalam memori |
|
|
Daftar sesi untuk seorang aktor |
|
|
Ambil catatan memori tertentu |
|
|
Daftar catatan memori di namespace |
|
|
Secara semantik mencari catatan memori |
|
|
Hapus catatan memori tertentu |
|
|
Buat beberapa catatan memori |
|
|
Perbarui beberapa catatan memori |
|
|
Hapus beberapa catatan memori |
|
|
Buat daftar pekerjaan ekstraksi untuk memori |
|
|
Mulai ulang pekerjaan ekstraksi yang gagal |
Lampirkan kebijakan berbasis sumber daya ke memori
Berikan satu tindakan ke akun lain
Contoh berikut memberikan izin Akun B (<account-B-id>) untuk memanggil BatchCreateMemoryRecords sumber daya memori di Akun 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>" } ] }'
Berikan beberapa tindakan ke akun lain
Contoh berikut memberikan Akun B akses baca dan tulis penuh ke catatan memori dan peristiwa:
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>" } ] }'
Berikan akses ke peran IAM tertentu
Untuk mengikuti prinsip hak istimewa terkecil, berikan akses ke peran tertentu daripada seluruh akun:
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>" } ] }'
Menghapus kebijakan berbasis sumber daya
Untuk mencabut akses pesawat data lintas akun, hapus kebijakan berbasis sumber daya:
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>"
Setelah menghapus kebijakan, setiap permintaan lintas akun berikutnya mengembalikan file. AccessDeniedException
Panggil API pesawat data dari Akun B
Setelah kebijakan berbasis sumber daya dilampirkan, prinsipal di Akun B dapat memanggil API bidang data dengan menentukan ARN memori penuh sebagai ARN. memory-id
Buat catatan memori dari Akun 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" } ]'
Ambil catatan memori dari Akun 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
Membuat acara dari Akun 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 tujuan pengiriman
Saat Anda membuat memori dengan strategi kustom (dikelola sendiri) atau konfigurasi pengiriman streaming, Amazon Bedrock AgentCore menggunakan peran eksekusi memori untuk mengirimkan muatan ke sumber daya tujuan Anda. Jika sumber daya tersebut berada di akun yang berbeda, Anda harus mengonfigurasi kedua sisi: peran eksekusi di Akun A memerlukan izin untuk mengakses sumber daya, dan sumber daya di Akun B memerlukan kebijakan yang mengizinkan akses dari Akun A.
Cara kerjanya
-
Anda membuat sumber daya tujuan (bucket S3, topik SNS, atau Aliran Data Kinesis) di Akun B dengan kebijakan berbasis sumber daya yang memungkinkan peran eksekusi memori di Akun A.
-
Anda membuat peran eksekusi memori di Akun A dengan kebijakan kepercayaan untuk Amazon Bedrock AgentCore dan kebijakan izin yang memberikan akses ke sumber daya lintas akun di Akun B.
-
Anda membuat memori di Akun A, mereferensikan peran eksekusi dan ARN sumber daya lintas akun.
-
Amazon Bedrock AgentCore mengasumsikan peran eksekusi dan menggunakannya untuk mengirimkan muatan atau streaming peristiwa ke sumber daya di Akun B.
Mengatur peran eksekusi memori
Membuat peran eksekusi memori di Akun A. Peran tersebut memerlukan kebijakan kepercayaan yang memungkinkan Amazon Bedrock AgentCore untuk mengambilnya, dan kebijakan izin yang memberikan akses ke sumber daya target di Akun B.
Kebijakan kepercayaan:
{ "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/*" } } } ] }
Kebijakan izin (sertakan hanya pernyataan yang relevan dengan sumber daya yang Anda gunakan):
{ "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>" } ] }
Konfigurasikan kebijakan bucket S3 di Akun B
Tambahkan kebijakan berbasis sumber daya berikut ke bucket S3 di Akun B agar peran eksekusi memori di Akun A mengirimkan muatan:
{ "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>/*" } ] }
Konfigurasikan kebijakan topik SNS di Akun B
Tambahkan kebijakan berbasis sumber daya berikut ke topik SNS di Akun B agar peran eksekusi memori di Akun A memublikasikan notifikasi:
{ "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>" } ] }
Konfigurasikan kebijakan Kinesis Data Stream di Akun B
Tambahkan kebijakan berbasis sumber daya berikut ke Aliran Data Kinesis di Akun B untuk memungkinkan peran eksekusi memori di Akun A melakukan streaming peristiwa:
{ "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>" } ] }
Buat memori dengan cross-account S3 dan SNS
Setelah mengonfigurasi peran eksekusi dan kebijakan sumber daya, buat memori di Akun A yang mereferensikan sumber daya lintas akun di Akun 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 } } } } ]'
Buat memori dengan streaming Kinesis lintas akun
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" } ] } } ] }'
Praktik terbaik
-
Berikan hak istimewa paling sedikit — Hanya berikan tindakan spesifik yang diperlukan oleh prinsipal lintas akun.
-
Gunakan prinsip tertentu — Berikan akses ke peran IAM tertentu daripada seluruh root akun untuk membatasi radius ledakan.
-
Audit akses lintas akun — Gunakan AWS CloudTrail untuk memantau panggilan API lintas akun ke sumber daya memori Anda.
-
Akses baca dan tulis terpisah - Buat pernyataan kebijakan terpisah untuk konsumen hanya-baca dan produsen baca-tulis.
-
Validasi sebelum menghapus kebijakan — Sebelum menghapus kebijakan berbasis sumber daya, verifikasi bahwa tidak ada beban kerja aktif di akun lain yang bergantung pada akses.