<aside>
💡 기존에는 Default VPC, Default Subnet을 활용한 보안을 고려하지 않은 설계를 바탕으로 서비스를 배포하고 있었습니다. 그러던 중 보안 이슈가 발생하여, 이를 계기로 보안 및 비용 절감에 초점을 두어 AWS Architecture를 재설계하였습니다.
사내에 AWS 서비스에 익숙한 개발자가 없어 제가 주축이 되어 구조 재설계 및 구축 과정을 진행했습니다.
업무가 마무리된 후, 사내 개발자들을 대상으로 해당 내용에 대해 세미나를 진행하였습니다.
</aside>
개선된 구조도
기존 구조와의 비교
기존 프로덕트의 문제점
- Default VPC, Default Subnet을 활용하여 모든 리소스가 Public subnet에 위치함
- 서로 다른 계정의 VPC 간 통신이 필요할 때 인터넷을 통해 연결
- 트래픽이 외부로 이동하기 때문에 보안 취약, 비용 추가
- 대부분의 보안그룹이 0.0.0.0/0에 대해서 port open
- RDS, Opensearch Service(ElasticSearch)의 Public access 허용
- 리소스별로 각각 다른 가용영역 사용
개선된 방향
- 1개의 Public Subnet, 2개의 Private Subnet(Server, DB)을 생성하여 모든 리소스를 Private Subnet에 배치
- 보안 강화
- Private Subnet 내에서 서버 배포를 하기 위해 ALB, Bastion Server, NAT instance 등 생성
- 서로 다른 계정의 VPC 간 통신을 위해 VPC peering 연결
- 트래픽을 내부에서 처리하도록 변경, 보안 강화
- 필요한 ip에 대해서만 보안그룹 open
- RDS Public access Deny
- Opensearch Service 네트워크 방식 VPC로 변경, private subnet 안에 배치
- CIDR Block 형태 통일
- VPC 단위는 /16, Subnet 단위는 /24로 고정하여 리소스의 ip만 보고도 바로 VPC와 subnet을 유추할 수 있도록 변경
- 리소스들이 최대한 같은 가용영역을 사용하도록 변경
- production의 RDS 등 중요한 리소스의 경우 Multi AZ 설정을 통해 안정성을 높임
- 가용영역을 최대한 하나로 합침으로써 비용 절감 효과