개발자의 노트북이 프라이빗 RDS 엔드포인트에 연결할 때 시간 초과가 나지만, 같은 자격 증명은 베스천 호스트에서 작동합니다. 아무것도 죽지 않았습니다. 그 노트북과 데이터베이스 사이의 경로에는 이름 해석, 트래픽을 나르는 경로, 데이터베이스가 실제로 보는 출처를 허용하는 보안 그룹 규칙 중 하나가 빠져 있습니다. 나머지 둘을 바꾸기 전에 어느 것이 빠졌는지 찾으세요.

올바른 계층에서 실패를 읽으세요

시간 초과는 하나의 오류가 아닙니다. 해석되지 않는 이름은 패킷이 장비를 떠나기 전에 실패합니다. 경로가 없는 주소는 패킷을 검은 구멍으로 보냅니다. 필터링된 포트는 잘못된 호스트와 똑같이 보이는 대기를 만듭니다. 단계를 순서대로 실행하고 처음 실패하는 단계에서 멈추세요.

dig +short db.internal.example
nc -vz db.internal.example 5432

이름이 공인 주소를 반환하거나 아무것도 반환하지 않으면, 터널이 아직 문제가 아닙니다.

이름이 해석되고 포트 테스트가 멈추면, 해석한 주소를 데이터베이스가 보고하는 주소와 비교하세요. 관리형 엔드포인트는 VPC 안에서는 프라이빗 주소로, 밖에서는 쓸모 있는 무엇으로도 해석되지 않을 수 있고, 오래된 조회에서 복사한 주소는 더 이상 응답하지 않는 호스트를 가리킵니다.

터널과 경로를 분리하세요

클라이언트 VPN을 연결한다고 모든 프라이빗 대역이 자동으로 라우팅되지는 않습니다. 프로필은 서비스가 밀어 넣는 경로를 담고, 클라이언트는 그중 일부만 설치할 수 있습니다. 클라이언트가 실제로 추가한 대역과 데이터베이스 주소가 그중 하나에 들어가는지 보세요.

ip route get 10.20.40.15
ip addr show tun0

터널 인터페이스를 가리키는 경로는 필요하지만, 반대편이 여전히 트래픽을 받아들여야 하므로 충분하지는 않습니다.

분할 터널 프로필이 이 반쪽 실패의 흔한 원인입니다. 프로필이 설계된 애플리케이션에는 작동하지만 데이터베이스 대역을 터널 밖에 남겨 두어, 방화벽이 만들 것과 똑같은 시간 초과를 만듭니다.

보안 그룹을 실제 출처에 맞추세요

RDS 보안 그룹은 사람이 아니라 출처를 허용합니다. 아키텍처에 따라 출처는 VPN 클라이언트 풀, 베스천의 프라이빗 주소, 또는 트래픽이 변환되는 NAT 주소일 수 있습니다. 규칙과 실제 패킷 출처를 함께 읽으세요.

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
  --query 'SecurityGroups[].IpPermissions'

노트북 한 대의 집 주소에 대한 규칙은 접근 설계가 아니라 유지보수 문제입니다.

클라이언트 VPN이나 NAT 게이트웨이가 경로에 있으면, 데이터베이스는 개발자의 터널 주소 대신 변환기의 주소를 볼 수 있습니다. 동작하는 베스천 구성에서 복사한 규칙이 노트북에서 실패할 수 있는 이유는, 두 경로가 모두 내부처럼 보여도 서로 다른 출처에서 도착하기 때문입니다.

넓은 길보다 좁은 길을 택하세요

개발자 한 명에게 데이터베이스 하나가 필요할 때, 세션 기반 전달은 완전한 네트워크 터널보다 운영 비용이 싼 경우가 많습니다. 로컬 클라이언트는 전달된 포트에 연결하고, 원격 구성 요소가 네트워크 안쪽에서 데이터베이스 연결을 맺습니다.

ssh -N -L 5432:db.internal.example:5432 bastion.internal.example

그 설계에서는 TLS 검증을 그대로 두세요. 클라이언트는 기대하는 이름에 대해 서버 인증서를 계속 검증해야 하며, 로컬 전달 포트는 검증을 끌 이유가 아니고, 끄면 잡아야 할 바로 그 신원 문제를 숨깁니다.

완전한 터널과 좁은 전달 중 무엇을 고를지는 보안 연극이 아니라 범위에 관한 결정입니다.

반복할 수 있는 길을 남기세요

해석된 주소 대신 엔드포인트 이름, 보안 그룹이 허용하는 출처 대역, 개발자가 쓰는 데이터베이스 역할을 기록하세요. 이 세 가지 사실이 앞으로의 실패 대부분을 전화 없이 설명합니다. 클라이언트 프로필 버전도, 예전 것이 나르던 경로를 없앨 수 있는 변경이 있으므로 더하세요.

그다음 승인된 출처 밖의 클라이언트가 여전히 거부되는지 한 번 시험하세요.

설정한 사람에게만 작동하는 프라이빗 데이터베이스는 프라이빗 접근이 아니라, 다시 발견되기를 기다리는 문서화되지 않은 예외입니다. 경로를 적어 두면, 다음 개발자는 수수께끼 대신 방법을 물려받습니다.

관련 글