EC2 인스턴스에서 발생하는 일반적인 RDS 연결 문제 해결 방법

Amazon EC2 인스턴스와 RDS 데이터베이스 간의 일반적인 연결 문제를 진단하고 해결하기 위한 실무 가이드. 안정적인 클라우드 애플리케이션 통신을 보장하기 위해 보안 그룹, VPC 라우팅, 네트워크 ACL, 그리고 RDS 구성 설정과 관련된 일반적인 문제 해결을 위한 체계적인 접근 방식을 배워보세요.

34 조회수

EC2 인스턴스에서 일반적인 RDS 연결 문제 해결

Amazon EC2 인스턴스를 Amazon Relational Database Service(RDS) 인스턴스에 연결하는 것은 많은 AWS 아키텍처에서 기본적인 작업입니다. 그러나 네트워크 구성의 복잡성으로 인해 연결 오류가 발생하는 경우가 많습니다. 이 가이드는 컴퓨팅 계층(EC2)과 관리형 데이터베이스 계층(RDS) 간의 가장 일반적인 연결 문제를 진단하고 해결하기 위한 체계적인 접근 방식을 제공합니다.

EC2와 RDS가 모두 AWS Virtual Private Cloud(VPC) 환경 내에 있다는 점을 이해하면, 대부분의 연결 문제는 잘못된 보안 그룹 규칙, 서브넷 라우팅 또는 데이터베이스 매개변수 구성 오류에서 비롯됩니다. 이러한 구성 요소를 체계적으로 확인하면 데이터베이스 액세스를 신속하게 복원할 수 있습니다.

성공적인 연결을 위한 필수 조건

문제 해결에 들어가기 전에 다음 기본 요소가 올바르게 구성되었는지 확인하십시오.

  1. VPC 정렬: 가장 간단한 구성을 위해서는 EC2 인스턴스와 RDS 인스턴스 모두 이상적으로 동일한 VPC 내에 있어야 하지만, VPC 피어링을 통해 VPC 간 연결도 가능합니다.
  2. 가용 영역(AZ): 라우팅이 VPC 내에서 일반적으로 처리하지만, 필요한 경우 애플리케이션 인프라(EC2)가 AZ를 통해 데이터베이스 인프라(RDS)에 도달할 수 있는지 확인합니다.
  3. 네트워크 도달 가능성: EC2 인스턴스가 실행 중이며 활성 네트워크 연결(예: 인터넷 또는 다른 내부 서비스에 도달 가능)이 있는지 확인합니다.

1단계: 보안 그룹 구성 확인(가장 흔한 원인)

보안 그룹은 EC2 인스턴스와 RDS 인스턴스 모두에 대한 가상 방화벽 역할을 합니다. 여기서 구성 오류가 발생하는 것이 연결 실패의 대다수 원인입니다.

A. EC2 보안 그룹 확인

EC2 인스턴스는 데이터베이스 포트로 트래픽이 나가는 것을 허용하는 아웃바운드 규칙이 필요합니다. 기본적으로 대부분의 보안 그룹은 모든 아웃바운드 트래픽(0.0.0.0/0을 모든 프로토콜/포트에서)을 허용하지만, 이를 확인하는 것이 좋습니다.

B. RDS 보안 그룹 인바운드 규칙 확인

이것이 중요한 단계입니다. RDS 보안 그룹은 EC2 인스턴스에서 들어오는 트래픽을 명시적으로 허용해야 합니다.

조치 가능한 확인 사항:

  1. RDS 콘솔로 이동하여 데이터베이스 인스턴스를 선택합니다.
  2. 연결 및 보안(Connectivity & security) 탭으로 이동하여 연결된 보안 그룹을 찾습니다.
  3. 인바운드 규칙(Inbound Rules)을 편집합니다.
  4. 특정 데이터베이스 포트(예: MySQL의 경우 3306, PostgreSQL의 경우 5432)에 대한 트래픽을 허용하는 규칙이 있는지 확인합니다.
  5. 이 규칙의 소스(Source)는 EC2 인스턴스의 보안 그룹 ID이거나, 보안 그룹 참조를 사용하지 않는 경우 EC2 인스턴스의 특정 사설 IP 범위여야 합니다.

모범 사례: 소스 필드에 특정 IP 주소를 사용하는 대신 항상 소스 리소스(EC2)의 보안 그룹 ID를 참조하십시오. 이렇게 하면 EC2 인스턴스의 사설 IP가 변경되더라도(예: 확장 또는 재부팅 시) 연결이 유지될 수 있습니다.

예시 인바운드 규칙(PostgreSQL):

유형 프로토콜 포트 범위 소스
PostgreSQL TCP 5432 sg-012345abcdef67890 (사용자 EC2 보안 그룹 ID)

2단계: RDS 퍼블릭 액세스 가능 여부 및 엔드포인트 확인

EC2 인스턴스가 퍼블릭 서브넷에 있지 않거나 퍼블릭 인터넷을 통해 연결해야 하는 경우(프로덕션 환경에서는 일반적으로 권장되지 않음), RDS 퍼블릭 액세스 가능 여부를 확인해야 합니다.

