Amazon API Gateway에서 연결 문제가 발생하여 "Connection refused" 또는 "Access denied"와 같은 오류 메시지가 표시됩니다. 애플리케이션의 API Gateway에서 동적 IP 주소 변경을 관리하는 방법을 알고 싶습니다.
간략한 설명
다음과 같은 이유로 "Connection refused" 또는 "Access denied" 오류 메시지가 표시될 수 있습니다.
- 애플리케이션 방화벽에서 API Gateway 엔드포인트 IP 주소를 허용합니다.
- 엔드포인트 IP 주소가 DNS 레코드의 대상 IP로 사용되고 있습니다.
이러한 문제를 해결하려면 다음 작업을 수행하십시오.
해결 방법
관련 IP 주소 범위 식별
현재 JSON 형식의 IP 주소 범위를 검토하십시오. 게시된 API Gateway IP 주소 범위는 아웃바운드 트래픽에만 해당하며 자주 변경됩니다. 엔드포인트를 기반으로 IP 주소 범위를 허용할 수 있습니다.
엔드포인트 또는 API 유형에 따라 다음 서비스 식별자를 사용하여 관련 IP 주소를 식별하십시오.
- AWS 리전 API 엔드포인트의 경우: API_GATEWAY, AMAZON, EC2
- HTTP API의 경우: API_GATEWAY, AMAZON, EC2
- 엣지 최적화 엔드포인트의 경우: CLOUDFRONT
참고: 리전 엔드포인트 및 HTTP API의 경우 API_GATEWAY는 아웃바운드 IP 주소에만 해당합니다. 인바운드 IP 주소의 경우 AMAZON 또는 EC2를 사용하십시오. EC2는 AMAZON IP 주소의 하위 집합입니다. 엣지 최적화 엔드포인트의 경우 CLOUDFRONT에 CLOUDFRONT_GLOBAL_IP_LIST 및 CLOUDFRONT_REGIONAL_EDGE_IP_LIST 범위가 포함되며, 두 범위가 모두 허용되어야 합니다.
API_GATEWAY와 같은 특정 서비스 식별자에 대한 모든 IP 주소 범위를 가져오려면 다음 명령을 실행합니다.
- jq -r '.prefixes[] | select(.service=="API_GATEWAY") | .ip_prefix' < ip-ranges.json
참고: API_GATEWAY를 모든 IP 주소 범위에 사용할 서비스 식별자로 바꾸십시오.
어디서나 액세스할 수 있는 IP 주소 범위 목록을 중앙 집중화하려면 Amazon Virtual Private Cloud(Amazon VPC) 고객 관리형 접두사 목록을 생성하십시오. 자세한 내용은 고객 관리형 접두사 목록을 참조하십시오.
IP 주소 범위 변경 알림 구독
IP 주소 변경은 정의된 일정을 따르지 않습니다. IP 주소 변경에 대한 알림을 받으려면 AWS IP 주소 범위 알림을 구독하십시오.
IP 주소 범위 변경 알림 예시:
{
"create-time":"yyyy-mm-ddThh:mm:ss+00:00",
"synctoken":"0123456789",
"md5":"6a45316e8bc9463c9e926d5d37836d33",
"url":"https://ip-ranges.amazonaws.com/ip-ranges.json"
}
AWS 호스팅 리소스에 대한 방화벽 규칙을 업데이트하기 위한 자동화된 프로세스 구현
방화벽 규칙 업데이트를 자동화하려면 AWS Lambda 콘솔을 사용하여 Lambda 함수에 대한 Amazon Simple Notification Service(Amazon SNS) 주제 트리거를 추가하십시오. Lambda 함수는 Amazon Simple Storage Service(Amazon S3)에 이전에 저장된 버전과 새로 업데이트된 ip-ranges.json 파일의 IP 주소 범위를 비교합니다. 그런 다음 AWS SDK를 사용하여 보안 그룹 또는 AWS WAF 규칙의 IP 주소를 자동으로 업데이트합니다. 자세한 내용은 Amazon S3 및 AWS Lambda를 사용한 차이 검사기 구축을 참조하십시오.
고정 IP 주소 해결 방법 사용
참고: 다음과 같은 해결 방법으로 인해 설치 시 추가 비용과 지연 시간이 발생할 수 있습니다.
Network Load Balancer 사용
Network Load Balancer는 각 가용 영역의 고정 IP 주소를 자동으로 제공합니다. 애플리케이션은 고정 IP 주소를 로드 밸런서의 프론트엔드 IP 주소로 사용할 수 있습니다. Network Load Balancer는 각 가용 영역에 탄력적 IP 주소를 할당할 수도 있습니다.
Network Load Balancer를 사용하여 클라이언트 요청을 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 라우팅한 다음, API Gateway로 프록시합니다. API Gateway로 요청을 프록시하려면 인스턴스에 NGINX를 역방향 프록시로 설치합니다. 지침은 NGINX 웹 사이트의 Installing nginx를 참조하십시오.
Global Accelerator 사용
AWS Global Accelerator는 고정 IP 주소를 사용하여 최종 사용자에게 인터넷 연결 API를 허용합니다.
하나 이상의 리전에서 애플리케이션 엔드포인트에 대한 고정 진입점 역할을 하는 고정 IP 주소를 가져오려면 Global Accelerator를 사용하십시오. 그런 다음 Application Load Balancer, Network Load Balancer 또는 Amazon EC2 인스턴스를 사용하여 API 요청을 API Gateway로 프록시하십시오. 자세한 내용은 AWS Global Accelerator에서 제공하는 고정 IP 주소를 통해 AWS API Gateway에 액세스를 참조하십시오.
참고: 네트워크에서 들어오는 인터넷 연결 통신이 필요하고 다른 모든 트래픽은 거부해야 하는 경우에는 보안 정책에 고정 IP 주소를 입력하십시오.
Lambda 통합 사용
다음 단계를 완료하십시오.
- API에서 Lambda 통합을 생성합니다.
- Lambda 함수를 가상 프라이빗 클라우드(VPC)에 연결합니다. 여기서 서브넷은 아웃바운드 트래픽에 탄력적 IP 주소가 있는 NAT 게이트웨이를 사용합니다.
- 외부 서비스에 단일 고정 IP 주소를 허용합니다. Lambda는 프라이빗 서브넷에서 실행되고 NAT 게이트웨이는 퍼블릭 서브넷에서 작동합니다.
- 인바운드 트래픽을 제한하려면 백엔드 애플리케이션의 보안 정책이나 방화벽에 고정 IP 주소를 추가하십시오.
관련 정보
AWS IP 주소 범위