๐Ÿ’ก
์ด์ „์˜ 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