이 페이지는 Apigee 및 Apigee Hybrid에 적용됩니다.
Apigee Edge 문서 보기
동영상: API 보호 방법을 소개하는 이 짧은 동영상을 확인하세요.
학습 내용
이 튜토리얼에서는 다음 작업을 수행하는 방법을 설명합니다.
- API 키를 요구하는 API 프록시 만들기
- API 제품, 개발자, 개발자 앱 만들기
- API 키로 API 호출하기
무단 액세스로부터 API를 보호하는 것은 중요합니다. 이를 위한 한 가지 방법은 API 키를 사용하는 것입니다.
앱이 API 키를 확인하도록 구성된 API 프록시에 요청할 때 앱은 유효한 키를 제공해야 합니다. 런타임 시 API 키 확인 정책은 제공된 API 키에서 다음을 확인합니다.
- 유효한가
- 취소되지 않았는가
- 요청한 리소스를 노출하는 API 제품의 API 키와 일치하는가
이 키가 유효하면 요청이 허용됩니다. 키가 유효하지 않으면 요청이 승인되지 않습니다.
API 프록시 만들기
Cloud 콘솔의 Apigee
Google Cloud 콘솔에서 프록시 개발 > API 프록시 페이지로 이동합니다.
- Google Cloud 창의 프로젝트 선택 도구에서 조직을 선택합니다. 조직 이름은 Google Cloud 프로젝트 이름과 동일합니다.
- + 만들기를 클릭합니다.
- 프록시 만들기 창의 프록시 템플릿에서 리버스 프록시 (가장 일반적)를 선택합니다. 리버스 프록시는 수신 트래픽을 백엔드 서비스로 라우팅합니다.
- 다음과 같이 프록시를 구성합니다.
이름 값 Proxy Name helloworld_apikey
Base Path(기본 경로) /helloapikey
프로젝트 기본 경로는 API 프록시에 요청을 보내는 데 사용되는 URL의 일부입니다.
설명 hello world protected by API key
대상(기존 API) http://mocktarget.apigee.net
이는 Apigee가 API 프록시에 대한 요청에서 호출하는 대상 URL을 정의합니다. 이 타겟은
Hello, Guest!
와 같은 간단한 응답만 반환합니다. - 다음을 클릭합니다.
- 배포 (선택사항) 이 필드는 비워 둡니다.
- 만들기를 클릭합니다.
- Apigee에서 새 프록시를 만들고 프록시 요약 창에 프록시 세부정보 요약을 표시합니다.
기본 UI
- Apigee UI로 이동하고 로그인합니다.
- UI 왼쪽 상단의 드롭다운 메뉴를 사용해 조직을 선택합니다.
-
개발 > API 프록시를 클릭하여 API 프록시 목록을 표시합니다.
- 새로 만들기를 클릭합니다.
- 프록시 빌드 마법사에서 리버스 프록시(가장 일반적)를 선택합니다.
- 다음과 같이 프록시를 구성합니다.
필드 작업 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!
와 같은 간단한 응답만 반환합니다. - 다음을 클릭합니다.
- 일반 정책 페이지에서 API 키를 선택합니다. 이 옵션은 API 프록시에 두 개의 정책을 자동으로 추가하고 API 키를 생성하는 데 필요한 API 제품을 만듭니다.
- 다음을 클릭합니다.
- 요약 페이지에서 배포 환경이 선택되었는지 확인하고 만들기 및 배포를 클릭합니다.
- 프록시 편집을 클릭하여 API 프록시의 개요 페이지를 표시합니다.
정책 보기
Cloud 콘솔의 Apigee
- helloworld_apikey 프록시의 프록시 요약 창에서 개발 탭을 클릭합니다.
- 정책 메뉴에서 정책 추가를 클릭합니다.
- 정책 만들기 창의 보안에서 API 키 확인을 선택합니다.
- API 키 확인 창의 이름 및 표시 이름 섹션에 다음 값을 사용하여 필수 필드를 작성합니다.
- 이름: 정책 이름을 입력합니다. 예를 들면
VerifyAPIKey
입니다. - 표시 이름: UI에 사용할 정책 이름을 입력합니다. 예를 들면
Verify API Key
입니다.
- 이름: 정책 이름을 입력합니다. 예를 들면
- 만들기를 클릭합니다.
- 를 클릭하여 다른 정책을 추가합니다.
- 정책 만들기 창의 미디에이션에서 메시지 할당을 선택합니다.
- AssignMessage 창의 이름 및 표시 이름 섹션에 다음 값을 사용하여 필수 필드를 작성합니다.
- 이름: 정책 이름을 입력합니다. 예를 들면
AssignMessage
입니다. - 표시 이름: UI에 사용할 정책 이름을 입력합니다. 예를 들면
Assign Message
입니다.
- 이름: 정책 이름을 입력합니다. 예를 들면
- 만들기를 클릭합니다.
- 아래 XML 코드의
<APIKey>
요소는 수신 요청 내 API 키의 위치를 지정합니다. 기본적으로 정책은 HTTP 요청의apikey
라는 쿼리 매개변수에서 키를 가져옵니다.<APIKey ref="request.queryparam.apikey" />
apikey
이름은 임의적이며 API 키가 포함된 모든 속성일 수 있습니다. - Assign Message 정책의 콘텐츠를 다음과 같이 업데이트합니다.
VerifyApiKey
및Remove Query Param apikey
정책을 추가합니다.- 프록시 엔드포인트 메뉴에서 Preflow를 클릭합니다.
- 시각적 편집기의 요청 창에서 정책 단계 추가를 클릭합니다.
- 정책 단계 추가 창에서 API 키 확인을 선택합니다.
- 추가를 클릭합니다.
- 시각적 편집기의 요청 창에서 정책 단계 추가를 클릭합니다.
- 정책 단계 추가 창에서 Remove Query Param apikey를 선택합니다.
- 추가를 클릭합니다.
- 저장을 클릭합니다.
- 환경에 프록시를 배포합니다.
- 배포를 클릭합니다.
- 버전과 환경을 선택합니다.
- 배포를 클릭합니다.
- API 호출 시도에 설명된 대로 API를 호출하여 변경사항을 테스트합니다.
<AssignMessage async="false" continueOnError="false" enabled="true" name="remove-query-param-apikey"> <DisplayName>Remove Query Param apikey</DisplayName> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
기본 UI
- API 프록시 편집기에서 Develop 탭을 클릭합니다. API 프록시의 요청 흐름에 2개의 정책이 추가된 것을 볼 수 있습니다.
- API 키 확인 – API 호출을 확인하여 유효한 API 키(쿼리 매개변수로 전송됨)가 있는지 확인합니다.
- 쿼리 매개변수 API 키 삭제 – 확인 후 API 키를 삭제하여 불필요하게 전달 및 노출되지 않도록 하는 메시지 할당 정책입니다.
-
흐름 뷰에서 API 키 정책 아이콘 확인을 클릭하고 하단 코드 보기에서 정책의 XML 구성을 확인합니다.
<APIKey>
요소는 호출 시 API 키를 찾아야 할 위치를 정책에 알려줍니다. 기본적으로 HTTP 요청의apikey
라는 쿼리 매개변수로 키를 찾습니다.<APIKey ref="request.queryparam.apikey" />
apikey
이름은 임의적이며 API 키가 포함된 모든 속성일 수 있습니다.
API 호출 시도
이 단계에서는 대상 서비스에 직접 API를 성공적으로 호출한 다음, API 프록시를 성공적으로 호출하지 않고 정책에 의해 보호되는 방식을 확인합니다.
-
성공
웹브라우저에서 다음 주소로 이동합니다. 요청을 전달하기 위해 API 프록시가 구성되어 있는 대상 서비스이지만, 지금은 직접 처리하도록 합니다.
http://mocktarget.apigee.net
Hello, Guest!
라는 성공적인 응답을 받게 됩니다. -
실패
이제 다음 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 제품 추가
Cloud 콘솔의 Apigee
Apigee UI를 사용하여 API 제품을 추가하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 배포 > API 제품 페이지로 이동합니다.
- +만들기를 클릭합니다.
- API 제품의 제품 세부정보를 입력합니다.
필드 설명 이름 API 제품의 내부 이름입니다. 이름에 특수문자를 지정하지 마세요.
참고: API 제품이 생성된 후에는 이름을 수정할 수 없습니다.표시 이름 API 제품의 표시 이름입니다. 표시 이름은 UI에서 사용되며 언제든지 수정할 수 있습니다. 지정하지 않으면 Name 값이 사용됩니다. 이 필드는 이름 값을 사용하여 자동으로 채워지며 해당 콘텐츠를 수정하거나 삭제할 수 있습니다. 표시 이름에는 특수문자가 포함될 수 있습니다. 설명 API 제품에 대한 설명입니다. 환경 API 제품이 액세스를 허용할 환경입니다. 예를 들면 test
또는prod
입니다.액세스 공개(Public)를 선택합니다. 액세스 요청 자동 승인 모든 앱에서 이 API 제품의 주요 요청을 자동으로 승인합니다. 할당량 이 튜토리얼에서는 무시합니다. 허용된 OAuth 범위 이 튜토리얼에서는 무시합니다. - 작업 섹션에서 작업 추가를 클릭합니다.
- API 프록시 필드에서 방금 만든 API 프록시를 선택합니다.
- 경로 필드에 '/'를 입력합니다. 다른 필드를 무시합니다.
- 저장을 클릭하여 작업을 저장합니다.
- 저장을 클릭하여 API 제품을 저장합니다.
API 제품 추가에 대한 자세한 내용은 API 제품 만들기를 참고하세요.
기본 UI
Apigee UI를 사용하여 API 제품을 추가하려면 다음 안내를 따르세요.
- 게시 > API 제품을 선택합니다.
- 만들기를 클릭합니다.
- API 제품의 제품 세부정보를 입력합니다.
필드 설명 이름 API 제품의 내부 이름입니다. 이름에 특수문자를 지정하지 마세요.
참고: API 제품이 생성된 후에는 이름을 수정할 수 없습니다.표시 이름 API 제품의 표시 이름입니다. 표시 이름은 UI에서 사용되며 언제든지 수정할 수 있습니다. 지정되지 않으면 이름 값이 사용됩니다. 이 필드는 이름 값을 사용하여 자동으로 채워지며 해당 콘텐츠를 수정하거나 삭제할 수 있습니다. 표시 이름에는 특수문자가 포함될 수 있습니다. 설명 API 제품에 대한 설명입니다. 환경 API 제품이 액세스를 허용할 환경입니다. 예를 들면 test
또는prod
입니다.액세스 공개(Public)를 선택합니다. 액세스 요청 자동 승인 모든 앱에서 이 API 제품의 주요 요청을 자동으로 승인합니다. 할당량 이 튜토리얼에서는 무시합니다. 허용된 OAuth 범위 이 튜토리얼에서는 무시합니다. - 작업 섹션에서 작업 추가를 클릭합니다.
- API 프록시 필드에서 방금 만든 API 프록시를 선택합니다.
- 경로 필드에 '/'를 입력합니다. 다른 필드를 무시합니다.
- 저장을 클릭하여 작업을 저장합니다.
- 저장을 클릭하여 API 제품을 저장합니다.
조직에 개발자와 앱 추가
이제 API를 사용하도록 개발자 가입 워크플로를 시뮬레이션합니다. 개발자는 API를 호출하는 앱을 하나 이상 가지며 각 앱에는 고유한 API 키가 생성됩니다. 이를 통해 API 제공업체는 API에 대한 액세스를 더 세밀하게 제어하고 앱별 API 트래픽을 더 상세하게 보고할 수 있습니다.
개발자 만들기
Cloud 콘솔의 Apigee
개발자를 만들려면 다음 절차를 따르세요.
-
Google Cloud 콘솔에서 배포 > 개발자 페이지로 이동합니다.
- + 만들기를 클릭합니다.
- 개발자 추가 창에 다음을 입력합니다.
필드 값 이름 Keyser
성 Soze
이메일 keyser@example.com
사용자 이름 keyser
- 추가를 클릭합니다.
개발자 만들기에 대한 자세한 내용은 앱 개발자 등록을 참고하세요.
기본 UI
개발자를 만들려면 다음 절차를 따르세요.
- 메뉴에서 Publish > Developers를 선택합니다.
참고: 아직 개발 화면에 있는 경우 DEVELOP의 '<'를 클릭하여 메뉴를 표시해서 Publish > Developers를 선택합니다. - + Developer를 클릭합니다.
- 새 Developer 창에 다음을 입력합니다.
필드 Enter 이름 Keyser
성 Soze
사용자 이름 keyser
이메일 keyser@example.com
- 만들기를 클릭합니다.
앱 등록
Cloud 콘솔의 Apigee
-
Google Cloud 콘솔에서 배포 > 앱 페이지로 이동합니다.
- + 만들기를 클릭합니다.
- 앱 만들기 창에 다음을 입력합니다.
필드 값 앱 이름 keyser_app
입력표시 이름 keyser_app
입력개발자 Keyser Soze (keyser@example.com)
선택콜백 URL 비워 두기 참고 비워 두기 - 사용자 인증 정보 섹션에서 사용자 인증 정보 추가를 클릭합니다.
- 안 함을 선택합니다. 이 앱의 사용자 인증 정보는 만료되지 않습니다.
- 제품 추가를 클릭합니다.
- 방금 만든 제품을 선택합니다.
- 추가를 클릭합니다.
- 만들기를 클릭합니다.
앱 등록에 관한 자세한 내용은 앱 등록을 참고하세요.
기본 UI
개발자 앱을 등록하려면 다음 절차를 따르세요.
- Publish > Apps를 선택합니다.
- + App을 클릭합니다.
- New Developer App 창에 다음을 입력합니다.
필드 값 Name 및 Display Name keyser_app
입력개발자 Keyser Soze (keyser@example.com)
선택Callback URL 및 Notes 비워 두기 - 사용자 인증 정보 섹션에서 사용 안함을 선택합니다. 이 앱의 사용자 인증 정보는 만료되지 않습니다.
- 제품 추가를 클릭합니다.
- 방금 만든 제품을 선택합니다.
- 만들기를 클릭합니다.
API 키 가져오기
Cloud 콘솔의 Apigee
API 키를 가져오려면 다음 절차를 따르세요.
Google Cloud 콘솔에서 배포 > 앱 페이지로 이동합니다.
- 앱 목록에서 필요한 앱을 선택합니다.
- 앱 보기 페이지의 사용자 인증 정보에서 키 필드 옆에 있는 를 클릭합니다. 이 키는 생성한 제품과 연결됩니다.
- 복사를 클릭합니다. 다음 단계에서 이 키를 사용합니다.
기본 UI
API 키를 가져오려면 다음 절차를 따르세요.
- Apps 페이지(Publish > Apps)에서 keyser_app을 클릭합니다.
- keyser_app 페이지에서 사용자 인증 정보 섹션의 키 옆에 있는 항목을 클릭합니다. 이 키는 생성한 제품과 연결됩니다.
- 키를 선택하고 복사합니다. 다음 단계에서 이를 사용합니다.
키로 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 키를 찾도록 프록시를 수정해 봅시다.
Cloud 콘솔의 Apigee
- Google Cloud 콘솔에서 프록시 개발 > API 프록시 페이지로 이동합니다.
- 프록시 목록에서 필요한 프록시를 선택합니다.
- 프록시 세부정보 페이지에서 개발을 클릭합니다.
- 정책이 queryparam이 아닌 헤더에서 찾도록 정책 XML을 수정합니다.
- 저장을 클릭하여 변경사항을 저장합니다.
- 배포를 클릭합니다.
- 버전과 환경을 선택합니다.
- 배포를 클릭합니다.
-
cURL을 사용하여 다음 API를 호출하여 API 키를
x-apikey
라는 헤더로 전달합니다. 조직 이름을 반드시 바꿔야 한다는 것을 잊지 마십시오.curl -v -H "x-apikey: YOUR_API_KEY" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey
<APIKey ref="request.header.x-apikey"/>
변경을 완전히 완료하려면, 쿼리 매개변수 대신 헤더를 삭제하도록 메시지 할당 정책도 구성해야 합니다. 예를 들면 다음과 같습니다.
<Remove> <Headers> <Header name="x-apikey"/> </Headers> </Remove>
기본 UI
- API 프록시를 수정하세요. 개발 > API 프록시 > helloworld_apikey를 선택하고 개발 뷰로 이동합니다.
-
API 키 확인 정책을 선택하고 정책 XML을 수정하여 정책이
queryparam
이 아닌header
에서 찾도록 지정합니다.<APIKey ref="request.header.x-apikey"/>
- API 프록시를 저장하고 배포를 사용하여 배포합니다.
-
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>