View a markdown version of this page

교차 계정 메모리 액세스 - Amazon Bedrock AgentCore

교차 계정 메모리 액세스

Amazon Bedrock AgentCore 메모리는 교차 계정 액세스를 지원하므로 메모리 리소스와 소비 에이전트가 여러 계정에 걸쳐 있는 다중 계정 아키텍처를 구축할 수 AWS 있습니다. 교차 계정 액세스에는 다음 두 가지 시나리오가 포함됩니다.

  • 다른 계정의 데이터 영역 작업 - 계정 B의 보안 주체는 계정 A의 메모리 리소스에 대해 메모리 데이터 영역 APIs(이벤트 생성, 레코드 쓰기, 레코드 검색)를 호출할 수 있습니다. 이는 리소스 기반 정책을 메모리 리소스에 연결하여 구성됩니다.

    상위 수준 단계:

    1. 리소스 기반 정책을 연결하여 교차 계정 액세스를 허용하도록 메모리 리소스를 구성합니다.

    2. 계정 B의 데이터 영역 API 호출에서 메모리 ARN을 참조합니다.

  • 다른 계정의 전송 대상 - 계정 A의 메모리 리소스는 계정 B에 있는 Amazon S3 버킷, Amazon SNS 주제 및 Amazon Kinesis Data Streams에 페이로드를 전송하고 이벤트를 스트리밍할 수 있습니다. 이는 대상 리소스의 메모리 실행 역할 및 리소스 정책을 통해 메모리 생성 시 구성됩니다.

    상위 수준 단계:

    1. 계정 A에서 대상 리소스에 액세스할 수 있는 권한을 가진 메모리 실행 역할을 생성합니다.

    2. 계정 B의 대상 리소스에 리소스 기반 정책을 추가하여 실행 역할을 허용합니다.

    3. 실행 역할 및 교차 계정 리소스 ARNs을 참조하여 계정 A에서 메모리를 생성합니다.

사전 조건

교차 계정 메모리 액세스를 구성하기 전에 다음이 있는지 확인합니다.

  • 리소스 소유자 계정(계정 A)에서 생성된 메모리 리소스

  • 메모리 리소스의 전체 ARN(예: arn:aws:bedrock-agentcore:us-east-1:<account-id>:memory/<memory-id>)

  • 데이터 영역 액세스의 경우: 원하는 bedrock-agentcore 작업을 허용하는 자격 증명 기반 권한이 있는 계정 B의 IAM 역할 또는 사용자

  • 전송 대상의 경우: 계정 B에서 생성된 대상 S3 버킷, SNS 주제 또는 Kinesis Data Stream

교차 계정 데이터 영역 액세스

다른 계정의 보안 주체가 메모리 리소스에 대해 직접 메모리 데이터 영역 APIs 호출하도록 허용할 수 있습니다. 이는 PutResourcePolicy API를 사용하여 리소스 기반 정책을 메모리에 연결하여 구성됩니다. 리소스 기반 정책에 대한 자세한 내용은 Amazon Bedrock AgentCore에 대한 리소스 기반 정책을 참조하세요.

작동 방식

  1. 계정 A는 메모리 리소스를 생성합니다.

  2. 계정 A는 PutResourcePolicy API를 사용하여 리소스 기반 정책을 메모리 리소스에 연결하여 계정 B의 보안 주체에게 특정 작업을 부여합니다.

  3. 계정 B의 보안 주체는 메모리 데이터 영역 APIs 호출하여 계정 A의 메모리 리소스 전체 ARN을 로 지정합니다memory-id.

  4. AWS 는 메모리의 리소스 기반 정책과 계정 B 보안 주체에 연결된 자격 증명 기반 정책을 모두 평가합니다. 둘 다 작업을 허용하면(정책이 명시적으로 거부하지 않는 경우) 요청이 성공합니다.

지원되는 작업

모든 메모리 데이터 영역 작업에 대해 교차 계정 액세스 권한을 부여할 수 있습니다. 다음 표에는 사용 가능한 작업이 나열되어 있습니다.

작업 설명

bedrock-agentcore:CreateEvent

단기 메모리 이벤트 생성

bedrock-agentcore:GetEvent

특정 이벤트 검색

bedrock-agentcore:DeleteEvent

특정 이벤트 삭제

bedrock-agentcore:ListEvents

세션의 이벤트 나열

bedrock-agentcore:ListActors

메모리에 액터 나열

bedrock-agentcore:ListSessions

액터에 대한 세션 나열

bedrock-agentcore:GetMemoryRecord

특정 메모리 레코드 검색

bedrock-agentcore:ListMemoryRecords

네임스페이스에 메모리 레코드 나열

bedrock-agentcore:RetrieveMemoryRecords

의미상 메모리 레코드 검색

bedrock-agentcore:DeleteMemoryRecord

특정 메모리 레코드 삭제

bedrock-agentcore:BatchCreateMemoryRecords

여러 메모리 레코드 생성

bedrock-agentcore:BatchUpdateMemoryRecords

여러 메모리 레코드 업데이트

