API 변환 및 보호Transform and protect your API

이 자습서에서는 프라이빗 백 엔드 정보를 노출시키지 있도록 API를 변환하는 방법을 보여 줍니다.The tutorial shows how to transform your API so it does not reveal a private backend info. 예를 들어 백 엔드에서 실행되는 기술 스택에 대한 정보를 숨기려고 할 수 있습니다.For example, you might want to hide the info about technology stack that is running on the backend. 또한 API HTTP 응답의 본문에 표시되는 원래 URL을 숨기고, 대신 APIM 게이트웨이로 리디렉션하려고 할 수도 있습니다.You might also want to hide original URLs that appear in the body of API's HTTP response and instead redirect them to the APIM gateway.

이 자습서에서는 Azure API Management로 속도 제한을 구성하여 백 엔드 API에 대한 보호를 추가하기가 얼마나 쉬운지 보여 줍니다.This tutorial also shows you how easy it is to add protection for your backend API by configuring rate limit with Azure API Management. 예를 들어 개발자가 과도하게 사용하지 않도록 API 호출 횟수를 제한하려고 할 수 있습니다.For example, you may want to limit a number of calls the API is called so it is not overused by developers. 자세한 내용은 API Management 정책을 참조하세요.For more information, see API Management policies

이 자습서에서는 다음 방법에 대해 알아봅니다.In this tutorial, you learn how to:

  • API를 변환하여 응답 헤더 제거Transform an API to strip response headers
  • API 응답 본문에 있는 원래 URL을 APIM 게이트웨이 URL로 바꾸기Replace original URLs in the body of the API response with APIM gateway URLs
  • 속도 제한 정책(제한)을 추가하여 API 보호Protect an API by adding rate limit policy (throttling)
  • 변환 테스트Test the transformations

정책

필수 조건Prerequisites

API Management 인스턴스로 이동Go to your API Management instance

API Management 인스턴스로 이동

  1. Azure Portal에 로그인합니다.Sign in to the Azure portal.

  2. 모든 서비스를 선택합니다.Select All services.

  3. 검색 상자에 api management를 입력합니다.In the search box, enter api management.

  4. 검색 결과에서 API Management 서비스를 선택합니다.In the search results, select API Management services.

  5. API Management 서비스 인스턴스를 선택합니다.Select your API Management service instance.

Azure Portal에서 API Management를 즐겨찾기에 추가하려면 별표를 선택합니다.To add API Management to your favorites in the Azure portal, select the star.

API Management 아이콘(The API Management icon (API Management 아이콘)이 이제 포털의 왼쪽 메뉴에 나타납니다.) now appears in the left menu in the portal.

API를 변환하여 응답 헤더 제거Transform an API to strip response headers

이 섹션에서는 사용자에게 표시하지 않으려는 HTTP 헤더를 숨기는 방법을 보여 줍니다.This section shows how to hide the HTTP headers that you do not want to show to your users. 이 예제에서는 HTTP 응답에서 다음과 같은 헤더가 삭제되었습니다.In this example, the following headers get deleted in the HTTP response:

  • X-Powered-ByX-Powered-By
  • X-AspNet-VersionX-AspNet-Version

원래 응답 테스트Test the original response

원래 응답을 확인하려면 다음을 수행합니다.To see the original response:

  1. APIM 서비스 인스턴스에서 API(API MANAGEMENT 아래)를 선택합니다.In your APIM service instance, select APIs (under API MANAGEMENT).
  2. API 목록에서 Demo Conference API를 선택합니다.Click Demo Conference API from your API list.
  3. 화면 위쪽에 있는 테스트 탭을 클릭합니다.Click the Test tab, on the top of the screen.
  4. GetSpeakers 작업을 선택합니다.Select the GetSpeakers operation.
  5. 화면 아래쪽에 있는 보내기 단추를 누릅니다.Press the Send button, at the bottom of the screen.

원래 응답은 다음과 비슷합니다.The original response should look like this:

정책

변환 정책 설정Set the transformation policy

아웃바운드 정책 설정

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 화면 맨 위에서 디자인 탭을 선택합니다.On the top of the screen, select Design tab.

  3. 모든 작업을 선택합니다.Select All operations.

  4. 아웃바운드 처리 섹션에서 </> 아이콘을 클릭합니다.In the Outbound processing section, click the </> icon.

  5. <아웃바운드> 요소 내부에 커서를 놓습니다.Position the cursor inside the <outbound> element.

  6. 오른쪽 창에서 변환 정책 아래에 있는 + HTTP 헤더 설정을 두 번 클릭합니다(2개의 정책 조각 삽입).In the right window, under Transformation policies, click + Set HTTP header twice (to insert two policy snippets).

    정책

  7. 다음과 같이 <outbound> 코드를 수정합니다.Modify your <outbound> code to look like this:

    <set-header name="X-Powered-By" exists-action="delete" />
    <set-header name="X-AspNet-Version" exists-action="delete" />
    

    정책

  8. 저장 단추를 클릭합니다.Click the Save button.

API 응답 본문에 있는 원래 URL을 APIM 게이트웨이 URL로 바꾸기Replace original URLs in the body of the API response with APIM gateway URLs

이 섹션에서는 API HTTP 응답의 본문에 표시되는 원래 URL을 숨기고, 대신 APIM 게이트웨이로 리디렉션하는 방법을 보여 줍니다.This section shows how to hide original URLs that appear in the body of API's HTTP response and instead redirect them to the APIM gateway.

원래 응답 테스트Test the original response

원래 응답을 확인하려면 다음을 수행합니다.To see the original response:

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 화면 위쪽에 있는 테스트 탭을 클릭합니다.Click the Test tab, on the top of the screen.

  3. GetSpeakers 작업을 선택합니다.Select the GetSpeakers operation.

  4. 화면 아래쪽에 있는 보내기 단추를 누릅니다.Press the Send button, at the bottom of the screen.

    원래 응답은 다음과 같습니다.As you can see the original response looks like this:

    정책

