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

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

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

간략한 설명

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

해결 방법

다음 지침에서는 기존 API Gateway API를 사용하거나 테스트를 위해 예제 API를 생성합니다. 이 설정에 대해 예제 API(PetStore)를 사용하는 경우 아래의 리소스 정책 생성 및 연결 단계를 건너뜁니다.

API 메서드 설정

1.    API Gateway 콘솔을 연 다음 API를 선택합니다.

2.    [리소스] 창에서 [작업], [메서드 생성]을 선택합니다.

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 콘솔의 [리소스] 창에서 [작업], [API 배포]를 선택합니다.

2.    [배포 스테이지]에서 [새 스테이지]를 선택합니다.

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

4.    [배포]를 선택합니다.

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

리소스 정책 테스트

1.    API Gateway 콘솔의 [스테이지] 창에서 [호출 URL]을 복사합니다.

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

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

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

Linux/Unix/macOS 환경의 경우:

curl -IX GET https://yourInvokeUrl/

Windows PowerShell의 경우:

curl https://yourInvokeUrl/

허용되는 환경은 HTTP 200 응답을 수신하고, 거부되는 환경은 HTTP 403 Forbidden 오류를 수신합니다.