View a markdown version of this page

Amazon Bedrock AgentCore Gateway 리소스에 대한 CloudTrail 데이터 이벤트 로깅 활성화 - Amazon Bedrock AgentCore

Amazon Bedrock AgentCore Gateway 리소스에 대한 CloudTrail 데이터 이벤트 로깅 활성화

CloudTrail 데이터 이벤트를 사용하여 Amazon Bedrock AgentCore Gateway 요청에 대한 정보를 가져올 수 있습니다. Gateway에 대해 CloudTrail 데이터 이벤트를 활성화하려면 Amazon S3 버킷이 지원하는 CloudTrail에서 수동으로 추적을 생성해야 합니다.

주요 고려 사항

  • 데이터 이벤트 로깅에는 추가 요금이 발생합니다. 데이터 이벤트는 기본적으로 캡처되지 않으므로 명시적으로 활성화해야 합니다. 계정에 대해 데이터 이벤트가 활성화되어 있는지 확인합니다.

  • 높은 워크로드를 생성하는 게이트웨이를 사용하면 짧은 시간 내에 수천 개의 로그를 빠르게 생성할 수 있습니다. 사용량이 많은 게이트웨이에 대해 CloudTrail 데이터 이벤트를 활성화하도록 선택한 기간에 유의하세요.

  • CloudTrail은 게이트웨이 데이터 이벤트 로그를 선택한 Amazon S3 버킷에 저장합니다. 별도의 AWS 계정에서 버킷을 사용하여 여러 리소스의 이벤트를 중앙 위치로 더 잘 구성하여 쿼리 및 분석을 더 쉽게 수행할 수 있습니다.

CloudTrail에서 추적에 대한 데이터 이벤트를 로깅할 때는 고급 이벤트 선택기를 사용하여 게이트웨이 작업에 대한 데이터 이벤트를 로깅해야 합니다.

AWS CLI
  1. AWS CLI를 사용하여 게이트웨이 리소스에 대해 CloudTrail 데이터 이벤트를 활성화하려면 터미널에서 다음 명령을 실행할 수 있습니다.

    aws cloudtrail put-event-selectors \ --trail-name brac-gateway-canary-trail-prod-us-east-1 \ --region us-east-1 \ --advanced-event-selectors '[ { "Name": "GatewayDataEvents", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Gateway"] } ] } ]'
AWS CDK
  1. 다음 예제에서는 AWS CDK를 사용하여 AgentCore Gateway 데이터 이벤트를 사용하여 CloudTrail 추적을 생성하는 방법을 보여줍니다.

    import { Construct } from 'constructs'; import { Trail, CfnTrail } from 'aws-cdk-lib/aws-cloudtrail'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { Effect, PolicyStatement, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; import { RemovalPolicy } from 'aws-cdk-lib'; export interface DataEventTrailProps { /** * Whether to enable multi-region trail */ isMultiRegionTrail?: boolean; /** * Whether to include global service events */ includeGlobalServiceEvents?: boolean; /** * AWS region */ region: string; /** * Environment account ID */ account: string; } /** * Creates a CloudTrail trail configured to capture data events for Bedrock Agent Core Gateway */ export class BedrockAgentCoreDataEventTrail extends Construct { /** * The CloudTrail trail */ public readonly trail: Trail; /** * The S3 bucket for CloudTrail logs */ public readonly logsBucket: Bucket; constructor(scope: Construct, id: string, props: DataEventTrailProps) { super(scope, id); // Create S3 bucket for CloudTrail logs const bucketName = `brac-gateway-cloudtrail-logs-${props.account}-${props.region}`; this.logsBucket = new Bucket(this, 'CloudTrailLogsBucket', { bucketName, removalPolicy: RemovalPolicy.RETAIN, }); // Create trail name (suffixing region since regional trail) const trailName = `brac-gateway-trail-${props.region}`; // Add CloudTrail bucket policy this.logsBucket.addToResourcePolicy( new PolicyStatement({ sid: 'AWSCloudTrailAclCheck', effect: Effect.ALLOW, principals: [new ServicePrincipal('cloudtrail.amazonaws.com')], actions: ['s3:GetBucketAcl'], resources: [this.logsBucket.bucketArn], conditions: { StringEquals: { 'aws:SourceArn': `arn:aws:cloudtrail:${props.region}:${props.account}:trail/${trailName}`, }, }, }), ); this.logsBucket.addToResourcePolicy( new PolicyStatement({ sid: 'AWSCloudTrailWrite', effect: Effect.ALLOW, principals: [new ServicePrincipal('cloudtrail.amazonaws.com')], actions: ['s3:PutObject'], resources: [this.logsBucket.arnForObjects(`AWSLogs/${props.account}/*`)], conditions: { StringEquals: { 's3:x-amz-acl': 'bucket-owner-full-control', 'aws:SourceArn': `arn:aws:cloudtrail:${props.region}:${props.account}:trail/${trailName}`, }, }, }), ); // Create CloudTrail trail this.trail = new Trail(this, 'GatewayDataEventTrail', { trailName, bucket: this.logsBucket, isMultiRegionTrail: props.isMultiRegionTrail ?? false, includeGlobalServiceEvents: props.includeGlobalServiceEvents ?? true, enableFileValidation: true, }); // Add advanced event selectors for Bedrock Agent Core Gateway data events const cfnTrail = this.trail.node.defaultChild as CfnTrail; // Define the advanced event selectors const advancedEventSelectors = [ { // Log Bedrock Agent Core Gateway Data Events only fieldSelectors: [ { field: 'eventCategory', equalTo: ['Data'], }, { field: 'resources.type', equalTo: ['AWS::BedrockAgentCore::Gateway'], }, ], }, ]; // Clear any existing event selectors and set advanced event selectors cfnTrail.eventSelectors = undefined; cfnTrail.advancedEventSelectors = advancedEventSelectors; } }