변환 정책 설정Set the transformation policy

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 모든 작업을 선택합니다.Select All operations.

  3. 화면 맨 위에서 디자인 탭을 선택합니다.On the top of the screen, select Design tab.

  4. 아웃바운드 처리 섹션에서 </> 아이콘을 클릭합니다.In the Outbound processing section, click the </> icon.

  5. <아웃바운드> 요소 내부에 커서를 놓습니다.Position the cursor inside the <outbound> element.

  6. 오른쪽 창의 변환 정책 아래에서 + 본문에서 문자열 찾기 및 바꾸기를 클릭합니다.In the right window, under Transformation policies, click + Find and replace string in body.

  7. find-and-replace 코드( <아웃바운드> 요소에서)를 수정하여 APIM 게이트웨이와 일치하도록 URL을 바꿉니다.Modify your find-and-replace code (in the <outbound> element) to replace the URL to match your APIM gateway. 예:For example:

    <find-and-replace from="://conferenceapi.azurewebsites.net" to="://apiphany.azure-api.net/conference"/>
    

속도 제한 정책(제한)을 추가하여 API 보호Protect an API by adding rate limit policy (throttling)

이 섹션에서는 속도 제한을 구성하여 백 엔드 API에 대한 보호를 추가하는 방법을 보여 줍니다.This section shows how to add protection for your backend API by configuring rate limits. 예를 들어 개발자가 과도하게 사용하지 않도록 API 호출 횟수를 제한하려고 할 수 있습니다.For example, you may want to limit a number of calls the API is called so it is not overused by developers. 이 예제에서 제한은 각 구독 ID에 대해 15초당 3회 호출로 설정됩니다. 개발자는 15초 후에 API 호출을 다시 시도할 수 있습니다.In this example, the limit is set to 3 calls per 15 seconds for each subscription Id. After 15 seconds, a developer can retry calling the API.

인바운드 정책 설정

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 모든 작업을 선택합니다.Select All operations.

  3. 화면 맨 위에서 디자인 탭을 선택합니다.On the top of the screen, select Design tab.

  4. 인바운드 처리 섹션에서 </> 아이콘을 클릭합니다.In the Inbound processing section, click the </> icon.

  5. <인바운드> 요소 내부에 커서를 놓습니다.Position the cursor inside the <inbound> element.

  6. 오른쪽 창의 액세스 제한 정책에서 + 키당 호출 속도 제한을 클릭합니다.In the right window, under Access restriction policies, click + Limit call rate per key.

  7. rate-limit-by-key 코드( <인바운드> 요소에서)를 다음 코드로 수정합니다.Modify your rate-limit-by-key code (in the <inbound> element) to the following code:

    <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
    

변환 테스트Test the transformations

이 시점에서 코드 편집기에서 코드를 살펴보면 정책은 다음과 같습니다.At this point if you look at the code in the code editor, your policies look like this:

<policies>
    <inbound>
        <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
        <base />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <set-header name="X-Powered-By" exists-action="delete" />
        <set-header name="X-AspNet-Version" exists-action="delete" />
        <find-and-replace from="://conferenceapi.azurewebsites.net:443" to="://apiphany.azure-api.net/conference"/>
        <find-and-replace from="://conferenceapi.azurewebsites.net" to="://apiphany.azure-api.net/conference"/>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

이 섹션의 나머지 부분에서는 이 문서에서 설정한 정책 변환을 테스트합니다.The rest of this section tests policy transformations that you set in this article.

삭제된 응답 헤더 테스트Test the stripped response headers

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 테스트 탭을 선택합니다.Select the Test tab.

  3. GetSpeakers 작업을 클릭합니다.Click the GetSpeakers operation.

  4. 보내기를 누릅니다.Press Send.

    다음에 보이는 것처럼 헤더가 삭제되었습니다.As you can see the headers have been stripped:

    정책

대체된 URL 테스트Test the replaced URL

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 테스트 탭을 선택합니다.Select the Test tab.

  3. GetSpeakers 작업을 클릭합니다.Click the GetSpeakers operation.

  4. 보내기를 누릅니다.Press Send.

    보이는 것처럼 URL이 대체되었습니다.As you can see the URL has been replaced.

    정책

속도 제한 테스트Test the rate limit (throttling)

  1. 데모 회의 API를 선택합니다.Select Demo Conference API.

  2. 테스트 탭을 선택합니다.Select the Test tab.

  3. GetSpeakers 작업을 클릭합니다.Click the GetSpeakers operation.

  4. 보내기를 계속해서 3번 누릅니다.Press Send three times in a row.

    요청을 3번 보낸 후에 429 요청이 너무 많음 응답이 표시됩니다.After sending the request 3 times, you get 429 Too many requests response.

  5. 15초 정도 기다렸다가 보내기를 다시 누릅니다.Wait 15 seconds or so and press Send again. 이번에는 200 정상 응답이 표시됩니다.This time you should get a 200 OK response.

    제한

비디오Video

다음 단계Next steps

이 자습서에서는 다음 방법에 대해 알아보았습니다.In this tutorial, you learned how to:

  • API를 변환하여 응답 헤더 제거Transform an API to strip response headers
  • API 응답 본문에 있는 원래 URL을 APIM 게이트웨이 URL로 바꾸기Replace original URLs in the body of the API response with APIM gateway URLs
  • 속도 제한 정책(제한)을 추가하여 API 보호Protect an API by adding rate limit policy (throttling)
  • 변환 테스트Test the transformations

다음 자습서를 진행합니다.Advance to the next tutorial: