디폴트로 생성되는 보안 그룹의 규칙을 자동으로 삭제하여 관리해 봤습니다.
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 디폴트로 생성되는 보안 그룹의 규칙을 자동으로 삭제하여 관리해 봤습니다.
신경쓰이는 점
VPC를 생성하면 자동으로 [default] 라는 이름의 보안 그룹이 생성됩니다. 사실 삭제해도 상관이 없을 뿐더러 인바운드 규칙은 자기 자신을 설정하고 있기 때문에 보안상 문제는 없을 겁니다.
하지만, 사용자가 직접 생성한 리소스가 아니기 때문에 신경쓰이는 건 어쩔 수 없는 부분이라 생각하기 때문에 이번 블로그에서는 VPC가 생성될 때 해당 디폴트 보안 그룹의 인바운드 규칙, 아웃바운드 규칙을 자동으로 제거해 주는 구성을 만들어 봤습니다.
IAM 정책 및 역할 생성
Lambda 함수에서 VPC와 보안 그룹에 접근하여 규칙을 수정하기 위한 권한을 할당합니다. 필요한 권한은 다음과 같습니다.
- DescribeSecurityGroups
- DescribeVpcs
- RevokeSecurityGroupIngress
- RevokeSecurityGroupEgress
이 권한들을 포함한 IAM 정책을 생성하고, IAM 역할에 연결하도록 합시다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeSecurityGroups",
"ec2:DescribeVpcs",
"ec2:RevokeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress"
],
"Resource": "*"
}
]
}
Lambda 함수 생성
이제 Lambda 함수를 생성합시다.
Lambda 함수에서는 디폴트로 생성된 보안 그룹(보안 그룹 이름이 default인 리소스)를 찾아서 인바운드 규칙과 아웃바운드 규칙을 삭제하는 코드입니다.
import boto3
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
print("=== 디폴트 보안 그룹 규칙 제거 시작 ===")
# 1. 모든 VPC 조회
vpcs = ec2.describe_vpcs()['Vpcs']
for vpc in vpcs:
vpc_id = vpc['VpcId']
print(f"VPC 확인 중: {vpc_id}")
# 2. 해당 VPC의 default 보안 그룹 찾기
sgs = ec2.describe_security_groups(
Filters=[
{'Name': 'vpc-id', 'Values': [vpc_id]},
{'Name': 'group-name', 'Values': ['default']}
]
)['SecurityGroups']
for sg in sgs:
sg_id = sg['GroupId']
print(f"디폴트 SG 발견: {sg_id}")
# 3. Ingress (인바운드) 규칙 제거
if sg.get('IpPermissions'):
try:
ec2.revoke_security_group_ingress(
GroupId=sg_id,
IpPermissions=sg['IpPermissions']
)
print(f" ✅ 인바운드 규칙 제거 완료: {sg_id}")
except Exception as e:
print(f" ❌ 인바운드 규칙 제거 실패: {e}")
# 4. Egress (아웃바운드) 규칙 제거
if sg.get('IpPermissionsEgress'):
try:
ec2.revoke_security_group_egress(
GroupId=sg_id,
IpPermissions=sg['IpPermissionsEgress']
)
print(f" ✅ 아웃바운드 규칙 제거 완료: {sg_id}")
except Exception as e:
print(f" ❌ 아웃바운드 규칙 제거 실패: {e}")
print("=== 디폴트 보안 그룹 규칙 제거 종료 ===")
자동화하기 위해 EventBridge와 CloudTrail을 이용할 생각이지만, 수동으로 실행 시키면, 이 Lambda 함수 코드만으로도 디폴트 보안 그룹을 찾아내어 규칙들을 제거합니다. 하지만, 이번에는 자동화가 목적이므로 EventBridge와 CloudTrail을 활용헙사다.
EventBridge 규칙 생성
Lambda 함수를 생성했다면, EventBridge 규칙을 생성합니다. VPC가 생성될 때 디폴트 보안 그룹도 생성되므로 CloudTrail에서 VPC가 생성되는 이벤트가 발생했을 시 EventBridge → Lambda 함수가 트리거 되는 구조로 가야합니다.
이 때 필요한 이벤트는 [CreateVpc] 입니다.
{
"source": ["aws.ec2"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["ec2.amazonaws.com"],
"eventName": ["CreateVpc"]
}
}
결과 확인
VPC가 생성되고, 디폴트 보안 그룹이 생성되는데, 여기서 디폴트 보안 그룹의 규칙을 확인해 보면 인바운드 규칙과 아웃바운드 규칙이 제거된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.