API 키를 요구하여 API 보안

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

학습할 내용

이 가이드에서는 다음 방법을 배웁니다.

  • API 키를 요구하는 API 프록시 만들기
  • API 제품을 추가합니다.
  • 개발자를 추가하고 앱 등록하기
  • API 키로 API 호출하기

무단 액세스로부터 API를 보호하는 것은 중요합니다. 이를 위한 한 가지 방법은 API 키 (공개 키, 소비자 키 또는 앱 키라고도 함)를 사용하는 것입니다.

앱에서 API에 요청하면 유효한 키를 제공해야 합니다. 런타임 시 API 키 확인 정책은 제공된 API 키가 다음 조건을 충족하는지 확인합니다.

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

이 키가 유효하면 요청이 허용됩니다. 키가 유효하지 않으면 요청이 승인에 실패합니다.

이 튜토리얼에서는 유효한 API 키가 있어야 액세스할 수 있는 API 프록시를 만듭니다.

필요한 항목

  • Apigee Edge 계정. 아직 계정이 없으면 Apigee Edge 계정 만들기의 안내에 따라 가입할 수 있습니다.
  • API를 호출하는 웹브라우저.
  • (추가 크레딧 섹션의 경우 필요하지 않음) 명령줄에서 API를 호출할 수 있도록 머신에 cURL이 설치되어 있습니다.

API 프록시 만들기

'mocktarget' 정보

mocktarget 서비스는 Apigee에서 호스팅되며 간단한 데이터를 반환합니다. API 키 또는 액세스 토큰이 필요하지 않습니다. 실제로 웹브라우저에서도 액세스할 수 있습니다. 다음을 클릭하여 사용해 보세요.

http://mocktarget.apigee.net

타겟은 Hello, Guest!를 반환합니다. /help 리소스를 사용하여 사용 가능한 다른 API 리소스의 도움말 페이지를 확인하세요.

  1. https://apigee.com/edge로 이동하여 로그인하세요.
  2. 측면 탐색 메뉴 상단의 사용자 이름을 클릭하여 사용자 프로필 메뉴를 표시한 후 목록에서 조직을 선택하여 원하는 조직으로 전환합니다.

    사용자 프로필 메뉴에서 조직 선택
  3. 방문 페이지에서 API 프록시를 클릭하여 API 프록시 목록을 표시합니다.

    Edge API 메뉴
  4. + Proxy를 클릭합니다.
    프록시 만들기 버튼
  5. 프록시 만들기 페이지에서 리버스 프록시 (가장 일반적)를 선택합니다.
  6. 프록시 세부정보 페이지에서 다음과 같이 프록시를 구성합니다.
    필드 작업
    Proxy Name helloworld_apikey 입력
    Project Base Path

    /helloapikey로 변경

    프로젝트 기본 경로는 API 프록시에 요청하는 데 사용되는 URL의 일부입니다.

    참고: API 버전 관리에 대한 Apigee 권장사항은 웹 API 설계: 누락된 링크 eBook의 버전 관리를 참조하세요.

    Existing API

    http://mocktarget.apigee.net 입력

    이는 Apigee Edge가 API 프록시에 대한 요청에서 호출하는 대상 URL을 정의합니다.

    설명 hello world protected by API key 입력
  7. 다음을 클릭합니다.
  8. 일반 정책 페이지의 보안: 승인에서 API 키를 선택하고 다음을 클릭합니다. 이렇게 하면 API 프록시에 두 개의 정책이 추가됩니다.
  9. Virtual Hosts 페이지에서 defaultsecure를 선택한 후 Next를 클릭합니다. 기본값을 선택하면 http://로 API를 호출할 수 있습니다. 보안을 선택하면 https://로 API를 호출할 수 있습니다.
  10. 요약 페이지에서 테스트 배포 환경이 선택되어 있는지 확인한 다음 만들기 및 배포를 클릭합니다.
  11. 새 API 프록시 및 API 제품이 성공적으로 생성되었으며 API 프록시가 테스트 환경에 배포되었다는 확인이 표시됩니다.
  12. 프록시 수정을 클릭하여 API 프록시의 개요 페이지를 표시합니다.