bedrock-agentcore:BatchDeleteMemoryRecords

여러 메모리 레코드 삭제

bedrock-agentcore:ListMemoryExtractionJobs

메모리에 대한 추출 작업 나열

bedrock-agentcore:StartMemoryExtractionJobs

실패한 추출 작업 다시 시작

메모리에 리소스 기반 정책 연결

다른 계정에 단일 작업 부여

다음 예제에서는 계정 B(<account-B-id>)에 계정 A()의 메모리 리소스BatchCreateMemoryRecords에서를 호출할 수 있는 권한을 부여합니다.<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>" } ] }'

다른 계정에 여러 작업 부여

다음 예제에서는 계정 B에 메모리 레코드 및 이벤트에 대한 전체 읽기 및 쓰기 액세스 권한을 부여합니다.

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

특정 IAM 역할에 대한 액세스 권한 부여

최소 권한 원칙을 따르려면 전체 계정이 아닌 특정 역할에 대한 액세스 권한을 부여합니다.

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

리소스 기반 정책 제거

교차 계정 데이터 영역 액세스를 취소하려면 리소스 기반 정책을 삭제합니다.

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

정책을 삭제한 후 후속 교차 계정 요청은를 반환합니다AccessDeniedException.

계정 B에서 데이터 영역 APIs 호출

리소스 기반 정책이 연결되면 계정 B의 보안 주체는 전체 메모리 ARN을 로 지정하여 데이터 영역 APIs를 호출할 수 있습니다memory-id.

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

계정 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

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

교차 계정 전송 대상

사용자 지정(자체 관리형) 전략 또는 스트림 전송 구성을 사용하여 메모리를 생성하면 Amazon Bedrock AgentCore는 메모리 실행 역할을 사용하여 대상 리소스에 페이로드를 전달합니다. 이러한 리소스가 다른 계정에 있는 경우 양쪽을 구성해야 합니다. 계정 A의 실행 역할에는 리소스에 액세스할 수 있는 권한이 필요하고 계정 B의 리소스에는 계정 A의 액세스를 허용하는 정책이 필요합니다.

작동 방식

  1. 계정 A에서 메모리 실행 역할을 허용하는 리소스 기반 정책을 사용하여 계정 B에서 대상 리소스(S3 버킷, SNS 주제 또는 Kinesis Data Stream)를 생성합니다.

  2. Amazon Bedrock AgentCore에 대한 신뢰 정책과 계정 B의 교차 계정 리소스에 대한 액세스 권한을 부여하는 권한 정책을 사용하여 계정 A에서 메모리 실행 역할을 생성합니다.

  3. 실행 역할과 교차 계정 리소스 ARNs을 참조하여 계정 A에서 메모리를 생성합니다.

  4. Amazon Bedrock AgentCore는 실행 역할을 수임하고 이를 사용하여 계정 B의 리소스에 페이로드를 전달하거나 이벤트를 스트리밍합니다.

메모리 실행 역할 설정

계정 A에서 메모리 실행 역할을 생성합니다. 역할에는 Amazon Bedrock AgentCore가 이를 수임하도록 허용하는 신뢰 정책과 계정 B의 대상 리소스에 대한 액세스 권한을 부여하는 권한 정책이 필요합니다.

신뢰 정책:

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

권한 정책(사용 중인 리소스와 관련된 문만 포함):

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

계정 B에서 S3 버킷 정책 구성

계정 B의 S3 버킷에 다음 리소스 기반 정책을 추가하여 계정 A의 메모리 실행 역할이 페이로드를 전송하도록 허용합니다.

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

계정 B에서 SNS 주제 정책 구성

계정 B의 SNS 주제에 다음 리소스 기반 정책을 추가하여 계정 A의 메모리 실행 역할이 알림을 게시하도록 허용합니다.

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

계정 B에서 Kinesis Data Stream 정책 구성

계정 A의 메모리 실행 역할이 이벤트를 스트리밍할 수 있도록 계정 B의 Kinesis Data Stream에 다음 리소스 기반 정책을 추가합니다.

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

교차 계정 S3 및 SNS를 사용하여 메모리 생성

실행 역할 및 리소스 정책을 구성한 후 계정 A에서 계정 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 } } } } ]'

교차 계정 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" } ] } } ] }'

모범 사례

  • 최소 권한 부여 - 교차 계정 보안 주체에 필요한 특정 작업 만 부여합니다.

  • 특정 보안 주체 사용 - 전체 계정 루트가 아닌 특정 IAM 역할에 대한 액세스 권한을 부여하여 블래스트 반경을 제한합니다.

  • 교차 계정 액세스 감사 -  AWS CloudTrail을 사용하여 메모리 리소스에 대한 교차 계정 API 호출을 모니터링합니다.

  • 별도의 읽기 및 쓰기 액세스 - 읽기 전용 소비자와 읽기-쓰기 생산자를 위한 별도의 정책 설명을 생성합니다.

  • 정책을 제거하기 전에 검증 - 리소스 기반 정책을 제거하기 전에 다른 계정의 활성 워크로드가 액세스에 의존하지 않는지 확인합니다.