API 키를 요구하여 API 보안

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

동영상: API 보호 방법을 소개하는 이 짧은 동영상을 확인하세요.

학습 내용

이 가이드에서는 다음 작업을 수행하는 방법을 설명합니다.

  • API 키를 요구하는 API 프록시 만들기
  • API 제품, 개발자 및 개발자 앱을 만듭니다.
  • API 키로 API 호출하기

무단 액세스로부터 API를 보호하는 것은 중요합니다. 이를 위한 한 가지 방법은 API 키를 사용하는 것입니다.

앱이 API 키를 확인하도록 구성된 API 프록시에 요청할 때 앱은 유효한 키를 제공해야 합니다. 런타임 시 API 키 확인 정책은 제공된 API 키에서 다음을 확인합니다.

  • 유효한가
  • 취소되지 않았는가
  • 요청한 리소스를 노출하는 API 제품의 API 키와 일치하는가

이 키가 유효하면 요청이 허용됩니다. 키가 유효하지 않으면 요청이 승인되지 않습니다.

API 프록시 만들기

  1. Apigee UI로 이동하고 로그인합니다.
  2. UI 왼쪽 상단의 드롭다운 메뉴를 사용해 조직을 선택합니다.
  3. 개발 > API 프록시를 클릭하여 API 프록시 목록을 표시합니다.

  4. 새로 만들기를 클릭합니다.
    프록시 만들기 버튼
  5. 프록시 빌드 마법사에서 역방향 프록시(가장 일반적)를 선택합니다.
  6. 다음과 같이 프록시를 구성합니다.
    필드 작업
    Proxy Name helloworld_apikey 입력
    Project Base Path

    /helloapikey로 변경

    Project Base Path는 API 프록시에 요청을 보내는 데 사용되는 URL의 일부입니다.

    설명 hello world protected by API key 입력
    대상(기존 API)

    http://mocktarget.apigee.net 입력

    이는 Apigee가 API 프록시에 대한 요청에서 호출하는 대상 URL을 정의합니다. 이 타겟은 Hello, Guest!와 같은 간단한 응답만 반환합니다.

  7. 다음을 클릭합니다.
  8. 일반 정책 페이지에서 API 키를 선택합니다. 이 옵션은 API 프록시에 두 개의 정책을 자동으로 추가하고 API 키를 생성하는 데 필요한 API 제품을 만듭니다.
  9. 다음을 클릭합니다.
  10. 요약 페이지에서 배포 환경이 선택되었는지 확인하고 만들기 및 배포를 클릭합니다.
  11. 프록시 편집을 클릭하여 API 프록시의 개요 페이지를 표시합니다.

정책 보기

  1. API 프록시 편집기에서 Develop 탭을 클릭합니다. API 프록시의 요청 흐름에 2개의 정책이 추가된 것을 볼 수 있습니다.
    • API 키 확인 – API 호출을 확인하여 유효한 API 키(쿼리 매개변수로 전송됨)가 있는지 확인합니다.
    • 쿼리 매개변수 API 키 삭제 – 확인 후 API 키를 삭제하여 불필요하게 전달 및 노출되지 않도록 하는 메시지 할당 정책입니다.
  2. 흐름 뷰에서 API 키 정책 아이콘 확인을 클릭하고 하단 코드 보기에서 정책의 XML 구성을 확인합니다. <APIKey> 요소는 호출 시 API 키를 찾아야 할 위치를 정책에 알려줍니다. 기본적으로 HTTP 요청의 apikey라는 쿼리 매개변수로 키를 찾습니다.

    <APIKey ref="request.queryparam.apikey" />

    apikey 이름은 임의적이며 API 키가 포함된 모든 속성일 수 있습니다.

API 호출 시도

이 단계에서는 대상 서비스에 직접 API를 성공적으로 호출한 다음, API 프록시를 성공적으로 호출하지 않고 정책에 의해 보호되는 방식을 확인합니다.

  1. 성공

    웹브라우저에서 다음 주소로 이동합니다. 요청을 전달하기 위해 API 프록시가 구성되어 있는 대상 서비스이지만, 지금은 직접 처리하도록 합니다.

    http://mocktarget.apigee.net

    Hello, Guest!라는 성공적인 응답을 받게 됩니다.

  2. 실패

    이제 다음 API 프록시를 호출해 봅니다.

    curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey

    여기서 YOUR ENV_GROUP_HOSTNAME은 환경 그룹 호스트 이름입니다. 환경 그룹 호스트 이름 찾기를 참조하세요.

    API 키 정책 확인이 없으면 이 호출은 이전 호출과 동일한 응답을 제공합니다. 하지만 이 경우 다음과 같은 오류 응답이 표시됩니다.

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    이 응답은 유효한 API 키를 쿼리 매개변수로 전달하지 않았음을 정확히 의미합니다.

다음 단계에서는 필요한 API 키를 가져옵니다.

API 제품 추가

