AWS

AWS-VPC-Flowlog-Athena

VPC에서 아웃바운드로 향하는 모든포트를 확인해야하는 일이 생겼다.

그래서 이전 포스팅에서 먼저 과거의 방법을 이용해서 확인했고 이번에는 S3로 전송하여 보려한다.

아래는 이전의 방법으로 확인한 포스팅이다.

현재에는 이런 방법을 사용하지 않는다.

위에 작성한 방법은 ETL 과정을 거치는건데 사실 이렇게 할필요가 전혀없다.

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

그냥 이거 따라하면 된다.

VPC-Flowlog 활성화 -S3 -athena

이렇게 간소화 되었다.

S3로 보내도록 로그를 생성한다.

S3 버킷 생성하는 부분은 생략한다.

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/{subscribe_account_id}/vpcflowlogs/{region_code}/'
TBLPROPERTIES ("skip.header.line.count"="1");

명령어가 정상적으로 실행되면 위와같이 테이블을 확인할수있다

ALTER TABLE vpc_flow_logs
ADD PARTITION (date='2020-06-04')
location 's3://linuxer-blog-log/AWSLogs/328345415633/vpcflowlogs/ap-northeast-2/';

두줄을 적용하면 테이블이 등록된다. 유의할점이 지정한 날에 대한 단일 파티션만 생성된다.

이제 목적한 쿼리를 날려보자.

여기까지 테스트한이유는 아웃바운드의 모든 포트를 확인하기 위함이었다. 이제 쿼리를 해보자.

SELECT sourceport, count(*) cnt
FROM vpc_flow_logs
WHERE sourceaddress LIKE '10.0%'
GROUP BY sourceport
ORDER BY cnt desc
LIMIT 10;

이렇게 확인할수 있었다.

구 방법 부터 현재 권장하는 방법까지 테스트를 해보았고 같은결과를 확인하였다.

여기까지 읽어주셔서 감사하다!

-추가 쿼리

SELECT day_of_week(date) AS
day,
date,
interfaceid,
sourceaddress,
action,
protocol,
destinationaddress,
destinationport
FROM vpc_flow_logs_proc_20200702
WHERE action = 'REJECT' AND sourceaddress = '10.0.1.150'
LIMIT 1000;

AWS-VPC-flowlog-kinesis-Athena

아웃바운드로 연결되는 모든 포트를 확인하기위해 flowlog 를 이용해야 했다.

먼저 흐름을 그려보자.

https://aws.amazon.com/ko/blogs/big-data/analyzing-vpc-flow-logs-with-amazon-kinesis-firehose-amazon-athena-and-amazon-quicksight/

VPCflowlog enable -> cloudwatch loggroup -> lambda -> kinesis -> s3

이게 일단 저장하는 프로세스다.

지금은 좀더 간소화된 과정이 있으나 먼저 이전에 나온 방법을 학습하기 위해 이방법을 택했다.

먼저 저장 프로세스를 만들어보자.

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs.html

VPCflowlog 는 이런식으로 생성했다.

여기서 중요한것은 대상 로그 그룹이다. 역할은 자동생성 눌러서 그냥 만들어주자.

로그그룹은 따로 쌓기 위해서 새로만들어줬다.

로그그룹을 만들었다면 lambda를 생성하자. 람다는 어려울게 없다.

역할만 잘만들어주면 끝이다.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:::" }, { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "arn:aws:firehose::*:deliverystream/VPCFlowLogsDefaultToS3"
]
}
]
}

따로 역할을 생성할때 람다를 선택하거나 역할을 만들고 신뢰관계를 추가하자.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

람다를 생성하고 위의 역할을 생성해서 부여해 주자. python 2.7 을 사용했다.

아래 소스를 인라인에 붙여 넣자.

https://github.com/bsnively/aws-big-data-blog/blob/master/aws-blog-vpcflowlogs-athena-quicksight/CloudwatchLogsToFirehose/lambdacode.py

환경변수또한 잘 생성해 줘야 한다.

람다의 제한시간을 1분으로 해주자.

람다에서는 템플릿 변경할게없다.

람다를 정상적으로 생성했다면 CloudWatch Loggroup 에서 lamdba 에대해서 설정해 줄게 있다.

Create Lambda subscription filter 설정이다.

생성한 Lambda 로 지정해주면 된다.

그다음은 kinesis다.

kinesis 에서도 Kinesis Data Firehose delivery streams 를 설정해야 한다.

VPCFlowLogsDefaultToS3 이름은 람다에서 설정한 환경에 넣은 이름으로 한다.

설정해줄 부분은

역할 자동 생성.

S3 버킷 지정이랑 compession 을 gzip 으로 변경하자. 거의 다왔다. 여기까지 했으면 이제 ETL 설정은 끝이다.

Athena 서비스로 이동하자

