AWS

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 암호화.

AWS-VPC-rfc1918

요즘 ANS 공부를 하고 있다. 그러던 와중에 알게된 부분이다.

AWS에선 VPC 를 생성할때 RFC1918을 권장한다.

10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

이 대역이다. 그러던중 IPv4 블록 연결제한 부분을 보게되었다.

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing

IPv4 CIDR 블록 연결 제한
기본 VPC CIDR 블록이 상주하는 IP 주소 범위제한되는 CIDR 블록 연결허용되는 CIDR 블록 연결
10.0.0.0/8다른 RFC 1918* 범위(172.16.0.0/12 및 192.168.0.0/16)의 CIDR 블록입니다.기본 CIDR이 10.0.0.0/15 범위에 해당되면 10.0.0.0/16 범위의 CIDR 블록을 추가할 수 없습니다.198.19.0.0/16 범위의 CIDR 블록입니다.제한되지 않는 10.0.0.0/8 r범위의 기타 모든 CIDR입니다.공개적으로 라우팅이 가능한 모든 IPv4 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.
172.16.0.0/12다른 RFC 1918* 범위(10.0.0.0/8 및 192.168.0.0/16)의 CIDR 블록입니다.172.31.0.0/16 범위의 CIDR 블록입니다.198.19.0.0/16 범위의 CIDR 블록입니다.제한되지 않는 172.16.0.0/12 r범위의 기타 모든 CIDR입니다.공개적으로 라우팅이 가능한 모든 IPv4 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.
192.168.0.0/16다른 RFC 1918* 범위(172.16.0.0/12 및 10.0.0.0/8)의 CIDR 블록입니다.198.19.0.0/16 범위의 CIDR 블록입니다.192.168.0.0/16 범위의 기타 모든 CIDR입니다.공개적으로 라우팅이 가능한 모든 IPv4 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.
198.19.0.0/16RFC 1918* 범위의 CIDR 블록입니다.공개적으로 라우팅이 가능한 모든 IPv4 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.
공개적으로 라우팅이 가능한 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.RFC 1918* 범위의 CIDR 블록입니다.198.19.0.0/16 범위의 CIDR 블록입니다.공개적으로 라우팅이 가능한 모든 다른 IPv4 CIDR 블록(비-RFC 1918) 또는 100.64.0.0/10 범위의 CIDR 블록.

간단히 정리하면 해당 RFC1918중 하나의 대역을 사용하면 다른 대역을 사용할수 없는것이다.

예로..

이런식이다..

왜이렇게 AWS에서는 RFC1918에 대한 제한을 두었는지는 알수없다.

non-RFC1918 은또 사용할수 있기 때문이다.

추측을 하자면 어제 조언을해주신..여러분들의 의견을 종합해보자면..

관리상의 측면때문일거라 생각은 드는데..

결론은 나지 않았다.

간단하게 정리한 스샷..

긴밤에 같이 고민해 주신 김용대님 신승광님 서노아님께 감사를 드립니다!

읽어주셔서 감사하다!