본문 바로가기

클라우드/Public Cloud(Naver, Amazon)

Cloud trail 설정 후 athena로 쿼리

Cloudtrail이란 AWS 계정에서의 활동 기록이다. 계정의 규정준수, 운영 및 위험 감사를 활성화하도록 도와주는 서비스이다. 또 CloudTrail은 계정에서 이루어지는 모든 API 호출을 기록하고, 지정된 Amazon S3 버킷에 로그를 저장하는 서비스입니다. 정해진 기간 동안만 모니터링 되며, 장기적인 기간 모니터링하기 위해서는 S3에 저장해야만 합니다.

 

testduck이라는 s3를 먼저 생성하겠다.

그 후 cloudtrail을 생성!

 

이름과 리전을 선택하고 관리이벤트는 계정의 활동 이벤트를 선택할 수 있다.

insights 이벤트란 CloudTrail Insights는 CloudTrail 추적을 통해 수집한 관리 이벤트를 자동으로 분석하여 정상적인 동작에 대한 기준을 설정한 다음 비정상적인 패턴이 감지되면 Insights 이벤트를 생성하여 문제를 발생시키도록 설계되어 있다고 한다. (여기선 사용하지 않겠다.)

 

기존에 생성해 둔 testduck이라는 s3를 선택한 후 생성한다.

cloudtrail설정이 끝났다. 이렇게 되면 이게 활동하는 계정의 활동기록이 전부 s3에 저장되게 된다.

 

athena를 설정할 차례이다. 먼저 athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스이다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 된다. athena는 간편하고, 빠르게 SQL을 다룰 수 있는 사람은 누구나 신속하게 대규모 데이터 세트를 분석할 수 있다는 장점을 가지고 있다.

 

먼저 athena에 들어가 setting을 해야한다. 기존에 만든 testduck이라는 s3에 duckduck이라는 폴더를 추가하여 모든 쿼리에 대한 쿼리 결과를 저장하기 위한 s3의 위치를 세팅한다.

table을 만들어 주겠다. ( table이름과 Location만 수정해주면 된다. )

CREATE EXTERNAL TABLE cloudtrail_logs (
eventversion STRING,
useridentity STRUCT<
               type:STRING,
               principalid:STRING,
               arn:STRING,
               accountid:STRING,
               invokedby:STRING,
               accesskeyid:STRING,
               userName:STRING,
sessioncontext:STRUCT<
attributes:STRUCT<
               mfaauthenticated:STRING,
               creationdate:STRING>,
sessionissuer:STRUCT<  
               type:STRING,
               principalId:STRING,
               arn:STRING, 
               accountId:STRING,
               userName: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
)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://testduck/AWSLogs/311724524637/CloudTrail/ap-northeast-2/2020/03/24/';

(성공)

옆에 새로운 쿼리창을 열어서 이제 명령어를 실행하면 잘 쿼리됨을 확인할 수 있다.

(여러 명령어 실행 select * from cloudtrail_logs where eventversion='1.05' limit 10; 등등)