Athena 에서 테이블을 생성해야 한다.

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,
Packets INT,
Bytes INT,
StartTime INT,
EndTime INT,
Action STRING,
LogStatus STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^([^ ]+)\s+([0-9]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([0-9]+)\s+([0-9]+)\s+([^ ]+)\s+([^ ]+)$")
LOCATION 's3:///';

지금까지의 과정이 정상적으로 진행됬다면 이쿼리가 잘실행된이후에 테이블이 생성된다.

그리고 이제 포트를 확인하자 사용한 쿼리다.

SELECT sourceport, count(*) cnt
FROM vpc_flow_logs
WHERE sourceaddress LIKE '10.0%'
GROUP BY sourceport
ORDER BY cnt desc
LIMIT 10;

이런 내용이 나오고..

이렇게 VPC 에서 사용하는 sourceport 를 확인할 수 있다.

정리하자면 VPC IP가 sourceaddress 인경우에 port 를 count 한다 이다.

읽어주셔서 감사하다 !

AWS-instance-Attach to Auto Scaling Group

나는 몹쓸 고정관념이 있었다.

auto scaling group 에서 인스턴스를 분리 하게되면 재연결할수 없다고 생각했다.

아니었다..그저 연결하는 메뉴가 Auto Scaling Group에 존재하지 않았을 뿐이다.

하..멍청멍청.

ASG에서 인스턴스를 분리한다.

하나의 인스턴스만 남는다. 내 ASG는

이렇게 설정되어있고 축소정책이 없는 상태라 분리하여도 문제가 없다.

정상적으로 분리된게 확인되면 인스턴스 탭으로 이동하자.

분리된인스턴스에서 인스턴스셋팅을 보면 Attach 메뉴가 있다.

이런식으로 ASG에 인스턴스를 넣어줄수 있다.

정상적으로 추가된것까지 확인된다.

-_-;보안그룹 넣는거부터.. ASG까지..또 내가 모르는게 많았다..

ASG 액션에서 연결버튼 하나만 만들어줘도... 이런고민 안했을껀데..

음 또 나만 몰랐던 AWS의 기능... 다신 잊지 않기 위해서 포스팅한다.

AWS-Advanced-Networking-Specialty

AWS Certified Advanced Networking – Specialty

오늘 5월 17일 ANS를 합격했다.

5월6일에 SCS를 보고난 후 개인적인 도전과...
스스로에 대한 점검의 의미로 ANS를 바로 도전하기로 생각했다.

GCP-PCA-PCNE를 이어서 보면서 AWS 의 Networking 자격증 또한 취득하고 싶었다.

그래서 5월6일 SCS를 합격하자 마자 그날부터 ANS를 공부했다.

먼저 jayendrapatil님의 블로그를 이전부터 봐왔기에 ANS 가이드와 정리가 있다는것을 알고 있었다. 그래서 먼저 정독했다.

https://jayendrapatil.com/aws-certified-advanced-networking-speciality-ans-c00-exam-learning-path/

그리고 나름의 계획을 세워서 Docs 정독과 BGP - Direct Connect 를 주로 공부했다.
그외의 과목들은 SAP와 실무에서 자주하던 내용이라 깊게 고민하진 않았다.

계획대로 잘되나 했는데..연습시험이 없었다......왜??????????????
ANS만 연습시험이 없다...하...깜짝놀랐다.

Security Group 나 NACL Routing table 같은거나 VPC 디자인 같은 내용들은 SAP / SCS공부를 하면서도 반복한 내용인지라 따로 추가적인 공부를 하지 않았다.

가지고 있는 기본지식으로 문제를 풀수있을거라 생각했으므로..

DX의 사용방법이나 trensit VPC / DX HA / cloud hub 구성에 대해서 많이 찾아봤다.

Redunant Direct Connect 아키텍처

이런 이미지 들로 주로 DX를 이해하려 했다. 그리고

https://dev.classmethod.jp/?s=Direct+Connect

일본의 AWS 파트너사인 Classmethod의 블로그를 참고했다.

간밤에는 오픈카톡에서 김용대님 신승광님 서노아님 등 여러분들이 참전하셔서 길을 찾아주셨다.

https://open.kakao.com/o/gMCqYXxb

여러분들과 운영해 나가는 자격증 오픈챗팅방이다.

그렇게 다양한 자료들을 흡수하며 DX를 이해하고 구성을 그렸다.

사실 잘 이해안가는건 BGP도 아닌 DX의 큰그림이 었기 때문이다.

DNS / VPC / DHCP option set 같은건 익숙했다.

그렇게 5일가량은 DX를 공부했다. 제일 도움이 됬던건

https://d1.awsstatic.com/whitepapers/aws-amazon-vpc-connectivity-options.pdf

Amazon Virtual Private Cloud Connectivity Options - white paper 정말 도움이 많이되었다.

그렇게 많은것들을 보고나서 오늘 종로 솔데스크에서 시험을 봤다.

시험을 완료하자마자 성적표가 날아왔다.

총점:  80%
주제별 등급점수:
1.0  Design and implement hybrid IT network architectures at scale: 83%
2.0  Design and implement AWS networks: 85%
3.0  Automate AWS tasks: 100%
4.0  Configure network integration with application services: 71%
5.0  Design and implement for security and compliance: 83%
6.0  Manage, optimize, and troubleshoot the network: 57%

다음과 같이 성적표까지 바로 발송되었다. 아슬아슬 했다고 생각한다.

여담으로 AWS의 시험시스템이 변경되었다고 이전에 언급했는데 당일에 점수와 결과가 발송된다.

그동안 너무 느린처리에 좀 불안하기도 하고 답답했는데 빨라져서 너무 다행이다.

일정대로 목표한 공부를 마쳤다.

시간이 난다면 sysops를 볼거 같다.

다음시험은 AZ-301을 취득하려 한다.

읽어주셔서 감사하다.

ANS 후기를 마친다.

AWS-S3-api-encrypt

aws bucket ls | xargs -L1 % aws s3api put-bucket-encryption \
--bucket % \
--server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'

s3 api 이용한 모든버킷 AES-256 암호화.