특정 IP 주소만 API Gateway REST API에 액세스하도록 허용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 2월 14일

특정 IP 주소만 Amazon API Gateway REST API에 액세스할 수 있도록 허용하려고 합니다. API Gateway REST API에 대한 액세스를 제한하려면 어떻게 해야 합니까?

간략한 설명

REST API에 대해 구체적으로 액세스를 허용하지 않은 IP 주소에 대한 액세스를 거부하는 리소스 정책을 생성합니다.

리소스 정책이 REST API에 연결되면 지정된 IP 주소에서 API를 호출하는 사용자(허용된 사용자)가 API에 액세스할 수 있습니다. 다른 IP 주소에서의 호출은 액세스가 거부되며 HTTP 403 사용 권한 없음 오류가 발생합니다.

특정 IP 주소를 차단하면서 다른 모든 IP 주소에 대한 액세스를 허용하려면 예: 소스 IP 주소 또는 범위를 기반으로 API 트래픽 거부를 참조하세요.

참고: API Gateway HTTP API는 현재 리소스 정책을 지원하지 않습니다.

해결 방법

참고: 다음 절차를 보려면 기존 API Gateway REST API를 사용하거나 테스트용 REST API 예제를 생성합니다. 예제 API(PetStore)를 사용하는 경우 두 번째 섹션인 API Gateway REST API에 대한 특정 IP 주소 액세스만 허용하는 리소스 정책 생성 및 연결로 건너뜁니다.

API 메서드 설정

1.    API Gateway 콘솔을 엽니다.

2.    REST API 선택

3.    [리소스(Resources)] 창에서 [작업(Actions)]을 선택합니다. 그런 다음, [메서드 생성(Create Method)]을 선택합니다.

4.    /resource 노드 아래의 드롭다운 목록에서 모두를 선택합니다. 그런 다음, 확인 표시 아이콘을 선택합니다.

5.    [/ - ANY - 설정] 창의 [통합 유형]에서 [Mock]를 선택합니다.

6.    [Save]를 선택합니다.

참고: Mock 통합 요청은 도달하는 모든 요청에 응답하며, 테스트에서 나중에 유용합니다.

특정 IP 주소만 API Gateway REST API에 액세스할 수 있도록 허용하는 리소스 정책을 생성하고 연결합니다.

1.    API Gateway 콘솔을 엽니다.

2.    왼쪽 탐색 창에서 리소스 정책을 선택합니다.

3.    리소스 정책 텍스트 박스에서 다음의 예제 리소스 정책을 붙여 넣습니다.

리소스 정책 예제

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
        }
      }
    }
  ]
}

3.    aws:SourceIp의 경우 sourceIpOrCIDRBlock 값을 액세스 권한을 부여하려는 특정 IP 주소로 바꿉니다. CIDR 표기법을 사용하여 IP 주소 범위를 지정할 수도 있습니다.

CIDR 표기법에 나열된 퍼블릭 IP 주소 문자열 예

["52.95.36.0/22", "15.230.39.196/31", "52.93.178.219/32"]

중요: aws:SourceIp 조건 값은 퍼블릭 IP 주소 범위에 대해서만 작동합니다. 프라이빗 IP 주소 범위에 대한 액세스를 허용하려면 조건 값 aws:VpcSourceIp를 대신 사용하십시오. 그런 다음, aws:VpcSourceIp 값으로 인터페이스 VPC 엔드포인트를 통해 프라이빗 API 엔드포인트를 호출하는 HTTP 클라이언트의 프라이빗 IP 주소를 입력합니다. 인터페이스 VPC 엔드포인트를 통해서만 API Gateway의 프라이빗 API 엔드포인트를 호출할 수 있습니다. 자세한 내용은 aws:VpcSourceIp를 참조하세요.

4.    [Save]를 선택합니다.

참고: Amazon CloudWatch Logs$context.identity.sourceIp 변수에는 REST API를 호출하는 프라이빗 IP 주소가 모두 나열됩니다. 자세한 내용은 데이터 모델, 권한 부여자, 매핑 템플릿 및 CloudWatch 액세스 로깅에 대한 $context 변수 섹션을 참조하십시오.

API 배포

1.    REST API의 리소스 창에서 작업을 선택합니다.

2.    API 배포를 선택합니다.

3.    배포 스테이지의 경우, 새 스테이지를 선택합니다.

4.    스테이지 이름에 이름을 입력합니다. 예를 들어 v1 또는 데모를 입력합니다.

5.    배포를 선택합니다.

중요: 리소스 정책을 변경할 때마다 REST API를 다시 배포해야 합니다.

리소스 정책 테스트

curl 또는 Postman 앱을 통해 API의 호출 URL을 테스트하여 REST API가 허용된 IP 주소에 대해 HTTP 200 정상 응답을 반환하는지 확인합니다. 그런 다음, 허용된 IP 주소가 없는 환경에서 다른 테스트를 실행하여 REST API가 HTTP 403 사용 권한 없음 오류를 반환하는지 확인합니다.

참고: 테스트할 때 여러 환경에 대한 액세스 권한이 없는 경우 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 설정할 수 있습니다. 테스트에 Amazon EC2 인스턴스를 사용하는 경우 먼저 인스턴스의 IP 주소를 API의 리소스 정책에 추가해야 합니다. 그런 다음 API를 다시 배포합니다.

curl을 사용하여 HTTP 200 OK 응답 또는 HTTP 403 오류에 대해 REST API를 테스트하려면

운영 체제에 따라 다음 중 하나의 명령을 실행합니다.

중요: https://yourInvokeUrl/을 REST API의 호출 URL로 바꿉니다.

Linux, Unix 및 macOS 환경의 경우 다음 명령을 실행합니다.

curl -IX GET https://yourInvokeUrl/

Windows PowerShell의 경우, 다음 명령을 실행합니다.

curl https://yourInvokeUrl/

리소스 정책이 올바르게 구성되면 허용된 환경은 HTTP 200 OK 응답을 수신합니다. 거부된 환경은 HTTP 403 사용 권한 없음 오류를 수신합니다.