애플리케이션 또는 Network Load Balancer를 사용하여 API Gateway 프라이빗 API를 호출하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 11월 3일

내 API Gateway 프라이빗 API를 로드 밸런서 뒤쪽의 대상으로 설정하고 싶습니다. 그런 다음 내 계정 또는 다른 AWS 계정을 사용하여 애플리케이션 또는 Network Load Balancer에서 내 프라이빗 API에 액세스하려고 합니다. 이를 어떻게 설정해야 하나요?

간략한 설명

AWS Direct Connect 또는 Amazon Route 53을 사용하여 프라이빗 API에 액세스하려면 프라이빗 API를 호출하는 방법을 참조하세요. 인터페이스 VPC 엔드포인트를 사용하여 다른 AWS 계정의 API Gateway 프라이빗 REST API에 액세스할 수도 있습니다.

다음 설정에서는 프라이빗 API가 로드 밸런서의 대상으로 추가됩니다. 이 작업은 Amazon Virtual Private Cloud(VPC) 엔드포인트 엘라스틱 네트워크 인터페이스 IP 주소를 사용하여 수행됩니다.

중요: 사용자 지정 도메인 이름은 프라이빗 API에서 지원되지 않습니다. 해결 방법으로 도메인을 호출하여 로드 밸런서에 연결할 수 있습니다. 그런 다음 이 문서에서 설명하는 설정을 사용하여 프라이빗 API를 호출합니다.

해결 방법

Amazon VPC 엔드포인트 생성

1.    Amazon VPC 콘솔(Amazon VPC console)을 열고 엔드포인트(Endpoints)를 선택한 다음 엔드포인트 생성(Create endpoint)을 선택합니다.
참고: API execute-api를 사용하여 VPC에 이미 설정된 Amazon VPC 엔드포인트가 있는 경우 프라이빗 DNS가 비활성화되었는지 확인하세요.

2.    서비스(Services)의 경우 com.amazonaws.com.your-region.execute-api를 선택합니다.

3.    VPC의 경우 Amazon VPC를 선택합니다.

4.    서브넷(Subnets)의 경우 서로 다른 가용 영역(AZ ID)에 있는 두 개의 서브넷을 선택한 다음 엔드포인트 생성(Create endpoint)을 선택합니다.

5.    엔드포인트를 선택하고 서브넷(subnets)을 선택한 다음 IP 주소(IP address)를 복사합니다. 이 IP 주소는 다른 단계에서 사용합니다.

자세한 내용은 API Gateway execute-api용 인터페이스 VPC 엔드포인트 생성을 참조하세요.

프라이빗 REST API를 생성하고 Amazon VPC 엔드포인트 권한 부여

1.    API Gateway 콘솔(API Gateway console)을 열고 API 생성(Create API)을 선택합니다.

2.    REST API에서 구축(Build)을 선택합니다.

3.    설정(Settings)에서 다음을 입력합니다.
API 이름(API name)에 API 이름을 입력합니다.
엔드포인트 유형(Endpoint Type)프라이빗(Private)을 선택합니다.
엔드포인트 ID(Endpoint IDs)에는 이전에 생성한 엔드포인트 ID를 입력합니다.

4.    API 생성(Create API)을 선택합니다.

5.    탐색 창에서 리소스 정책(Resource Policy)을 선택합니다.

6.    리소스 정책 편집기에서 다음 정책을 붙여넣습니다.
참고:
vpce-id를 VPC 엔드포인트 ID로 바꿉니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account :<api-id>/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account-id>:<api-id>/*/*/*"
    }
  ]
}

7.    저장(Save)을 선택합니다.

자세한 내용은 API Gateway 콘솔을 사용하여 프라이빗 API 생성을 참조하세요.

AWS Certificate Manager 공인 인증서 생성 또는 가져오기

아직 이를 수행하지 않은 경우 다음 중 하나를 수행합니다.

공인 인증서 요청

-또는-

인증서 가져오기

Application Load Balancer 또는 Network Load Balancer 생성

아직 이를 수행하지 않은 경우 다음 중 하나를 수행합니다.

Application Load Balancer 생성

-또는-

Network Load Balancer 생성

대상 그룹 생성

1.    Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다.