Apigee UI를 사용하여 API 제품을 추가하려면 다음 안내를 따르세요.

  1. 게시 > API 제품을 선택합니다.
  2. 만들기를 클릭합니다.
  3. API 제품의 제품 세부정보를 입력합니다.
    필드 설명
    이름 API 제품의 내부 이름입니다. 이름에 특수문자를 지정하지 마세요.
    참고: API 제품이 생성된 후에는 이름을 수정할 수 없습니다.
    표시 이름 API 제품의 표시 이름입니다. 표시 이름은 UI에서 사용되며 언제든지 수정할 수 있습니다. 지정되지 않으면 이름 값이 사용됩니다. 이 필드는 이름 값을 사용하여 자동으로 채워지며 해당 콘텐츠를 수정하거나 삭제할 수 있습니다. 표시 이름에는 특수문자가 포함될 수 있습니다.
    설명 API 제품에 대한 설명입니다.
    환경 API 제품이 액세스를 허용할 환경입니다. 예를 들면 test 또는 prod입니다.
    액세스 공개를 선택합니다.
    액세스 요청 자동 승인 모든 앱에서 이 API 제품의 주요 요청을 자동으로 승인합니다.
    할당량 이 가이드에서는 무시합니다.
    허용된 OAuth 범위 이 가이드에서는 무시합니다.
  4. 작업 섹션에서 작업 추가를 클릭합니다.
  5. API 프록시 필드에서 방금 만든 API 프록시를 선택합니다.
  6. 경로 필드에 '/'를 입력합니다. 다른 필드를 무시합니다.
  7. 저장을 클릭하여 작업을 저장합니다.
  8. 저장을 클릭하여 API 제품을 저장합니다.

조직에 개발자와 앱 추가

이제 API를 사용하도록 개발자 가입 워크플로를 시뮬레이션합니다. 개발자는 API를 호출하는 앱을 하나 이상 가지며 각 앱에는 고유한 API 키가 생성됩니다. 이를 통해 API 제공업체는 API에 대한 액세스를 더 세밀하게 제어하고 앱별 API 트래픽을 더 상세하게 보고할 수 있습니다.

개발자 만들기

개발자를 만들려면 다음 절차를 따르세요.

  1. 메뉴에서 Publish > Developers를 선택합니다.
    참고: 아직 개발 화면에 있는 경우 DEVELOP'<'를 클릭하여 메뉴를 표시해서 Publish > Developers를 선택합니다.
  2. + Developer를 클릭합니다.
  3. 새 Developer 창에 다음을 입력합니다.
    필드 Enter
    이름 Keyser
    Soze
    사용자 이름 keyser
    이메일 keyser@example.com
  4. 만들기를 클릭합니다.

앱 등록

개발자 앱을 등록하려면 다음 절차를 따르세요.

  1. Publish > Apps를 선택합니다.
  2. + App을 클릭합니다.
  3. New Developer App 창에 다음을 입력합니다.
    필드 작업
    NameDisplay Name keyser_app 입력
    개발자 Keyser Soze (keyser@example.com) 선택
    Callback URLNotes 비워 두기
  4. 사용자 인증 정보 섹션에서 사용 안함을 선택합니다. 이 앱의 사용자 인증 정보는 만료되지 않습니다.
  5. 제품 추가를 클릭합니다.
  6. 방금 만든 제품을 선택합니다.
  7. 만들기를 클릭합니다.

API 키 가져오기

API 키를 가져오려면 다음 절차를 따르세요.

  1. Apps 페이지(Publish > Apps)에서 keyser_app을 클릭합니다.
  2. keyser_app 페이지에서 사용자 인증 정보 섹션의 옆에 있는 항목을 클릭합니다. 이 키는 생성한 제품과 연결됩니다.
  3. 키를 선택하고 복사합니다. 다음 단계에서 이를 사용합니다.

키로 API 호출

이제 API 키가 있으므로 이를 사용하여 API 프록시를 호출할 수 있습니다. 표시된 것과 같이 API 키를 쿼리 매개변수로 붙여넣습니다. 쿼리 매개변수에 불필요한 공백이 없는지 확인합니다.

curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key

이제 API 프록시를 호출하면 Hello, Guest! 응답이 표시됩니다.

수고하셨습니다. API 프록시를 만들었으며, 호출 시에 유효한 API 키가 포함되도록 요구하는 보호 장치를 추가했습니다.

참고로, 일반적으로 API 키를 쿼리 매개변수로 전달하는 것은 좋지 않습니다. 대신 HTTP 헤더로 전달하는 것이 좋습니다.

권장사항: HTTP 헤더로 키 전달

이 단계에서는 x-apikey라는 헤더에서 API 키를 찾도록 프록시를 수정해 봅시다.

  1. API 프록시를 수정하세요. 개발 > API 프록시 > helloworld_apikey를 선택하고 개발 뷰로 이동합니다.
  2. API 키 확인 정책을 선택하고 정책 XML을 수정하여 정책이 queryparam이 아닌 header에서 찾도록 지정합니다.

    <APIKey ref="request.header.x-apikey"/>
  3. API 프록시를 저장하고 배포를 사용하여 배포합니다.
  4. cURL을 사용하여 다음 API를 호출하여 API 키를 x-apikey라는 헤더로 전달합니다. 조직 이름을 반드시 바꿔야 한다는 것을 잊지 마십시오.

    curl -v -H "x-apikey: {api_key_goes_here}" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

변경을 완전히 완료하려면, 쿼리 매개변수 대신 헤더를 삭제하도록 메시지 할당 정책도 구성해야 합니다. 예를 들면 다음과 같습니다.

<Remove>
  <Headers>
      <Header name="x-apikey"/>
  </Headers>
</Remove>

관련 주제

다음은 API 제품 및 키와 관련된 몇 가지 주제입니다.

API 보호에는 액세스 토큰에 대한 사용자 인증 정보(예: 사용자 이름 및 비밀번호)를 교환하는 개방형 프로토콜인 OAuth와 같은 추가 보안이 필요합니다. 액세스 토큰은 길이가 긴 임의 문자열로, 원래의 사용자 인증 정보를 손상시키지 않고 앱 간을 비롯하여 메시지 파이프라인을 통과하여 전달할 수 있습니다.

보안 관련 주제의 개요는 프록시 보안을 참조하세요.