1. Athena๋?
2. ์ค์ต
- 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');
→ ๋ค์์ฒ๋ผ ์ฟผ๋ฆฌํ์์ ํ์ธ ๊ฐ๋ฅ
trail ๋ก๊ทธ
์ด์ ์ trail ์์ ์์ฑํ ์ถ์ ์ ์๋ณํ๊ธฐ์ ์์ด ๋ถํธํจ์ด ์กด์ฌํ์ฌ ํน์ ์ฟผ๋ฆฌ๋ค์ ์ด์ฉํด์ ํธ๋ฆฌํ๊ฒ ๋ณด๊ณ ์ ํ๋ ์ด์ ๋์ดํ ์๋ ์์ผ๋ฉฐ ํด๋น ๋ก๊ทธ๋ค์ ๋ถ์ํด๋ณด์!
- Flow log ์์ฑ
- ๋ณต์ฌํ s3 ๋ฒํท์ arn ์ง์ ํ ์์ฑ
→ Log ๋ ์ฝ๋ ํฌ๋ฉง์ default ๊ฐ์ผ๋ก ์งํ ( custom์ผ๋ก๋ ๊ฐ๋ฅ)
- ์์ฑ ํ์ธ
→ ํด๋น vpc ์ ํ๋ก์ฐ ๋ก๊ทธ ์ฐฝ์์ ํ์ธ ๊ฐ๋ฅ
- ํํฐ : ๋ก๊น ํ ํธ๋ํฝ์ ์ ํ์ ๋๋ค. ์ด 3๊ฐ์ง๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์๋ฝ๋ ํธ๋ํฝ๋ง ๊ธฐ๋กํ๋ ค๋ฉด ‘์ ์ฉ’ ๊ฑฐ๋ถ๋ ํธ๋ํฝ๋ง ๊ธฐ๋กํ๋ ค๋ฉด ‘๊ฑฐ๋ถ’ ์๋ฝ ๋ฐ ๊ฑฐ๋ถ๋ ํธ๋ํฝ์ ํ์ธํ๋ ค๋ฉด ‘๋ชจ๋’๋ฅผ ์ ํํ ์ ์์ต๋๋ค. - ์ต๋ ์ง๊ณ ๊ฐ๊ฒฉ : ๊ธฐ๋ณธ 10๋ถ ๋จ์ ์์ง -> ํ ์คํธ๋ฅผ ์ํด (1๋ถ ๋จ์๋ก ์งํ) - ๋์ : VPC flow log์ ๋ํ ๋ก๊ทธ ๊ธฐ๋ก์ CloudWatch or s3 ์ ์ ์ฅํ ์ ์์ต๋๋ค. - IAM ์ญํ : CloudWatch ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ ์ ํด๋น ์ญํ ์ ๋ถ์ฌํด ์ฃผ์ด์ผ ํฉ๋๋ค. - ๋ ์ฝ๋ ํ์: AWS์์ ์ ๊ณตํด์ฃผ๋ default ํ์ or ์ฌ์ฉ์ ์ง์ ํ์์ ์ ํํ ์ ์์ต๋๋ค. - S3 ๋ฒํท ARN : ์์ฑํ S3 ๋ฒํท์ ๋ํ ARN๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
์์ฑ ๊ณผ์
- ๋ณต์ฌํ s3 ๋ฒํท์ arn ์ง์ ํ ์์ฑ
vpc Flow log
- Athena database ์์ฑ
→ DDL ๋ฌธ์ ์ด์ฉํ์ฌ DB ์์ฑ ๋๋ default DB์์ ํ ์ด๋ธ ์์ฑํด๋๋๋ค
- 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"); -> ํํฐ์ ๋์ ํตํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํ ํ ์์๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ผํ๋ค.
- ๋ฒํท ์ ์ฑ
์์ฑ
์ฐธ์กฐ : 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" } ] } ๋ฒํท ๊ฒฝ๋ก ์ค์ ์ ๋ณธ์ธ์ด ์์ฑํ ์์น์ ๋ง์ถฐ์ ์งํ ํด์ผํจ
→ ์ ์ฑ ์์ฑ๊ธฐ๋ฅผ ํตํ์ฌ ๋ฒํท ์ ์ฑ ์์ฑ
- alb ์ก์ธ์ค ๋ก๊ทธ ํ์ฑํ
→ ELB ๋ 5๋ถ๋ง๋ค ๋ก๊ทธ๋ฅผ ๊ฒ์ํจ
์ฃผ์์ฌํญ!! : ๋ฒํท์์น๋ฅผ ๋ฒํท ์ ์ฑ ์์ ์ง์ ํ ๋ฒํท ์์น์ ๋์ผํด์ผํจ
๋ก๊ทธ์ ๋จ๋ ๊ธฐ๋ก
- ํธ๋ํฝ ์์ฒญ ๋ฐ์ ์๊ฐ
- ํด๋ผ์ด์ธํธ ip ์ฃผ์
- ์ง์ฐ ์๊ฐ
- ์์ฒญ ๊ฒฝ๋ก ๋ฐ ์๋ฒ ์๋ต๋ฑ์ ์ ๋ณด
- s3 ๋ฒํท ํ
์คํธ ํ์ผ ์์ฑ ํ์ธ
→ ๋ค์๊ณผ ๊ฐ์ด access log ํ์ฑํ๋ฅผ ํ์ธ๊ฐ๋ฅํฉ๋๋ค.
- athena -DB ์์ฑ
ํ ์ด๋ธ ์์ฑ์ ์ฐธ์กฐ
https://docs.aws.amazon.com/ko_kr/athena/latest/ug/application-load-balancer-logs.html
- ์ฟผ๋ฆฌ ํ
์คํธ
2. ์์ฒญ client ip ํ์ธ
→ ๋ก์ปฌ์์ ping ํ ์คํธํ ์ธํฐ๋ท์์ ๋ด ip ์ฃผ์ ํ์ธํ ๊ฒ์ ๊ฒฐ๊ณผ ํด๋น ๋ก์ปฌ pc์์ ๋๋ฉ์ธ ์ ์ํ ์ด๋ ฅ ํ์ธ
ALB log
3. ๊ฒฐ๋ก
Athena๋ฅผ ํตํด์ aws ์๋น์ค์ค์ ๋ช ๊ฐ์ง๋ง ์ถ๋ ค์ log๋ฅผ ๋ถ์ํด ๋ณด๋ฉฐ ํน์ ๊ฐ๋ค์ ๋ถ๋ฌ์ฌ์ ์์๋ค.
์ถ๊ฐ์ ์ผ๋ก athena์ ํ ์ด๋ธ์ ํน์ ํํฐ์ ๋์ ์ง์ ํ์ฌ ๋ก๊ทธ๋ฅผ ์์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ถ๋ฌ์ค๋๋ก ์ค์ ํ๋ฉฐ ๋ก๊ทธ ๋ฐ์ดํฐ๊ฐ ๋ง์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๋ํ, ์ ์ฌ๋ s3 ๋ฒํท์ ์กด์ฌํ๋ ๋ก๊ทธ๋ฅผ athena๋ฅผ ์ด์ฉํ์ฌ ํํฐ๋ง์ ํ๋ฉฐ ์ต์ข ์ผ๋ก Quicksight๋ฅผ ์ด์ฉํด ์๊ฐํ ํ๋ ์์ ๊น์ง ํด๋ณด์๋ค. Quicksight์ ๋ํด์๋ ์ถ๊ฐ์ ์ผ๋ก ํ์ธ์ด ํ์ํ ๋ฏํ๋ค.
'Management & Governance' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CloudTrail ๋ก๊ทธ ํ์ธ (0) | 2021.02.26 |
---|
Uploaded by Notion2Tistory v1.1.0