2.    탐색 창의 로드 밸런싱(Load Balancing)에서 로드 밸런서(Load Balancers)를 선택하고 대상 그룹(Target Groups)을 선택한 다음 대상 그룹 생성(Create target group)을 선택합니다.

3.    대상 유형(target type)에서 IP 주소(IP addresses)를 선택합니다.

4.    대상 그룹 이름(Target group name)에 이름을 입력합니다.

Application Load Balancer

프로토콜(Protocol)에서 HTTPS를 선택합니다.
포트(Port)에서 443을 선택합니다.
VPC에서 사용자의 VPC를 선택합니다.
상태 점검 경로에 200,403을 입력합니다. (이렇게 하면 대상 그룹에서 VPC 엔드포인트가 정상(Healthy)으로 표시됨)

Network Load Balancer

프로토콜(Protocol)에서 TLS를 선택합니다.
포트(Port)에서 443을 선택합니다.
VPC에서 사용자의 VPC를 선택합니다.

5.    [Next(다음)]를 선택합니다.

6.    IP 지정(Specify IPs)에서 인터페이스 Amazon VPC 엔드포인트 생성(Create an interface Amazon VPC endpoint) 섹션에 복사한 IP 주소를 입력하고 IPv4 주소 추가(Add IPv4 address)를 선택합니다.

7.    대상 그룹 생성(Create target group)을 선택합니다.

로드 밸런서 구성

1.    EC2 콘솔을 엽니다.

2.    탐색 창에서 로드 밸런서(Load Balancers)를 선택한 다음, 로드 밸런서 생성(Create Load Balancer)을 선택합니다.

Application Load Balancer

체계(Scheme)에서 구성에 따라 인터넷 연결(Internet-facing) 또는 내부(Internal)를 선택합니다.
프로토콜(Protocol)에서 HTTPS를 선택합니다.
VPC서브넷(subnets)의 경우 VPC와 서브넷을 선택합니다.

Network Load Balancer 체계(Scheme)의 경우 구성에 따라 인터넷 연결(Internet-facing) 또는 내부를 선택합니다.
프로토콜(Protocol)에서 TLS를 선택합니다.
VPC서브넷(subnets)의 경우 VPC와 서브넷을 선택합니다.
보안 정책(Security policy)에서 기본 정책인 ELBSecurityPolicy-TLS(권장)를 선택합니다.
기본 SSL/TLS 인증서(Default SSL/TLS certificate)의 경우 ACM에서(From ACM)를 선택합니다.
인증서 선택(Select a certificate) 드롭다운 메뉴를 선택한 다음 인증서를 선택합니다.

3.    로드 밸런서 생성(Create load balancer)을 선택합니다.

참고: 로드 밸런서 대상은 VPC 엔드포인트가 생성한 탄력적 네트워크 인터페이스의 IP 주소여야 합니다. 이러한 작업은 1단계에서 수행되었습니다. VPC 엔드포인트를 선택하고 서브넷 탭을 열면 이러한 탄력적 네트워크 인터페이스를 찾을 수 있습니다.

Amazon Route 53 퍼블릭 또는 프라이빗 호스팅 영역에서 레코드 생성

아직 이를 수행하지 않은 경우 다음 중 하나를 수행합니다.

퍼블릭 호스팅 영역 생성

-또는-

프라이빗 호스팅 영역 생성

그런 다음 CNAME 레코드를 생성하여 애플리케이션 또는 Network Load Balancer와 연결합니다.

테스트

퍼블릭 로드 밸런서의 경우 로컬 머신에서 curl 요청을 보낼 수 있습니다.

프라이빗 로드 밸런서의 경우 로드 밸런서의 서브넷 중 하나에서 새 EC2 인스턴스를 시작합니다. 그런 다음, 다음과 유사한 curl 요청을 보냅니다.

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'Host: <api-id>.execute-api.<region>.amazonaws.com'

-또는-

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'x-apigw-api-id:{api-id}'

요청이 성공하면 200 OK 응답 코드가 반환됩니다. 요청이 실패하면 403 Forbidden 응답 코드 또는 DNS 확인 오류가 반환됩니다. 문제가 발생하는 경우 로드 밸런서 문제 해결을 참조하세요.