개요
클라우드 환경에서의 보안은 시스템의 안정성과 데이터의 무결성을 지키는 데 있어 핵심적인 요소이다. AWS에서는 리소스를 안전하게 관리하기 위하여 보안 그룹을 제공한다.
이 글에서는 보안 그룹의 개념과 RDS와 ec-2 인스턴스간의 리소스 트래픽 제어에 대해 알아보자
내용
보안 그룹이란?
보안 그룹은 AWS의 가상 네트워크인 VPC(Virtual Private Cloud) 내에서 작동하며, 인스턴스 수준에서 네트워크 접근을 제어한다. 각 보안 그룹은 인바운드(Inbound)와 아웃바운드(Outbound) 트래픽에 대한 규칙을 정의할 수 있으며, 이를 통해 특정 포트나 IP 주소 범위에 대한 접근을 허용하거나 제한할 수 있다. 중요한 점은 보안 그룹이 상태 기반(stateful) 필터링을 사용한다는 것이다. 이는 인바운드 요청에 대한 응답 트래픽이 자동으로 허용된다는 의미로, 별도의 아웃바운드 규칙을 설정하지 않아도 응답이 가능하다는 장점이 있다.
보안 그룹과 네트워크 ACL의 차이점
AWS에서는 네트워크 보안을 위해 보안 그룹 외에도 네트워크 ACL(Network ACLs)을 제공한다. 두 보안 메커니즘은 다음과 같은 차이점이 있다
- 적용 범위
- 보안 그룹: 개별 인스턴스에 적용되며, 인스턴스 수준에서 트래픽을 제어한다.
- 네트워크 ACL: 서브넷 단위로 적용되며, 서브넷 내의 모든 인스턴스에 대한 트래픽을 제어한다.
- 상태 기반 vs 무상태
- 보안 그룹: 상태 기반(stateful) 필터링을 사용하여, 인바운드 요청에 대한 응답 트래픽을 자동으로 허용한다.
- 네트워크 ACL: 무상태(stateless) 필터링을 사용하여, 인바운드와 아웃바운드 트래픽을 별도로 규정해야 한다.
- 규칙의 기본 동작
- 보안 그룹: 기본적으로 모든 인바운드 트래픽을 차단하고, 필요한 트래픽만 허용하는 접근 방식을 취한다.
- 네트워크 ACL: 기본적으로 모든 인바운드 및 아웃바운드 트래픽을 허용하지만, 필요에 따라 규칙을 추가하여 제한할 수 있다.
보안 그룹을 활용한 RDS와 ec-2 인스턴스간의 리소스 트래픽 제어
VPC에서 DB 인스턴스를 사용하는 일반적인 사례는 동일한 VPC의 Amazon EC2 인스턴스에서 실행 중이며 VPC 외부의 클라이언트 애플리케이션에서 액세스한 애플리케이션을 사용하여 데이터를 공유하는 것이다.
첫 번째 VPC 보안 그룹 생성 및 인바운드 규칙 설정
- 보안 그룹 생성: sg-0123ec2example이라는 이름의 VPC 보안 그룹을 생성한다.
- 인바운드 규칙 추가: 클라이언트 애플리케이션의 IP 주소를 소스로 설정하여 인바운드 규칙을 생성한다. 이 규칙을 통해 클라이언트 애플리케이션이 sg-0123ec2example 보안 그룹을 사용하는 VPC 내의 EC2 인스턴스에 접근할 수 있도록 허용한다.
- 애플리케이션용 EC2 인스턴스 생성 및 보안 그룹 할당
- EC2 인스턴스 생성: 애플리케이션을 호스팅할 EC2 인스턴스를 생성한다.
- 보안 그룹 할당: 생성한 EC2 인스턴스에 이전 단계에서 생성한 VPC 보안 그룹(sg-0123ec2example)을 할당한다. 이를 통해 EC2 인스턴스는 클라이언트 애플리케이션으로부터의 접근만을 허용받는다.
- 두 번째 VPC 보안 그룹 생성 및 규칙 설정
- 보안 그룹 생성: sg-6789rdsexample이라는 이름의 두 번째 VPC 보안 그룹을 생성한다.
- 인바운드 규칙 추가: 첫 번째 보안 그룹(sg-0123ec2example)을 소스로 지정하여 새로운 인바운드 규칙을 생성한다. 이 규칙을 통해 sg-0123ec2example 보안 그룹에 속한 EC2 인스턴스가 두 번째 보안 그룹(sg-6789rdsexample)을 사용하는 리소스에 접근할 수 있도록 허용한다.
- DB 인스턴스 생성 및 보안 그룹 할당
- DB 인스턴스 생성: 새로운 RDS 데이터베이스 인스턴스를 생성한다.
- 보안 그룹 할당: 생성한 DB 인스턴스에 두 번째 VPC 보안 그룹(sg-6789rdsexample)을 할당한다. 이때, 이전 단계에서 생성한 sg-6789rdsexample 보안 그룹의 규칙에 명시된 동일한 보안 포트 번호를 사용하여 DB 인스턴스가 올바른 포트를 통해 접근 가능하도록 설정한다.
참고