목표
보안 그룹에 0.0.0.0/0은 자동 삭제하자
AWS Config를 이용하자
80 443을 제외하고는 0.0.0.0/0을 람다로 자동 삭제하자
동작
보안 그룹을 AWS Config로 모니터링한다.
이벤트가 발생하면 람다를 호출해서 처리한다.
순서
람다를 실행하기 위한 역할 role이 필요하다. - logs와 config연동을 위해 config필요.
Config를 실행하기 위한 역할 role이 필요하다. - 저장을 위해 S3 필요
보안그룹 수정
Config 실행 - 람다 만들기 - 람다 소스코드 반영
보안그룹 수정
logs에서 확인
<0> Config이용 장점과 구성
<1> 람다 실행하기 위해 정책과 역할을 만든다.
<2> Config를 실행하기 위해 역할을 만든다.
<3> Config로 보안 그룹 모니터링 설정한다.
<4> EC2 보안 그룹을 수정하고 확인하자.
<5> Config 규칙 만든다.
<6> 보안 그룹 다시 확인한다.
<7> 클라우드 와치 로그를 확인한다.
<0> Config이용 장점과 구성
1
장점
"AWS Config 각 리소스에 대한 호출을 폴링함으로써
리소스가 생성, 수정 또는 삭제될 때마다 모니터링할 필요 없이 이러한 변경 사항에 대한 알림을 받을 수 있다.
AWS Config 규칙을 사용하여 AWS 리소스의 구성 설정을 평가할 수 있습니다.
AWS Config에서 리소스가 규칙 중 하나의 조건을 위반했음을 감지하면, AWS Config는 해당 리소스를 규칙 미준수로 표시하고 알림을 보냅니다. AWS Config는 생성, 변경 또는 삭제되는 리소스를 계속해서 평가합니다." 출처 : AWS Doc
2
구성
<1> 람다 실행하기 위해 정책과 역할을 만든다.
1
서비스 > IAM > 정책 >
seo-lambda-policy
EC2 보안그룹 변경이 있으면, Config가 람다로 전달하여. 0.0.0.0/0 이 있으면 보안그룹을 삭제
// Config가 Cloudwatch log에 내용 저장
2
추가 권한 3개가 필요하다
EC2 보안그룹
Config,
Cloudwatch logs
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupIngress",
"config:PutEvaluations",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
3
역할을 만든다.
seo-lambda-role
을 만든다.
<2> Config를 실행하기 위해 IAM 정책, 역할을 만든다.
1
정책 , 역할을 만든다.
seo-config-policy
S3사용하여 권한 추가
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject*",
"s3:GetBucketAcl"
],
"Resource": "*"
}
]
}
2
config에 config-customizable을 선택해서 역할을 만든다.
seo-config-role
2
role에 정책을 추가한다.
AWSConfigRole 정책을 추가한다.
S3 쓰기 권한도 추가한다.
<3> Config로 보안 그룹 모니터링 설정한다.
1
Config > 시작 하기 > 특정 리소스 유형 기록
AWS 리소스 > AWS EC2 SecurityGroup 선택
버킷은 새로 생성한다.
SNS는 지정한다. 미리 만들어 놓아야 한다.
2
AWS Config역할 : 만들어 놓은 역할 seo-config-role 을 선택 > 다음
3
단계 2 : 규칙 > 건너뛰기
만들기
4
왼쪽 > 리소스 > 리소스 타입은 모두 체크한다. > 조회
<4> EC2 보안 그룹을 수정하고 확인하자.
VPC > 보안 그룹 > 디폴트 보안 그룹을 수정하자.
수정 > 룰 추가 > 80 443 이 어디에서든 접속 가능하게 수정하자. > 룰 추가 > 룰 저장
<5> Config 규칙 만든다.
1
Config > 규칙 추가 > 사용자 지정 규칙 추가
이름 :
seo-config-sg-80-rule
설명 :
0.0.0.0/0 유입 자동 차단하기
2
ARN을 입력하기 위해 새창에서 람다 만들자~
Lambda > 람다 만들기 > 람다 이름
seo-sg-config-lambda
파이썬 3.7
실행 역할 > 기존 역할 사용 > seo-lambda-config-role 사용한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupIngress",
"config:PutEvaluations",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
> 함수 만들기
3
함수 코드는 작업 S3에서 업로드
기본 설정 > 편집 >
설명 : 유입 포트를 제한한다.
핸들러
awsconfig_lambda_security_group.lambda_handler
타임 아웃을 1분으로 조정한다.
저장
4
람다 코드 확인
5
람다
오른쪽 위에서 ARN을 확인/ 복사한다.
arn:aws:lambda:us-west-2:xxxxxxx:function:seo-config-lambda-sg-lambda
6
Config 화면으로 돌아간다.
AWS Lambda ARN을 입력한다.
트리거 유형 : 구성 변경되면 트리거 체크한다.
범위 : 리소스 유지
리소스 유형은 보안 그룹을 선택한다.
키 :
debug
값:
true
> 저장
<6> 보안 그룹 다시 확인한다.
VPC > 보안 그룹 > 유입 룰 > 80과 443에 대한 허용만 인지한다.
<7> 클라우드 와치 로그를 확인한다.
1
클라우드 와치 > 로그 그룹 > 필터 한다.
revoking for
엔터
확인한다.
2
VCP > 보안 그룹 가서 보안 그룹 내용을 확인한다.
80 , 443을 제외하고 모두 0.0.0.0/0은 지워져 있다!!!
// 주의 : 설정후 잊어 버리지 말자. 자동으로 80 , 443을 제외하고 모두 0.0.0.0/0은 지워진다.
감사합니다.