

# Amazon Bedrock AgentCore Gateway 리소스에 대한 CloudTrail 데이터 이벤트 로깅 활성화
<a name="enabling-cloudtrail-data-event-logging"></a>

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

 **주요 고려 사항** 
+ 데이터 이벤트 로깅에는 추가 요금이 발생합니다. 데이터 이벤트는 기본적으로 캡처되지 않으므로 명시적으로 활성화해야 합니다. 계정에 대해 데이터 이벤트가 활성화되어 있는지 확인합니다.
+ 높은 워크로드를 생성하는 게이트웨이를 사용하면 짧은 시간 내에 수천 개의 로그를 빠르게 생성할 수 있습니다. 사용량이 많은 게이트웨이에 대해 CloudTrail 데이터 이벤트를 활성화하도록 선택한 기간에 유의하세요.
+ CloudTrail은 게이트웨이 데이터 이벤트 로그를 선택한 Amazon S3 버킷에 저장합니다. 별도의 AWS 계정에서 버킷을 사용하여 여러 리소스의 이벤트를 중앙 위치로 더 잘 구성하여 쿼리 및 분석을 더 쉽게 수행할 수 있습니다.

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

**Example**  

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

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;
     }
   }
   ```