리소스 정책을 사용하여 API Gateway REST API에 액세스할 수 있는 특정 IP 주소를 허용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 12월 8일

특정 IP 주소에서 Amazon API Gateway REST API에 대한 액세스를 허용하고 이외 모든 사람의 액세스를 제한하려고 합니다. 어떻게 해야 합니까?

간략한 설명

REST API에 대해 구체적으로 액세스를 허용하지 않은 IP 주소에 대한 액세스를 거부하는 리소스 정책을 생성합니다. 지정된 IP 주소에서 REST API를 호출하는 사용자(허용된 사용자)는 REST API에 액세스할 수 있습니다. 다른 IP 주소에서의 호출은 액세스가 거부되며 HTTP 403 사용 권한 없음 오류가 발생합니다.

해결 방법

참고: 다음 지침을 보려면 기존 API Gateway REST API를 사용하거나 테스트용 REST API 예제를 생성합니다. 이 설정에 대해 예제 API(PetStore)를 사용하는 경우 리소스 정책 생성 및 연결을 건너뜁니다.

API 메서드 설정

  1. API Gateway 콘솔을 연 다음 REST API를 선택합니다.
  2. 리소스 창에서 [작업(Actions)], [메서드 생성(Create Method)]을 선택합니다.
  3. / 리소스 노드 아래 드롭다운 목록에서 ANY를 선택하고 체크 표시 아이콘을 선택합니다.
  4. / - ANY - 설정 창의 통합 유형에서 Mock를 선택한 다음 저장을 선택합니다.

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

리소스 정책 생성 및 연결

  1. API Gateway 콘솔의 왼쪽 탐색 창에서 리소스 정책을 선택합니다.
  2. 다음 리소스 정책 예제를 복사하여 리소스 정책 텍스트 상자에 붙여 넣습니다.

리소스 정책 예제

{
  "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"]
        }
      }
    }
  ]
}

참고: 특정 IP 주소에 대한 액세스를 차단한 후 이외의 모든 사람에 대한 액세스를 허용하려면 예제: 소스 IP 주소 또는 범위에 따라 API 트래픽 거부의 리소스 정책을 참조하세요.

3.    aws:SourceIp에서 sourceIpOrCIDRBlock을 허용하려는 특정 IP 주소로 바꿉니다. CIDR 표기법을 사용하여 IP 주소 범위를 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

["10.0.0.0/8", "192.168.0.0/16", "172.16.0.1/32"]

참고: aws:SourceIp는 퍼블릭 IP 주소 범위에서만 작동합니다. 프라이빗 IP 범위에 대한 액세스를 허용하려면 aws:VpcSourceIp를 사용합니다. 이 조건은 프라이빗 API에 유효합니다. 자세한 내용은 aws:VpcSourceIp를 참조하십시오.

4.    [저장]을 선택합니다.

API 배포

  1. API Gateway 콘솔리소스 창에서 [작업(Actions)], [API 배포(Deploy API)]를 선택합니다.
  2. 배포 스테이지에서 [새 스테이지(New Stage)]를 선택합니다.
  3. 단계 이름에 이름을 입력합니다. 예를 들어, v1 또는 데모를 입력합니다.
  4. [배포(Deploy)]를 선택합니다.

참고: 이후에 리소스 정책을 변경하는 경우 API를 재배포해야 합니다.

리소스 정책 테스트

  1. API Gateway 콘솔스테이지 창에서 호출 URL을 복사합니다.
  2. 허용되는 IP 주소의 환경과 허용되지 않는 IP 주소의 환경 모두에서 HTTP 200 응답을 테스트합니다. 명령줄 인터페이스에서 curl을 사용하거나 Postman 앱을 사용합니다. curl에 대한 자세한 내용은 cURL 프로젝트 웹 사이트를 참조하세요.

참고: 테스트할 때 여러 환경에 대한 액세스 권한이 아직 없는 경우 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 설정할 수 있습니다. API의 리소스 정책에서 액세스를 허용하려는 모든 인스턴스의 IP 주소를 지정해야 합니다. 그런 다음, API를 재배포합니다.

curl을 사용하려면 다음 명령 중 하나를 사용합니다. 이때 https://yourInvokeUrl/을 REST API의 호출 URL로 바꿉니다.

Linux/Unix/macOS 환경의 경우:

curl -IX GET https://yourInvokeUrl/

Windows PowerShell의 경우:

curl https://yourInvokeUrl/

허용된 환경은 HTTP 200 응답을 수신합니다. 거부된 환경은 HTTP 403 금지된 오류를 수신합니다.