정책 보기

  1. API 프록시 편집기에서 Develop 탭을 클릭합니다. API 프록시의 요청 흐름에 두 가지 정책이 추가된 것을 확인할 수 있습니다.
    • API 키 확인: API 호출을 검사하여 유효한 API 키가 있는지 확인합니다 (쿼리 매개변수로 전송됨).
    • Remove Query Param apikey: 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 프록시를 호출해 봅니다.

    http://ORG_NAME-test.apigee.net/helloapikey
    

    ORG_NAME을 Edge 조직의 이름으로 바꿉니다.

    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. +API 제품을 클릭합니다.
  3. API 제품의 제품 세부정보를 입력합니다.

    필드 설명
    이름 API 제품의 내부 이름입니다. 이름에 특수문자를 지정하지 마세요.
    참고: API 제품을 만든 후에는 이름을 수정할 수 없습니다. 예를 들면 helloworld_apikey-Product입니다.
    표시 이름 API 제품의 표시 이름입니다. 표시 이름은 UI에서 사용되며 언제든지 수정할 수 있습니다. 지정하지 않으면 이름 값이 사용됩니다. 이 필드는 이름 값을 사용하여 자동으로 입력되며 내용을 수정하거나 삭제할 수 있습니다. 표시 이름에는 특수문자를 포함할 수 있습니다. 예를 들면 다음과 같습니다. helloworld_apikey-Product
    설명 API 제품에 대한 설명입니다. Test product for tutorial을 예로 들 수 있습니다.
    환경 API 제품이 액세스를 허용할 환경입니다. 예를 들면 test 또는 prod입니다.
    액세스 공개를 선택합니다.
    액세스 요청 자동 승인 모든 앱에서 이 API 제품에 대한 키 요청의 자동 승인을 사용 설정하세요.
    할당량 이 가이드에서는 무시합니다.
    허용된 OAuth 범위 이 가이드에서는 무시합니다.
  4. API 리소스 섹션에서 방금 만든 API 프록시를 선택합니다. helloworld_apikey을 예로 들 수 있습니다.
  5. Add를 클릭합니다.
  6. 경로 섹션에서 경로 '/'를 추가합니다.
  7. Add를 클릭합니다.
  8. 저장을 클릭합니다.

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

조직에 개발자 및 앱 추가

다음으로 API를 사용하기 위해 가입하는 개발자의 워크플로를 시뮬레이션하겠습니다. 개발자에게 API를 호출하는 앱이 하나 이상 있으며 각 앱은 고유한 API 키를 가져옵니다. 이를 통해 API 제공업체는 API 액세스를 보다 세부적으로 제어하고 앱별 API 트래픽에 대한 보다 세분화된 보고를 할 수 있습니다.

개발자 만들기

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

  1. 메뉴에서 Publish > Developers를 선택합니다.
  2. + Developer를 클릭합니다.
  3. 신규 개발자 창에 다음을 입력합니다.

    필드 입력
    First Name(이름) Keyser
    Last Name Soze
    Username keyser
    Email keyser@example.com
  4. 만들기를 클릭합니다.

앱 등록

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

  1. Publish > Apps를 선택합니다.
  2. + App을 클릭합니다.
  3. New App 창에 다음을 입력합니다.

    p
    필드 작업
    NameDisplay Name keyser_app 입력
    Company / Developer Developer 선택
    Developer Keyser Soze (keyser@example.com) 선택
    Callback URLNotes 비워 두기
  4. 사용자 인증 정보 섹션의 만료 메뉴에서 사용 안함을 선택합니다. 이 앱의 사용자 인증 정보는 만료되지 않습니다.
  5. Products에서 Add product를 클릭합니다.
  6. helloworld_apikey-Product를 선택합니다.
  7. Add를 클릭합니다.
  8. App Details 섹션과 오른쪽에 있는 Create를 클릭하여 작업을 저장합니다.

API 키 가져오기

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

  1. 페이지 (게시 > 앱)에서 keyser_app을 클릭합니다.
  2. keyser_app 페이지에서 사용자 인증 정보 섹션의 옆에 있는 표시를 클릭합니다. 제품 섹션에서 키가 helloworld_apikey와 연결되어 있음을 확인합니다.

  3. 를 선택하고 복사합니다. 다음 단계에서 이를 사용합니다.

키로 API 호출

이제 API 키가 있으므로 이를 사용하여 API 프록시를 호출할 수 있습니다. 웹브라우저에 다음을 입력합니다. 아래에서 Edge 조직 이름을 ORG_NAME, API_KEY을 API 키로 대체합니다. 쿼리 매개변수에 불필요한 공백이 없는지 확인합니다.

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

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

축하합니다. API 프록시를 만들고 호출에 유효한 API 키를 포함하도록 요구하여 보호했습니다.

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

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

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

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

    <APIKey ref="request.header.x-apikey"/>
    
  3. API 프록시를 저장하여 변경사항을 배포합니다.
  4. cURL을 사용하여 다음 API 호출을 수행하여 API 키를 x-apikey라는 헤더로 전달합니다. 조직 이름으로 바꾸어야 합니다.

    curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
    

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

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

관련 주제

다음은 이 가이드와 직접 관련이 있는 몇 가지 주제입니다.

API 키를 사용하여 API를 더욱 심층적으로 보호하는 것은 이야기의 일부분일 뿐입니다. API 보호에는 OAuth와 같은 추가 보안이 포함되는 경우가 많습니다.

OAuth는 간단히 말해 사용자 인증 정보 (예: 사용자 이름 및 비밀번호)를 액세스 토큰으로 교환하는 개방형 프로토콜입니다. 액세스 토큰은 길고 임의의 문자열로, 원래 사용자 인증 정보를 손상하지 않고 앱 간에도 메시지 파이프라인 주위로 전달할 수 있습니다. 액세스 토큰은 수명이 짧은 경우가 많으므로 항상 새 토큰이 생성됩니다.