A. 퍼블릭 액세스 가능 여부 설정

  1. RDS 콘솔에서 RDS 인스턴스의 연결 및 보안(Connectivity & security) 탭을 확인합니다.
  2. 퍼블릭 액세스 가능(Publicly accessible)아니요(No)로 설정된 경우, 데이터베이스는 동일한 VPC 내의 리소스(예: 프라이빗 서브넷의 EC2 인스턴스)에서만 도달할 수 있습니다.
  3. 퍼블릭 액세스 가능(Publicly accessible)예(Yes)로 설정된 경우, EC2 인스턴스가 프라이빗 서브넷에 있는 경우 인터넷 게이트웨이 또는 NAT 게이트웨이로의 유효한 경로를 가지고 있는지, 그리고 보안 그룹이 필요한 퍼블릭 IP 범위로부터의 인그레스를 허용하는지(또는 엄격한 IP 화이트리스팅을 통해 보호되는지) 확인하십시오.

B. 엔드포인트 확인

EC2 인스턴스의 애플리케이션이 올바른 RDS 엔드포인트(DNS 이름)와 올바른 포트를 사용하고 있는지 확인하십시오. 여기서 불일치가 발생하면 시간 초과 또는 연결 거부가 발생합니다.

EC2 인스턴스에서 telnet 또는 nc(netcat) 유틸리티를 사용하여 RDS 엔드포인트 및 포트에 대한 기본 TCP 도달 가능성을 테스트하십시오.

# 포트 3306의 MySQL의 경우
telnet your-rds-endpoint.rds.amazonaws.com 3306

# 포트 5432의 PostgreSQL의 경우
nc -zv your-rds-endpoint.rds.amazonaws.com 5432

성공적인 연결은 빈 화면이나 즉각적인 연결 메시지를 반환합니다. 실패(시간 초과 또는 거부)는 보안 그룹이나 서브넷 라우팅으로 인한 네트워크 차단이 있음을 나타냅니다.

3단계: 서브넷 및 라우팅 구성 분석

보안 그룹이 올바른 것으로 보이면 문제가 서브넷 통신 방식에 있을 수 있습니다.

A. 네트워크 ACL(NACL)

네트워크 ACL은 서브넷 수준에서 작동하는 상태 비저장 방화벽입니다. 사용자 지정 NACL을 구현한 경우 연결 완료에 필요한 반환 트래픽을 차단할 수 있습니다.

  • EC2 서브넷과 RDS 서브넷 모두에 대한 NACL을 확인합니다.
  • 인바운드 및 아웃바운드 규칙 모두 데이터베이스 포트 및 반환 트래픽을 위한 임시 포트 범위(1024-65535)에서 트래픽을 허용하는지 확인합니다.

B. VPC 엔드포인트(해당되는 경우)

EC2 인스턴스가 프라이빗 서브넷에 있고 S3용 VPC 게이트웨이 엔드포인트 또는 기타 서비스용 인터페이스 엔드포인트를 통해 RDS 엔드포인트에 액세스하는 경우, 해당하는 경우 엔드포인트 정책이 RDS 서비스 통신을 허용하는지 확인하십시오. 단, RDS는 일반적으로 표준 VPC 라우팅에 의존합니다.

4단계: 데이터베이스 인스턴스 구성 확인

네트워크 연결이 확인된 경우(2단계 성공), 문제는 데이터베이스 엔진 자체에 있습니다.

A. 데이터베이스 자격 증명 및 권한 부여

EC2 인스턴스에서 연결하는 애플리케이션에서 사용 중인 사용자 이름, 암호 및 데이터베이스 이름을 확인합니다. MySQL 및 PostgreSQL과 같은 RDS 서비스는 엄격한 사용자 인증을 시행합니다.

B. 매개변수 그룹 및 데이터베이스 상태

  1. 데이터베이스 상태: RDS 인스턴스 상태가 사용 가능(Available)인지 확인합니다. 수정 중, 백업 중 또는 재부팅 중인 경우 연결이 실패합니다.
  2. 매개변수 그룹: RDS 인스턴스에 적용된 사용자 지정 매개변수 그룹을 확인합니다. 특정 설정(일부 MySQL 구성에서 skip-networking과 같이 관리형 RDS에서는 덜 일반적)이 연결을 방지할 수 있습니다.

C. IAM 데이터베이스 인증(사용하는 경우)

암호 대신 IAM을 데이터베이스 인증에 사용하는 경우, EC2 인스턴스에 연결된 IAM 역할(또는 애플리케이션을 실행하는 사용자 프로필)에 올바른 권한(rds-db:connect)이 있는지 확인하고 연결 문자열에 필요한 인증 토큰이 올바르게 포함되어 있는지 확인하십시오.

문제 해결 흐름 요약

문제를 신속하게 해결하려면 이 우선순위 지정된 체크리스트를 사용하십시오.

  1. Ping/Telnet 확인: EC2가 telnet 또는 nc를 사용하여 RDS 포트에 도달할 수 있습니까? (기본 네트워크 경로/보안 그룹 테스트).
  2. RDS 보안 그룹: 인바운드 규칙이 EC2 보안 그룹 에서 RDS 포트로의 트래픽을 허용합니까?
  3. NACL: 인바운드 및 아웃바운드 규칙 모두 필요한 포트(데이터베이스 포트 + 임시 포트)에 대해 열려 있습니까?
  4. 엔드포인트/자격 증명: 연결 문자열이 올바르고 자격 증명이 유효합니까?
  5. DB 상태: RDS 인스턴스가 사용 가능(Available)합니까?

보안 경계에서 데이터베이스 인증 계층까지 이러한 계층을 체계적으로 확인하면 대부분의 일반적인 EC2-to-RDS 연결 장애물을 효율적으로 격리하고 수정할 수 있습니다.