수동 분할을 사용하여 Athena에서 CloudTrail 로그용 테이블 생성 - Amazon Athena

수동 분할을 사용하여 Athena에서 CloudTrail 로그용 테이블 생성

Athena 콘솔에서 CloudTrail 로그 파일용 테이블을 수동으로 생성한 다음 Athena에서 쿼리를 실행할 수 있습니다.

Athena 콘솔을 사용하여 CloudTrail 추적에 대한 Athena 테이블을 만들려면
  1. 다음 DDL 문을 복사하여 Athena 콘솔 쿼리 편집기에 붙여넣은 다음 요구 사항에 맞추어 수정합니다. CloudTrail 로그 파일은 퍼블릭 API 직접 호출에 대한 순서 지정된 스택 추적이 아니기 때문에 로그 파일에 있는 필드가 특정 순서로 표시되지 않음에 유의하십시오.

    CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, username:STRING, onbehalfof: STRUCT< userid: STRING, identitystorearn: STRING>, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, username:STRING>, ec2roledelivery:string, webidfederationdata: STRUCT< federatedprovider: STRING, attributes: map<string,string>> > >, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< arn:STRING, accountid:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING, vpcendpointaccountid STRING, eventcategory STRING, addendum STRUCT< reason:STRING, updatedfields:STRING, originalrequestid:STRING, originaleventid:STRING>, sessioncredentialfromconsole STRING, edgedevicedetails STRING, tlsdetails STRUCT< tlsversion:STRING, ciphersuite:STRING, clientprovidedhostheader:STRING> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';
    참고

    예제에 표시된 org.apache.hive.hcatalog.data.JsonSerDe를 사용하는 것이 좋습니다. com.amazon.emr.hive.serde.CloudTrailSerde가 존재하지만 현재 일부 최신 CloudTrail 필드는 처리하지 않습니다.

  2. (선택 사항) 테이블에 필요하지 않은 필드를 제거합니다. 특정 열 집합만 읽어야 하는 경우 테이블 정의에서 다른 열을 제외할 수 있습니다.

  3. 쿼리하고자 하는 로그 데이터가 포함된 Amazon S3 버킷을 가리키도록 s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/을 수정합니다. 이 예에서는 특정 계정에 대해 로그의 LOCATION 값을 사용하지만 애플리케이션에 적합한 정도의 특정성을 사용할 수 있습니다. 다음 예를 참조하세요.

    • 여러 계정의 데이터를 분석하려면 LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'를 이용해 LOCATION 범위 지정자를 롤백하여 모든 AWSLogs를 표시할 수 있습니다.

    • 특정 날짜, 계정 및 리전의 데이터를 분석하려면 LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.를 사용합니다.

    • 관리 이벤트 대신 네트워크 활동 데이터를 분석하려면 LOCATION 절의 /CloudTrail/을(를) /CloudTrail-NetworkActivity/(으)로 변경합니다.

    객체 계층 구조에서 최상위 수준을 사용하면 Athena로 쿼리할 때 가장 큰 유연성을 발휘할 수 있습니다.

  4. 필드가 올바르게 나열되는지 확인합니다. CloudTrail 레코드의 필드 전체 목록에 대한 자세한 내용은 CloudTrail 레코드 콘텐츠를 참조하세요.

    1단계의 예제 CREATE TABLE 문은 Hive JSON SerDe를 사용합니다. 이 예에서 requestparameters, responseelements, additionaleventdata 필드는 쿼리에서 STRING 형식으로 나열되지만, JSON에 사용되는 STRUCT 데이터 형식입니다. 따라서 이러한 필드에서 데이터를 가져오려면 JSON_EXTRACT 함수를 사용합니다. 자세한 내용은 문자열에서 JSON 데이터 추출 단원을 참조하십시오. 성능 향상을 위해 예제에서는 데이터를 AWS 리전, 연도, 월 및 일별로 분할합니다.

  5. Athena 콘솔에서 CREATE TABLE 문을 실행합니다.

  6. 다음 예제와 같이 ALTER TABLE ADD PARTITION 명령을 사용하여 파티션을 쿼리할 수 있도록 파티션을 로드합니다.

    ALTER TABLE table_name ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'