RDS와 EC2를 연결하는 과정에서
https://developer111.tistory.com/52 해당 게시글을 참고하였다.
RDS의 보안그룹을 생성하고, EC2가 속한 VPC 및 서브넷 ID를 참고하는 부분이 자연스럽게 받아들여지지 않았다.
그만큼 보안그룹과 서브넷 그리고 VPC에 대한 개념이 정확하게 정리되어 있지 않다는 뜻이기에 해당 내용들을 정리해보았다.
필자가 의문을 가졌던 점은 다음과 같다.
- EC2와 RDS가 각각 다른 보안그룹을 갖는 이유
- DB 서브넷 그룹을 생성할 때, 모든 가용영역을 추가하는 이유
해당 작업의 목적은 EC2가 RDS에 접근하기 위함이다. 따라서 RDS는 퍼블릭 주소를 갖고 있지 않기에 RDS 자체에 보안그룹이 설정될 필요가 있다고 판단했다. 먼저 AWS에서 보안그룹이 어떠한 역할을 갖고 있는지 알아보았다.
1. AWS 보안 그룹
AWS 공식사이트에서 설명하는 보안 그룹의 역할은 다음과 같다.
보안 그룹은 EC2 인스턴스에 대한 수신 및 발신 트래픽을 제어하는 가상 방화벽 역할을 합니다.
인바운드 규칙은 인스턴스로 들어오는 트래픽을 제어하고 아웃바운드 규칙은 인스턴스에서 나가는
트래픽을 제어합니다.
EC2 인스턴스라는 컴퓨터(서버)에서 발생하는 트래픽을 제한하는 역할을 하는 것이 보안 그룹이다.
따라서 보안그룹을 설정할 때, 인바운드 규칙과 아웃바운드 규칙을 설정하는 것이다.
AWS 리소스가 EC2 단 한 개라면 보안 그룹을 설정하는 것이 번거로울 수 있다. 하지만 EC2가 여러 개일 경우, 각 EC2마다 일일이 트래픽을 제한하는 것이 아니라 하나의 보안그룹으로 일종의 표준을 만들 수 있다. 따라서 AWS 리소스를 생성할 때(EC2, RDS, S3 등) 보안 그룹을 새로 만들거나 기존의 것을 연결하는 작업은 당연히 필요한 것이다.
해당 게시글에는 필자가 궁금했던 VPC, 서브넷, 보안그룹의 관계가 잘 정리된 다이어그램이 있다.
이를 통해 알 수 있는 것은 다음과 같다.
- VPC 내에는 서브넷이 존재하며, 네트워크의 구성 요소들을 포함하고 있다.
- 하나의 서브넷에는 여러 인스턴스가 포함될 수 있으므로, 보안 그룹도 여러 개일 수 있다.
- 보안그룹은 특정 AWS 리소스와 1대1로 매핑되는 존재이다. (가상 방화벽이며 리소스에 할당되는 존재)
인스턴스를 시작한 이후에는 해당 보안 그룹을 변경할 수 없습니다. 보안 그룹은 네트워크 인터페이스와 연결됩니다. 인스턴스의 보안 그룹을 변경하면 기본 네트워크 인터페이스(eth0)와 연결된 보안 그룹이 변경됩니다.
보안 그룹은 인스턴스에 할당되며, 네트워크 인터페이스도 인스턴스에 할당된다. (인스턴스는 EC2, 컴퓨터/서버라고 간주) AWS의 네트워크 인터페이스인 Elastic Network Interface(ENI)는 컴퓨터 내에 장착되는 물리적인 장치와 달리 가상의 인스턴스에 연결되는 네트워크 인터페이스로 소프트웨어로 관리된다. 따라서 하나의 EC2에 장착될 수 있는 ENI의 개수는 물리적인 환경의 네트워크 인터페이스보다 제약이 적다.
탄력적 네트워크 인터페이스에 포함되는 내용은 다음과 같다.
IP 주소, MAC 주소 등을 담고 있으며, 이는 EC2가 외부 네트워크와 연결될 수 있도록 하는 중요한 구성요소이다.
위 설명을 다시 읽어보면, 보안 그룹은 네트워크 인터페이스와 연결된다고 나와있다. 즉, 인스턴스의 가상 방화벽인 보안 그룹은 EC2의 네트워크 연결을 담당하는 네트워크 인터페이스(ENI)와 연결되는 것이다. 따라서 인스턴스의 보안 그룹을 변경하면 기본 네트워크 인터페이스와 연결된 보안 그룹이 변경됩니다.라는 설명도 자연스럽게 이해가 된다. 기존 ENI의 네트워크 트래픽 규칙을 변경하는 역할을 하는 보안 그룹을 변경하는 것이기 때문이다.
2. AWS 서브넷
서브넷은 VPC의 IP 주소 범위입니다. 특정 서브넷에서 EC2 인스턴스와 같은 AWS 리소스를 생성할 수 있습니다.
그림에서 알 수 있듯이, VPC 내에 여러 서브넷으로 나뉘어 질 수 있다. 우리가 생성한 EC2, RDS가 서브넷을 갖는 이유도 해당 다이어그램을 통해 이해할 수 있을 것이다. 실행중인 EC2, RDS의 대시보드를 열어보면 각각 속해있는 서브넷을 확인할 수 있다. 이처럼 AWS 리소스가 VPC 내에 존재하기 위해서는 반드시 특정 서브넷에 속할 수 밖에 없는 것이다.
하나의 VPC에서 여러 서브넷을 나눈다는 것은 그만큼 여러 네트워크 망을 생성할 수 있으며, VPC에 속한 인스턴스가 많을 경우, 각각의 역할에 맞게 서브넷으로 구성할 수 있다. 예를 들어, 테스트용 인스턴스와 배포용 인스턴스를 구분할 때, 하나의 VPC에서 여러 서브넷으로 나눈 다음 각각의 서브넷에 보안그룹, ACL(Access Control List) 설정을 통해 트래픽 제어를 손쉽게 할 수 있을 것이다.
3. 의문점 해결
정리한 내용을 통해 EC2가 RDS와 연결되기 위해 작업한 VPC, 서브넷, 보안그룹에 대한 의문점을 해결할 수 있었다.
1) EC2와 RDS가 각각 다른 보안그룹을 갖는 이유
보안그룹은 EC2, RDS와 같은 AWS 리소스의 트래픽 규칙을 갖는 가상 방화벽 역할을 한다. 따라서 각 리소스마다 별도의 방화벽을 갖고 있는 것이다. 보안그룹이 리소스마다 할당되지 않으면, 리소스 별로 인바운드/아웃바운드 규칙을 세밀하게 제어하기 어려울 것이다.
또한 EC2에 보안그룹을 설정한 덕분에 RDS의 보안그룹에서 인바운드 규칙을 적용하기가 훨씬 수월해진다. EC2가 여러 개일 경우, 각각의 EC2의 IP 주소를 인바운드 규칙에 추가하지 않으며 이들이 속한 보안 그룹만 추가하면 되기 때문이다.
2) DB 서브넷 그룹을 생성할 때, 모든 가용 영역에 있는 서브넷을 추가하는 이유
서브넷은 각 가용영역(AZ)마다 존재한다. 서브넷 그룹은 각 AZ에 존재하는 서브넷들을 포함하는 개념이며, EC2의 가용영역에 속한 서브넷을 RDS 서브넷 그룹에 추가함으로써 고가용성 및 장애 복구를 보장할 수 있다. RDS의 복제본을 각 가용영역 내 서브넷에 위치시키는 것이다.
4. 정리
EC2와 RDS는 하나의 VPC 내에 존재하며 이들은 하나의 서브넷에 존재할 수도 있고, 서로 다른 서브넷에 존재할 수도 있다. 또한 각각의 리소스에는 별도의 보안 그룹이 연결되어 있다.
출처 :
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/ec2-security-groups.html
Windows 인스턴스에 대한 Amazon EC2 Amazon 보안 그룹 - Amazon Elastic Compute Cloud
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-eni.html#eni-basics
탄력적 네트워크 인터페이스 - Amazon Elastic Compute Cloud
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-subnets.html
VPC의 서브넷 - Amazon Virtual Private Cloud
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
[AWS] 가장쉽게 VPC 개념잡기
가장쉽게 VPC 알아보기
medium.com