💡
이전의 trail - watch 관련 실습을 참고

1. Athena란?

💡
athena는 표준 s3를 사용하여 직접 데이터를 쉽게 분석할수 있는 대화형 쿼리 서비스입니다. 표준 SQL를 사용하여 임시 쿼리를 실행 → 몇초안의 결과를 얻을수 있습니다. ahtena는 서버리스 서비스이므로 설정하거나 관리할 인프라가 필요없다.또한, ETL(Extraction,Transformation,Loading)의 번거로움을 Athena가 내부에서 해결해줍니다.

 

2. 실습

    아키텍처

     

    trail 로그

    이전의 trail 에서 생성한 추적은 식별하기에 있어 불편함이 존재하여 특정 쿼리들을 이용해서 편리하게 보고자 하는 열을 나열할수도 있으며 해당 로그들을 분석해보자!

    1. Athena 테이블 생성

      → 해당 테이블생성시 trail 에 대한 정보를 나타내 준다.

      → 또한 이전의 추적으로 생성한 버킷을 지정한다 (해당 버킷에 존재하는 로그를 대상으로 쿼리를 진행하기때문이다.)

      CREATE EXTERNAL TABLE cloudtrail_logs_aws_cloudtrail_logs_186086016278_655f63bf (
          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
      )
      COMMENT 'CloudTrail table for aws-cloudtrail-logs-186086016278-655f63bf bucket'
      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://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/';
      TBLPROPERTIES ('classification'='cloudtrail');

      → 다음처럼 쿼리형식을 확인 가능

    1. 테이블 생성 확인
    1. 간단하게 event name을 select 쿼리
    1. 서울 리전에서만 발생한 이벤트 확인
    1. 실행 중인 인스턴스 확인

       

     

     

     

    vpc Flow log
    1. S3 버킷에 flow log 전송(log를 받을 버킷 생성)
    1. 버킷 -> 속성 -> arn 리소스 이름 복사
    1. Flow log 생성
        생성 과정
        1. 생성 화면
        1. 대상 필터링 적용
        1. 복사한 s3 버킷의 arn 지정후 생성

          → Log 레코드 포멧은 default 값으로 진행 ( custom으로도 가능)

        1. 생성 확인

          → 해당 vpc 의 플로우 로그 창에서 확인 가능

          -	필터 : 로깅할 트래픽의 유형입니다. 
           총 3가지로 구성되며, 수락된 트래픽만 기록하려면 ‘적용’ 거부된 트래픽만 기록하려면
           ‘거부’ 수락 및 거부된 트래픽을 확인하려면 ‘모두’를 선택할 수 있습니다.
          -	최대 집계 간격 : 기본 10분 단위 수집 -> 테스트를 위해 (1분 단위로 진행)
          -	대상 : VPC flow log에 대한 로그 기록을 CloudWatch or s3 에 저장할 수 있습니다.
          -	IAM 역할 : CloudWatch 에 로그를 기록할 시 해당 역할을 부여해 주어야 합니다.
          -	레코드 형식: AWS에서 제공해주는 default 형식 or 
          							사용자 지정 형식을 선택할 수 있습니다.
          -	S3 버킷 ARN : 생성한 S3 버킷에 대한 ARN값을 지정 할 수 있습니다.

         

    1. Athena database 생성

      → DDL 문을 이용하여 DB 생성 또는 default DB에서 테이블 생성해도된다

    1. Athena table 생성

      참조 : https://docs.aws.amazon.com/ko_kr/athena/latest/ug/vpc-flow-logs.html

      CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs (
        version int,
        account string,
        interfaceid string,
        sourceaddress string,
        destinationaddress string,
        sourceport int,
        destinationport int,
        protocol int,
        numpackets int,
        numbytes bigint,
        starttime int,
        endtime int,
        action string,
        logstatus string
      )
      PARTITIONED BY (`date` date)
      ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ' '
      LOCATION 's3://your_log_bucket/prefix/AWSLogs//vpcflowlogs//'
      TBLPROPERTIES ("skip.header.line.count"="1");
      -> 파티셔닝을 통하여 쿼리를 최적화 할수있다. 그렇지 않으면 모든 데이터를 불러와야한다.
    1. 동작 확인을 위한 ec2 생성
    1. 쿼리 테스트 진행

     

    ALB log
    1. 테스트 진행 할 ALB 생성
    1. 대상 그룹 인스턴스 아무거나 등록
    1. 버킷 정책 생성

      참조 : https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/enable-access-logs.html

      ALB에 s3 버킷을 사용할 role을 부여 할수 없기에 정책을 이용하여 설정

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::elb-account-id:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*"
          },
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*",
            "Condition": {
              "StringEquals": {
                "s3:x-amz-acl": "bucket-owner-full-control"
              }
            }
          },
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::bucket-name"
          }
        ]
      }
      버킷 경로 설정시 본인이 생성할 위치에 맞춰서 진행 해야함

      → 정책 생성기를 통하여 버킷 정책 생성

    1. alb 액세스 로그 활성화

      → ELB 는 5분마다 로그를 게시함

      주의사항!! : 버킷위치를 버킷 정책에서 지정한 버킷 위치와 동일해야함

      로그에 남는 기록

      • 트래픽 요청 받은 시간
      • 클라이언트 ip 주소
      • 지연 시간
      • 요청 경로 및 서버 응답등의 정보
    1. s3 버킷 테스트 파일 생성 확인

      → 다음과 같이 access log 활성화를 확인가능합니다.

    1. 로드밸런서 테스트
    1. athena -DB 생성

      테이블 생성시 참조

      https://docs.aws.amazon.com/ko_kr/athena/latest/ug/application-load-balancer-logs.html

    1. 쿼리 테스트
      1. 타겟 인스턴스로 트래픽이 전달 되는지 확인

      2. 요청 client ip 확인

      → 로컬에서 ping 테스트후 인터넷에서 내 ip 주소 확인후 검색 결과 해당 로컬 pc에서 도메인 접속한 이력 확인

       

       

     

    QuickSight
    1. 생성하기

      60일동안은 무료로 사용가능 standard 는 그이후 월 12달러

    1. 설정

      → Athena를 활용

    1. 데이터 세트

      → 여러가지 서비스 및 직접 데이터를 업로드도 가능

    1. athena 연결
    1. 테이블 선택
    1. 데이터 직접 쿼리로 생성

      만약 작업이 안될시에 보안 및 권한에서 s3를 추가해야함

       

    1. quicksight 확인

      필드에서 여러 값을 가져오면된다.

      → request당 client와 target ip 에 대한 통계값 확인

 

3. 결론

Athena를 통해서 aws 서비스중에 몇 가지만 추려서 log를 분석해 보며 특정값들을 불러올수 있었다.

추가적으로 athena의 테이블을 특정 파티셔닝을 지정하여 로그를 손쉽고 빠르게 불러오도록 설정하며 로그 데이터가 많을시 유용하게 사용된다.

또한, 적재된 s3 버킷에 존재하는 로그를 athena를 이용하여 필터링을 하며 최종으로 Quicksight를 이용해 시각화 하는 작업까지 해보았다. Quicksight에 대해서는 추가적으로 확인이 필요할듯하다.

'Management & Governance' 카테고리의 다른 글

CloudTrail 로그 확인  (0) 2021.02.26

+ Recent posts