인터페이스 VPC 엔드포인트를 사용하여 다른 계정의 API Gateway 프라이빗 REST API에 액세스하려면 어떻게 해야 합니까?
인터페이스 Virtual Private Cloud(VPC) 엔드포인트를 사용하여 다른 AWS 계정의 Amazon API Gateway 프라이빗 REST API에 액세스하려고 합니다.
간략한 설명
인터페이스 VPC 엔드포인트를 사용하여 다른 AWS 계정에 있는 API Gateway 프라이빗 REST API에 액세스하려면 다음 단계를 완료하세요.
- 하나의 계정(계정 A)에서 Amazon Virtual Private Cloud(VPC)에 인터페이스 엔드포인트를 생성합니다.
- 두 번째 계정(계정 B)에서 API Gateway 프라이빗 REST API를 생성합니다.
- 인터페이스 엔드포인트가 API를 호출할 수 있도록 하는 프라이빗 REST API의 리소스 정책을 구성합니다.
- 프라이빗 REST API를 위한 메서드를 설정합니다.
- 프라이빗 REST API를 배포합니다.
- 계정 A에서 프라이빗 REST API를 호출하여 설정을 테스트합니다.
참고: API Gateway 프라이빗 REST API와 VPC 엔드포인트는 동일한 AWS 리전에 있어야 합니다.
해결 방법
Amazon VPC의 한 계정(계정 A)에 인터페이스 엔드포인트를 만듭니다.
새 인터페이스 VPC 엔드포인트 만들기
계정 A에서 VPC의 API Gateway를 위한 인터페이스 VPC 엔드포인트 만들기의 지침을 따르십시오.
중요: 정책에서 전체 액세스를 선택합니다. VPC 엔드포인트 정책을 사용하여 API ID로 엔드포인트 액세스를 제한하는 것이 가장 좋습니다. 또한 API Gateway 리소스 정책을 사용하여 보안 주체별로 엔드포인트 액세스를 제한하는 것도 좋습니다 자세한 내용은 최소 권한 적용을 참조하십시오.
인터페이스 엔드포인트를 만들 때 다음 작업을 수행하십시오.
- 서로 다른 가용 영역에서 여러 서브넷을 선택하는 것이 가장 좋습니다. 여러 가용 영역에 걸쳐 서브넷을 구성하면 인터페이스 엔드포인트가 잠재적인 가용 영역 장애에 대해 더욱 탄력적으로 대응할 수 있습니다.
- 퍼블릭 또는 프라이빗 DNS를 사용하여 프라이빗 REST API에 연결하도록 프라이빗 DNS를 활성화합니다.
참고: 인터페이스 VPC 엔드포인트에 대해 프라이빗 DNS를 활성화하는 경우 VPC에서 API Gateway 퍼블릭 API에 액세스할 수 없습니다. 자세한 내용을 보려면 VPC에서 API Gateway API에 연결할 경우 HTTP 403 Forbidden 오류가 발생하는 이유는 무엇입니까?를 참조하십시오. - 보안 그룹에는 VPC의 IP 주소 범위에서 들어오는 TCP 포트 443 인바운드 HTTPS 트래픽을 허용하는 규칙이 있어야 합니다. 해당 규칙은 VPC의 다른 보안 그룹에서 가져온 규칙일 수도 있습니다.
참고: 이러한 요구 사항 중 하나를 충족하는 보안 그룹이 없는 경우, VPC에 대한 새 보안 그룹을 만드십시오. 보안 그룹을 지정하지 않은 경우, 기본 보안 그룹이 엔드포인트 네트워크 인터페이스와 연결됩니다.
인터페이스 엔드포인트의 VPC 엔드포인트 ID 가져오기
인터페이스 엔드포인트를 만들면 VPC 엔드포인트 ID가 표시됩니다. 새 인터페이스 엔드포인트의 VPC 엔드포인트 ID를 복사합니다(예: vpce-1a2b3c456d7e89012).
참고: 프라이빗 REST API를 만들고 구성할 경우 이 VPC 엔드포인트 ID를 사용합니다.
인터페이스 엔드포인트의 퍼블릭 DNS 이름 가져오기
엔드포인트 페이지는 Amazon VPC 콘솔에 표시됩니다. 엔드포인트 페이지의 세부 정보 탭에 있는 DNS 이름 열에서 인터페이스 엔드포인트의 퍼블릭 DNS 이름을 복사합니다. 예를 들어 vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com입니다.
두 번째 계정(계정 B)에서 API Gateway 프라이빗 REST API를 만듭니다.
- 계정 B에서 API Gateway 콘솔을 엽니다.
- API 생성을 선택합니다.
- API 유형 선택에서 REST API 프라이빗 아래에 있는 빌드를 선택합니다.
- API 세부 정보에서 다음 정보를 입력합니다.
API 이름에 이름을 입력합니다.
(선택 사항) 설명에 설명을 입력합니다.
엔드포인트 유형을 프라이빗으로 설정합니다.
VPC 엔드포인트 ID에서 인터페이스 엔드포인트 ID를 입력합니다. 그런 다음 추가를 선택합니다.
참고: 인터페이스 엔드포인트를 프라이빗 REST API와 연결하면, API Gateway는 새로운 Amazon Route 53 별칭 레코드를 만듭니다. Route53 별칭을 사용하여 프라이빗 API에 액세스할 수 있습니다. - API 생성을 선택합니다.
자세한 내용은 프라이빗 API 만들기를 참조하십시오.
인터페이스 엔드포인트에서 API를 호출할 수 있도록 허용하는 프라이빗 REST API에 대한 리소스 정책을 구성합니다.
- API Gateway 콘솔의 탐색 창의 API에서 리소스 정책을 선택합니다.
- 리소스 정책 페이지의 텍스트 상자에 다음 예제 리소스 정책을 입력합니다.
참고: vpce-1a2b3c456d7e89012를 인터페이스 엔드포인트 ID로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c456d7e89012" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*" } ] }
자세한 내용을 보려면 프라이빗 API의 리소스 정책 설정을 참조하십시오.
프라이빗 REST API를 위한 메서드 설정
- API Gateway 콘솔의 탐색 창의 API 아래에서 리소스를 선택합니다.
- 리소스 창에서 작업을 선택한 다음, 메서드 생성을 선택합니다.
- /resource 노드 아래의 드롭다운 목록에서 모두를 선택한 다음 확인 표시 아이콘을 선택합니다.
- / - 모두 - 설정 창의 통합 유형에서 Mock를 선택합니다.
참고: 모의 통합은 도달하는 모든 요청에 응답합니다. - 저장을 선택합니다.
자세한 내용은 API Gateway의 REST API 메서드를 참조하십시오.
프라이빗 REST API 배포
- API Gateway 콘솔의 리소스 창에서 작업을 선택한 다음 API 배포를 선택합니다.
- API 배포 대화 상자에 다음 정보를 입력합니다.
배포 단계에서 **[New Stage]**를 선택합니다.
스테이지 이름에 이름을 입력합니다. 예를 들어, dev 또는 test입니다. - 배포를 선택합니다.
- 스테이지 편집기 창에서 프라이빗 DNS가 활성화된 경우 다음 URL을 사용하세요 메시지를 찾습니다. 프라이빗 REST API의 간접 호출 URL을 복사합니다.
참고: 프라이빗 REST API의 호출 URL을 사용하여 설정을 테스트합니다.
자세한 내용은 프라이빗 API 배포를 참조하십시오.
계정 A에서 프라이빗 REST API를 호출하여 설정 테스트
- 계정 A에서 인터페이스 엔드포인트와 동일한 VPC에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작합니다.
중요: 인터페이스 엔드포인트와 연결한 보안 그룹을 선택합니다. - Amazon EC2 인스턴스에 연결합니다.
참고: EC2 인스턴스로 인해 AWS 계정에 요금이 부과될 수 있습니다. 테스트할 인스턴스를 만든 경우, 테스트가 끝나면 인스턴스를 종료하여 요금이 추가로 청구되는 것을 방지하십시오. - EC2 인스턴스의 명령줄에서 다음 curl 명령 중 하나를 실행하여 계정 B의 프라이빗 REST API를 호출합니다.
참고: 자세한 내용은 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API 호출을 참조하십시오.
프라이빗 DNS 이름의 경우
다음 명령을 실행합니다.
참고: https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name을 프라이빗 API의 호출 URL로 바꿉니다. 이 명령은 인터페이스 엔드포인트에 프라이빗 DNS를 사용하도록 설정한 경우에만 작동합니다. 자세한 내용은 프라이빗 DNS 이름을 사용하여 프라이빗 API 호출을 참조하십시오.curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
Route53 별칭의 경우
다음 명령을 실행합니다.
참고: a1bc234d5e를 API의 ID로 바꾸고, vpce-1a2b3c456d7e89012를 인터페이스 엔드포인트 ID로 바꾸고, region을 API의 리전으로 바꿉니다. stage-name을 프라이빗 API를 배포한 스테이지의 이름으로 바꿉니다. 자세한 내용은 Route53 별칭을 사용하여 프라이빗 API 호출을 참조하십시오.curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
호스트 헤더가 있는 퍼블릭 DNS 이름의 경우
다음 명령을 실행합니다.
참고: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com을 인터페이스 엔드포인트의 퍼블릭 DNS 이름으로 바꾸고 stage-name을 프라이빗 API를 배포한 스테이지의 이름으로 바꿉니다. a1bc234d5e.execute-api.region.amazonaws.com을 프라이빗 API의 호출 URL로 바꿉니다.curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"
x-apigw-api-id 헤더가 포함된 퍼블릭 DNS 이름의 경우
다음 명령을 실행합니다.
참고: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com을 인터페이스 엔드포인트의 퍼블릭 DNS 이름으로 바꾸고 stage-name을 프라이빗 API를 배포한 스테이지의 이름으로 바꿉니다. a1bc234d5e를 API ID로 바꿉니다.curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e" - 명령 출력을 검토합니다. 연결에 성공하는 경우 API Gateway가 200 OK 응답을 반환합니다.
관련 정보
API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

