실습 설정 안내 및 요구사항
계정과 진행 상황을 보호하세요. 이 실습을 실행하려면 항상 시크릿 브라우저 창과 실습 사용자 인증 정보를 사용하세요.

Apigee X를 사용하여 API 게시

실습 45분 universal_currency_alt 크레딧 5개 show_chart 중급
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP843

Google Cloud 사용자 주도형 실습 로고

개요

API는 앱 개발자가 사용할 수 있도록 설계되었으며 앱 개발자는 API를 활용하여 사용자에게 고유한 환경을 제공합니다. Google Cloud의 Apigee API 플랫폼을 사용하여 API를 게시하고 앱 개발자가 사용할 수 있도록 제공할 수 있습니다.

이 실습에서는 API에 대한 액세스를 제한하도록 API 키를 검증해야 하는 Apigee API 프록시를 만듭니다.

API 제품을 만들어 내부 및 외부 애플리케이션 개발자에게 다양한 수준의 서비스를 제공합니다. 할당량 정책을 사용하여 각 특정 애플리케이션 호출 수를 제한합니다. CORS 정책을 만들어 API에 교차 출처 리소스 공유 기능을 추가합니다. 이 기능을 사용하면 웹 애플리케이션에서 API를 호출할 수 있습니다. 그런 다음 개발자 포털을 만들고 앱 개발자가 사용할 수 있도록 API 제품을 게시합니다.

학습할 내용

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • API 키를 검증하여 API에 대한 액세스 제한 및 애플리케이션 사용량 추적
  • 다양한 유형의 앱 개발자에게 다양한 수준의 액세스 권한을 제공하는 API 제품 만들기
  • 할당량 정책을 사용하여 연결된 API 제품을 기준으로 특정 애플리케이션 호출 수 제한
  • 웹 애플리케이션에서 교차 출처 API 호출을 허용하도록 API에 교차 출처 리소스 공유(CORS) 기능 추가
  • 개발자 포털 만들기 및 API 제품 게시

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 체험판을 신청하지 않습니다.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

Cloud Shell 활성화

Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Google Cloud 콘솔 상단에서 Cloud Shell 활성화 Cloud Shell 활성화 아이콘를 클릭합니다.

  2. 다음 창을 클릭합니다.

    • Cloud Shell 정보 창을 통해 계속 진행합니다.
    • 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있도록 Cloud Shell을 승인합니다.

연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 학습자의 PROJECT_ID, (으)로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  1. (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
  1. 승인을 클릭합니다.

출력:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project

출력:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참고하세요.

Apigee 콘솔 열기

Apigee 콘솔을 열려면 다음 단계를 따르세요.

  • Google Cloud 콘솔의 검색 창에 Apigee를 입력한 다음 검색 결과에서 Apigee API 관리를 클릭합니다.

Apigee 콘솔이 열리고 자주 사용되는 위치로 연결되는 빠른 링크가 방문 페이지에 표시됩니다.

  • 탐색 메뉴(탐색 메뉴)에서 Apigee 옆에 있는 즐겨찾기(즐겨찾기 아이콘)를 클릭합니다.

이제 Apigee가 탐색 메뉴에 즐겨찾기로 추가됩니다.

작업 1. Apigee API 프록시로 백엔드 서비스 프록시

이 작업에서는 백엔드 서비스의 퍼사드 역할을 하는 Apigee API 프록시를 만듭니다. API 프록시는 서비스 계정을 사용하여 Cloud Run 서비스에 OpenID Connect ID 토큰을 제공합니다.

simplebank-rest라는 백엔드 서비스가 이미 생성되어 Cloud Run에 배포되었습니다.

Apigee 프록시 만들기

  1. Cloud Shell에서 백엔드 서비스 URL을 가져오려면 다음 명령어를 사용합니다.
gcloud run services describe simplebank-rest --platform managed --region {{{project_0.default_region |REGION}}} --format 'value(status.url)'

이 URL을 저장합니다. API 프록시를 만들 때 사용됩니다.

  1. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택합니다.

  2. 프록시 마법사를 사용하여 새 프록시를 만들려면 + 만들기를 클릭합니다.

    백엔드 서비스의 리버스 프록시를 만듭니다.

  3. 프록시 템플릿에서 일반 템플릿 > 리버스 프록시(가장 일반적임)를 선택합니다.

    참고: OpenAPI 사양 템플릿 섹션에서 리버스 프록시(가장 일반적임)를 선택하지 마세요.
  4. 프록시 세부정보에 다음을 지정합니다.

    속성
    프록시 이름 bank-v1
    기본 경로 /bank/v1
    대상(기존 API) 백엔드 URL
    참고: 기본 경로에 '/bank-v1'이 아닌 '/bank/v1'을 사용하고 있는지 확인하세요.

    대상은 작업 초반에 검색한 백엔드 URL이어야 하며 다음과 같이 표시됩니다.

    https://simplebank-rest-mtdtzt7yzq-ue.a.run.app
  5. 다음을 클릭합니다.

  6. 배포(선택사항) 설정을 기본값으로 두고 만들기를 클릭합니다.

작업 2. API 키 검증 정책 추가

이 작업에서는 API 프록시에 API 키 검증 정책을 추가합니다. 유효한 API 키를 제공하지 않는 요청은 거부됩니다.

API 키 검증 정책은 런타임 시 API 키 확인을 시행하여 승인된 API 키가 있는 애플리케이션만 API에 액세스할 수 있게 합니다. 이 정책은 API 키가 유효하고 취소되지 않았으며 요청되는 특정 리소스를 사용할 수 있도록 승인되었는지 확인합니다.

API 키 검증 정책 추가

  1. 개발 탭을 클릭합니다.

  2. 프록시의 탐색기 메뉴에 있는 프록시 엔드포인트 섹션에서 PreFlow를 클릭합니다.

    API 키 검증 정책은 API 프록시 앞부분에 배치되어야 합니다. 기본 프록시 엔드포인트요청 PreFlow는 요청이 API 프록시에 들어올 때 실행되는 첫 번째 흐름입니다.

  3. 흐름 창의 요청 흐름 오른쪽 위에 있는 + 정책 단계 추가 버튼을 클릭합니다.

  4. 새 정책 만들기를 선택하고 보안 섹션의 정책 선택에서 API 키 검증을 선택한 후 표시 이름이름VAK-VerifyKey로 설정합니다.

  5. 추가를 클릭합니다.

  6. VAK-VerifyKey 이름을 클릭합니다.

    API 키 검증 구성이 정책 아래 코드 창에 표시됩니다.

    APIKey 요소는 요청에서 API 키가 제공되는 위치를 나타냅니다.

  7. APIKey 요소에서 request.queryparam.apikeyrequest.header.apikey로 바꿉니다.

    API 키가 헤더에 지정되면 브라우저 기록에 기록되거나 저장될 가능성이 낮습니다.

OpenID Connect ID 토큰을 전송하도록 대상 수정

백엔드 서비스는 인증된 액세스를 요구하도록 배포되므로 유효한 OpenID Connect ID 토큰이 없으면 서비스를 호출할 수 없습니다.

HTTPTargetConnection은 서비스의 백엔드 대상을 지정합니다.

  1. 프록시의 탐색기 메뉴에 있는 대상 엔드포인트 섹션에서 PreFlow를 클릭합니다.

  2. 다음 코드를 찾습니다(URL은 다를 수 있음).

    <HTTPTargetConnection> <URL>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</URL> </HTTPTargetConnection>
참고: HTTPTargetConnection 섹션이 표시되지 않으면 프록시 엔드포인트 섹션이 아닌 대상 엔드포인트 섹션에서 PreFlow를 클릭했는지 확인하세요.
  1. URL 아래에 다음과 같은 인증 섹션을 추가합니다.
<Authentication> <GoogleIDToken> <Audience>AUDIENCE</Audience> </GoogleIDToken> </Authentication>
  1. AUDIENCE를 이미 HTTPTargetConnection 섹션에 있는 URL 값으로 바꿉니다. 이제 코드가 다음과 같이 표시됩니다. 단, URL 및 대상 요소에는 사용자의 특정 URL이 표시됩니다.
<TargetEndpoint name="default"> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <Flows/> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <HTTPTargetConnection> <URL>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</URL> <Authentication> <GoogleIDToken> <Audience>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</Audience> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </TargetEndpoint>
  1. 저장을 클릭합니다.

런타임 인스턴스를 사용할 수 있는지 확인

  1. Cloud Shell에서 다음 명령어 집합을 붙여넣고 실행합니다.

    export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; if [ -z "${GOOGLE_CLOUD_PROJECT}" ]; then echo "Error: GOOGLE_CLOUD_PROJECT environment variable is not set. Please set it to your project ID."; else export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\" or (.environment | endswith(\"/${ENV_NAME}\"))) | .environment" --raw-output); [[ -n "${ATTACHMENT_DONE}" ]] && break; echo -n "."; sleep 5; done; echo; echo "${ENV_NAME} environment attached"; echo "***ORG IS READY TO USE***"; fi

    이 명령어 시리즈는 Apigee API를 사용하여 Apigee 런타임 인스턴스가 생성되고 eval 환경이 연결된 시점을 확인합니다.

  2. 인스턴스가 준비될 때까지 기다립니다.

    ***ORG IS READY TO USE*** 텍스트가 표시되면 인스턴스를 사용할 수 있습니다. Apigee 조직(org)은 실습을 시작하기 전에 생성되었을 수 있으므로 인스턴스가 생성될 때까지 기다리지 않아도 됩니다.

    조직이 준비되기를 기다리는 동안 API 제품, CORS(교차 출처 리소스 공유), 개발자 포털을 알아볼 수 있습니다.

API 프록시 배포

  1. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.

  2. 배포를 클릭합니다.

  3. 환경에서 eval을 선택합니다.

  4. 서비스 계정에 서비스 계정 이메일 주소를 지정합니다.

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. 배포를 클릭한 후 확인을 클릭합니다.

  6. eval 배포 상태에 프록시가 배포되었다고 표시될 때까지 기다립니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Apigee 프록시 만들기 및 API 키 검증 정책 추가

API 프록시 테스트

호스트 이름 eval.example.com을 사용하여 Apigee 조직의 eval 환경을 호출할 수 있습니다. 이 호스트 이름의 DNS 항목은 프로젝트 내에 생성되었으며 Apigee 런타임 인스턴스 IP 주소로 확인됩니다. 이 DNS 항목은 비공개 영역에 생성되었으므로 내부 네트워크에서만 표시됩니다.

Cloud Shell은 내부 네트워크에 상주하지 않으므로 Cloud Shell 명령어에서 이 DNS 항목을 확인할 수 없습니다. 조직 내 가상 머신(VM)에서 비공개 영역 DNS에 액세스할 수 있습니다. apigeex-test-vm 가상 머신이 자동으로 생성되었습니다. 이 머신을 사용하여 API 프록시를 호출할 수 있습니다.

  1. Cloud Shell에서 테스트 VM에 대한 SSH 연결을 엽니다.

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. 승인을 요청하는 메시지가 나타나면 승인을 클릭합니다.

  3. Cloud Shell에서 묻는 질문마다 Enter 또는 Return 키를 클릭하여 기본 입력을 지정합니다.

    로그인한 ID가 프로젝트 소유자이므로 이 머신에 대한 SSH가 허용됩니다.

    이제 Cloud Shell 세션이 VM 내에서 실행됩니다.

  4. eval 환경에서 배포된 bank-v1 API 프록시를 호출합니다.

    curl -i -k -X GET "https://eval.example.com/bank/v1/customers"

    -k 옵션은 curl에 TLS 인증서 확인을 건너뛰라고 지시합니다. 이 실습의 Apigee 런타임은 신뢰할 수 있는 인증 기관(CA)에서 생성한 인증서 대신 자체 서명 인증서를 사용하고 있습니다.

    참고: 프로덕션 사용 사례의 인증서 확인을 우회하기 위해 -k 옵션을 사용하면 안 됩니다.

    이 API에서 고객 목록을 가져오려고 시도합니다. 이제 다음과 비슷한 401 승인되지 않음 응답이 표시됩니다.

    HTTP/2 401 content-type: application/json x-request-id: 01e8da87-dc8c-4428-9cdf-8bea84e98860 content-length: 146 date: Tue, 07 Dec 2021 22:54:37 GMT via: 1.1 google {"fault":{"faultstring":"Failed to resolve API Key variable request.header.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    이 응답은 API 키가 제공되지 않아 API 프록시에서 백엔드 서비스에 대한 액세스를 차단했음을 나타냅니다.

  5. exit 명령어를 입력하여 SSH 세션을 종료하고 Cloud Shell로 돌아갑니다.

작업 3. API 제품 및 애플리케이션 추가

이 작업에서는 API에 다양한 수준의 액세스 권한을 제공하는 API 제품을 추가합니다. 그런 다음 애플리케이션 두 개를 만들고 여기에 별도의 API 제품을 연결하여 서로 다른 액세스 권한을 제공합니다.

첫 번째 API 제품 만들기

첫 번째 API 제품은 서비스에 대한 전체 액세스 권한을 제공합니다.

  1. Apigee 탐색 메뉴에서 배포 > API 제품을 선택합니다.

  2. 새 API 제품을 만들려면 + 만들기를 클릭합니다.

  3. 제품 세부정보 창에서 다음을 지정합니다.

    속성
    이름 bank-fullaccess
    표시 이름 은행(전체 액세스)
    설명 은행 API에 대한 전체 액세스 허용
    환경 eval 선택
    액세스 공개 선택

    액세스 요청 자동 승인을 선택한 상태로 둡니다.

  4. 작업 섹션에서 + 작업 추가를 클릭합니다.

    작업은 API 제품과 연결된 애플리케이션에 허용되는 API 프록시의 요청을 지정하는 데 사용됩니다.

    참고: 버튼이 'GraphQL 작업' 섹션이 아닌 '작업' 섹션에 있는지 확인하세요.
  5. 다음 사항을 지정합니다.

    이름
    소스 bank-v1 API 프록시 선택
    경로 /**
    메서드 GET, PATCH, POST, PUT, DELETE 선택

    경로 표현식 '/**'는 깊이와 상관없이 모든 경로 프리픽스가 작업과 일치함을 나타냅니다.

    프로덕션 환경에서는 이 와일드카드 경로 표현식을 사용하는 대신 허용된 각 작업을 별도로 추가할 수 있습니다.

  6. 저장을 클릭하여 작업을 저장합니다.

  7. API 제품의 커스텀 속성 섹션에서 + 커스텀 속성 추가를 클릭합니다.

    커스텀 속성을 사용하여 액세스를 제어하기 위해 프록시에서 사용할 수 있는 데이터를 연결할 수 있습니다.

    이 경우 Retail API의 전체 액세스 API 제품이므로 API를 호출하는 애플리케이션에 전체 액세스가 허용되어야 함을 나타내는 커스텀 속성을 만듭니다.

  8. 다음 사항을 지정합니다.

    속성
    이름 full-access
    yes
  9. 확인을 클릭하여 커스텀 속성을 저장합니다.

  10. API 제품을 저장하려면 페이지 상단에 있는 저장을 클릭합니다.

  11. 배포 > API 제품 페이지로 돌아갑니다. API 제품이 나열됩니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. API 제품 및 애플리케이션 추가

제한된 액세스를 제공하는 API 제품 만들기

두 번째 API 제품은 서비스에 대한 읽기 전용 액세스 권한을 제공합니다.

  1. 새 API 제품을 만들려면 + 만들기를 클릭합니다.

  2. 제품 세부정보 창에서 다음을 지정합니다.

    속성
    이름 bank-readonly
    표시 이름 은행(읽기 전용)
    설명 은행 API에 대한 읽기 전용 액세스 허용
    환경 eval 선택
    액세스 공개 선택

    액세스 요청 자동 승인을 선택한 상태로 둡니다.

  3. 작업 섹션에서 + 작업 추가를 클릭합니다.

    참고: 버튼이 'GraphQL 작업' 섹션이 아닌 '작업' 섹션에 있는지 확인하세요.
  4. 다음 사항을 지정합니다.

    속성
    소스 bank-v1 API 프록시 선택
    경로 /**
    메서드 GET 선택
  5. 저장을 클릭하여 작업을 저장합니다.

  6. API 제품을 저장하려면 페이지 상단에 있는 저장을 클릭합니다.

  7. 배포 > API 제품 페이지로 돌아갑니다. API 제품이 나열됩니다.

앱 개발자 만들기

앱을 만들기 전에 앱 개발자를 만들어야 합니다.

참고: 앱 개발자는 일반적으로 개발자 포털을 통해 생성되며 실습 후반부에서 개발자 포털을 생성합니다. 지금은 Apigee 콘솔을 사용하여 개발자를 만듭니다.
  1. Apigee 탐색 메뉴에서 배포 > 개발자를 클릭합니다.

  2. 새 앱 개발자를 만들려면 + 만들기를 클릭합니다.

  3. 다음 사항을 지정합니다.

    속성
    이름 Joe
    Developer
    이메일 joe@example.com
    사용자 이름 joe
  4. 추가를 클릭하여 앱 개발자를 만듭니다.

읽기 전용 액세스 권한이 있는 앱 만들기

  1. Apigee 탐색 메뉴에서 배포 > 앱을 클릭합니다.

  2. 새 앱을 만들려면 + 만들기를 클릭합니다.

  3. 앱 세부정보 창에서 다음을 지정합니다.

    속성
    이름 readonly-app
    개발자 Joe Developer 선택
  4. 사용자 인증 정보 창에서 + 사용자 인증 정보 추가를 클릭합니다. 그런 다음 + 제품 추가를 클릭하고 은행(읽기 전용)을 선택한 후 추가를 클릭하여 추가합니다.

    제품 아래의 은행(읽기 전용) 옆에 있는 체크박스를 클릭하고 승인을 클릭합니다.

  5. 만들기를 클릭하여 앱을 만듭니다.

    이제 앱에 보안 비밀이 구성됩니다.

  6. Apigee 탐색 메뉴에서 배포 > 앱 > readonly-app을 클릭합니다.

  7. 사용자 인증 정보 아래의 옆에 있는 표시를 클릭합니다.

    API를 호출하는 데 사용될 API 키입니다. 키를 복사할 수 있지만 다음 단계에서는 Apigee API에 대한 curl 호출을 사용하여 API 키를 가져옵니다.

전체 액세스 권한이 있는 앱 만들기

  1. 왼쪽 탐색 메뉴에서 배포 > 앱을 클릭합니다.

  2. 새 앱을 만들려면 + 만들기를 클릭합니다.

  3. 앱 세부정보 창에서 다음을 지정합니다.

    속성
    이름 fullaccess-app
    개발자 Joe Developer 선택
  4. 사용자 인증 정보 창에서 + 사용자 인증 정보 추가를 클릭합니다. 그런 다음 + 제품 추가를 클릭하고 은행(전체 액세스)을 선택한 후 추가를 클릭하여 추가합니다.

    제품 아래의 은행(전체 액세스) 옆에 있는 체크박스를 클릭하고 승인을 클릭합니다.

  5. 만들기를 클릭하여 앱을 만듭니다.

  6. Apigee 탐색 메뉴에서 배포 > 앱 > fullaccess-app을 클릭합니다.

  7. 사용자 인증 정보 아래의 옆에 있는 표시를 클릭합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 제한된 액세스를 제공하는 API 제품 만들기

API 키로 테스트

  1. Cloud Shell에서 테스트 VM에 대한 SSH 연결을 엽니다.

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. 승인을 요청하는 메시지가 나타나면 승인을 클릭합니다.

    이제 Cloud Shell 세션이 VM 내에서 실행됩니다.

  3. 읽기 전용 애플리케이션의 API 키를 가져오려면 다음 명령어를 실행합니다.

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) echo "PROJECT_ID=${PROJECT_ID}" export API_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) echo "API_KEY=${API_KEY}"

    첫 번째 명령어는 gcloud 구성을 읽어 현재 프로젝트를 가져옵니다. 두 번째 명령어는 Apigee API를 사용하여 API 키를 가져옵니다. 로그인한 사용자의 권한이 있는 액세스 토큰을 전송하므로 요청이 승인됩니다.

  4. 가짜 API 키를 사용하여 eval 환경에 배포된 bank-v1 API 프록시를 호출합니다.

    curl -i -k -X GET -H "apikey: ABC123" "https://eval.example.com/bank/v1/customers"

    API 키가 잘못되었음을 나타내는 오류와 함께 401 승인되지 않음 응답이 반환됩니다.

  5. 실제 API 키를 사용하여 eval 환경에서 배포된 bank-v1 API 프록시를 호출합니다.

    curl -i -k -X GET -H "apikey: ${API_KEY}" "https://eval.example.com/bank/v1/customers"

    요청이 허용되고 응답에 고객 목록이 포함됩니다.

  6. 다시 실제 API 키를 사용하여 eval 환경에 배포된 bank-v1 API 프록시를 다시 호출합니다.

    curl -i -k -X POST -H "apikey: ${API_KEY}" -H "Content-Type: application/json" "https://eval.example.com/bank/v1/customers" -d '{"firstName": "Julia", "lastName": "Dancey", "email": "julia@example.org"}'

    이번에는 지정된 리소스에 API 키가 유효하지 않음을 나타내는 오류와 함께 401 승인되지 않음 응답이 반환됩니다. 제공된 API 키가 읽기 전용 API 제품과 연결되어 있어 POST 요청이 허용되지 않으므로 요청이 거부되었습니다.

  7. exit를 입력하여 가상 머신 SSH 세션을 종료합니다.

작업 4. 할당량 적용

이 작업에서는 특정 기간 동안 애플리케이션별로 허용되는 요청 수를 제한하는 할당량 정책을 추가합니다. 할당량 정책은 API 제품에 지정된 할당량 구성을 사용합니다.

할당량 정책 추가

  1. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.

  2. 개발 탭을 클릭합니다.

  3. 프록시의 탐색기 메뉴에 있는 프록시 엔드포인트 섹션에서 PreFlow를 클릭합니다.

    할당량 정책은 특정 애플리케이션 할당량이 초과되지 않았는지 확인합니다. 한도에 도달하면 할당량 정책에서 오류가 발생하고 요청이 중단됩니다. 한도에 도달하지 않은 경우에는 허용된 요청 수가 감소합니다.

    할당량 정책은 API 키 검증 정책에 의해 채워진 변수를 기반으로 호출 애플리케이션을 결정합니다. 따라서 할당량 정책을 API 키 검증 정책 뒤에 배치해야 합니다.

  4. 흐름 창의 요청 흐름 오른쪽 위에 있는 + 정책 단계 추가 버튼을 클릭합니다.

  5. 새 정책 만들기를 선택하고 트래픽 관리 섹션의 정책 선택에서 할당량을 선택한 후 표시 이름이름Q-EnforceQuota로 설정합니다.

  6. 추가를 클릭합니다.

  7. Q-EnforceQuota 이름을 클릭합니다.

    할당량 구성이 코드 창에 표시됩니다.

  8. 할당량 구성을 다음과 같이 변경합니다.

    <Quota continueOnError="false" enabled="true" name="Q-EnforceQuota" type="calendar"> <Identifier ref="client_id"/> <UseQuotaConfigInAPIProduct stepName="VAK-VerifyKey"> <DefaultConfig> <Allow>2</Allow> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> </DefaultConfig> </UseQuotaConfigInAPIProduct> <Distributed>true</Distributed> <Synchronous>true</Synchronous> <StartTime>2021-01-01 00:00:00</StartTime> </Quota>

    API 제품을 사용하여 허용된 비율을 지정합니다. UseQuotaConfigInAPIProduct 요소의 stepName은 API 제품을 결정하는 단계를 지정합니다.

    API 키 또는 OAuth 토큰이 검증되면 API 제품과 연결된 앱과 연결될 수 있습니다. 이러한 정책 설정을 사용하여 VAK-VerifyKey라는 API 키 검증 단계에서 API 제품을 결정합니다. API 키 검증 정책은 Q-EnforceQuota 정책 앞에서 실행되어야 합니다.

    할당량 정책에 지정된 기본 구성 값은 요청을 1(간격)개월(시간 단위)당 최대 2개까지(허용) 지정합니다. 기본값은 값을 사용할 수 없는 경우에만 사용되며 이 경우는 API 키와 연결된 API 제품에 할당량 설정이 설정되지 않은 경우에만 발생합니다.

  9. 저장을 클릭합니다. 프록시가 새 버전으로 저장되었다는 알림이 표시되면 새 버전으로 저장을 클릭합니다.

  10. 배포를 클릭합니다.

  11. 서비스 계정에 서비스 계정 이메일 주소를 지정합니다.

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  12. 배포를 클릭한 후 확인을 클릭합니다.

  13. 개요 탭을 클릭하고 eval 배포 상태에 프록시가 배포되었음이 표시될 때까지 기다립니다.

전체 액세스 API 제품 할당량 구성 추가

  1. Apigee 탐색 메뉴에서 배포 > API 제품을 선택한 후 은행(전체 액세스)을 클릭합니다.
  2. 수정을 클릭합니다.
  3. 작업 섹션의 bank-v1 줄에서 작업 메뉴 아이콘(작업 메뉴)을 클릭하고 수정을 선택합니다.
  4. 작업 할당량을 1분마다 요청 5개로 설정하고 저장을 클릭하여 작업을 저장합니다.
참고: 작업 내에서 구성된 할당량을 수정해야 합니다.
  1. 저장을 클릭하여 API 제품을 저장합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 할당량 적용

디버그 세션 시작

디버그는 Apigee에서 실행되는 API 프록시의 문제를 해결하고 모니터링할 수 있는 도구입니다. 디버그 도구를 사용하면 API 호출 중에 각 단계의 세부정보를 검사할 수 있습니다.

  1. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.

  2. 디버그 탭을 클릭합니다.

  3. 디버그 세션 시작을 클릭합니다.

  4. 디버그 세션 시작 창의 환경 드롭다운에서 eval을 선택합니다.

  5. 시작을 클릭합니다.

    디버그 세션에서 요청 캡처를 시작하기까지 약간의 시간이 걸릴 수 있습니다.

참고: 화면 상단에 있는 빨간색 상자에 오류 메시지가 표시되고 '디버그 트랜잭션 가져오기 오류' 또는 '디버그 세션 트랜잭션 목록 오류'와 같은 설명이 표시되면 디버그 세션이 계속 올바르게 작동할 수 있습니다.

API 요청을 보낸 후 디버그 세션을 검사합니다.

할당량 테스트

  1. Cloud Shell에서 테스트 VM에 대한 SSH 연결을 엽니다.

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. 승인을 요청하는 메시지가 나타나면 승인을 클릭합니다.

이제 Cloud Shell 세션이 VM 내에서 실행됩니다.

  1. 두 API 키를 모두 가져오려면 다음 명령어를 실행합니다.

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) echo "PROJECT_ID=${PROJECT_ID}" export API_KEY_READONLY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) echo "API_KEY_READONLY=${API_KEY_READONLY}" export API_KEY_FULL=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/fullaccess-app" | jq ".credentials[0].consumerKey" --raw-output) echo "API_KEY_FULL=${API_KEY_FULL}"
  2. 할당량 실패가 발생할 때까지 이 요청을 반복해서 보냅니다.

    curl -i -k -X GET -H "apikey: ${API_KEY_READONLY}" "https://eval.example.com/bank/v1/customers" 참고: Cloud Shell 또는 SSH 세션에서 명령어를 빠르게 반복하려면 위쪽 화살표 키를 클릭한 후 Return 또는 Enter 키를 누르세요.

    할당량 위반은 다음과 같이 표시됩니다.

    {"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : bKSV3nOz2JS5Z58sWMh2RBnnwWeEeNK2N2G6HMCESgLGDLFI","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
  3. Apigee UI 탭으로 돌아갑니다.

    200 요청과 429 요청이 표시됩니다.

    200 요청을 클릭합니다. 트랜잭션 지도 오른쪽에는 백엔드가 호출되었음을 나타내는 팩토리 아이콘이 표시됩니다.

  4. 디버그 세션 창 왼쪽 상단에 있는 왼쪽 화살표(<)를 클릭합니다.

  5. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.

  6. 디버그 탭을 클릭합니다.

  7. 디버그 세션 시작을 클릭하여 새 디버그 세션을 시작합니다.

  8. SSH 세션으로 돌아간 후 할당량 실패가 발생할 때까지 전체 액세스 API 키를 사용하여 이 요청을 반복적으로 보냅니다.

    date; curl -i -k -X GET -H "apikey: ${API_KEY_FULL}" "https://eval.example.com/bank/v1/customers"

    이번에는 429 응답으로 거부되기 전에 요청을 최소 5개이상 보낼 수 있어야 합니다. 전체 액세스 API 제품 할당량은 분당 요청 5개입니다. 시간의 초 부분이 0으로 재설정되면 할당량이 재설정됩니다. 위 명령어는 API를 호출하기 전에 시간을 출력하므로 할당량이 재설정되는 대략적인 시간을 확인할 수 있습니다.

  9. exit를 입력하여 가상 머신 SSH 세션을 종료합니다.

  10. Apigee UI 탭으로 돌아갑니다.

    요청을 선택하고 할당량 아이콘을 클릭하면 VAK-VerifyKey 할당량 변수가 이제 1분당 요청 5개를 나타내는 것을 확인할 수 있습니다.

작업 5. API 프록시에 CORS 추가

이 작업에서는 bank-v1 프록시에 CORS(교차 출처 리소스 공유)를 추가합니다.

CORS는 HTTP 헤더를 사용하여 별도의 도메인에서 제한된 리소스에 액세스해도 안전한지 여부를 브라우저에 나타내는 프로토콜입니다. 기본적으로 교차 도메인 요청은 동일 출처 보안 정책에 의해 금지됩니다. 동일 출처 정책은 브라우저 사용자가 세션 정보를 악의적인 행위자와 무심코 공유하는 것을 방지합니다.

즉, 동일 출처 정책에 의해 www.example.com에서 제공되는 웹페이지는 기본적으로 api.example.com에서 API를 호출할 수 없습니다. 호스트 이름이 다르기 때문입니다. CORS를 사용하면 이러한 종류의 교차 출처 액세스를 허용할 수 있습니다.

개발자 포털의 은행 API에 CORS가 필요합니다. Apigee 개발자 포털 도메인 이름은 *.apigee.io이며 API는 다른 도메인을 통해 액세스됩니다. 문서에서 API를 호출하려면 오류 응답을 포함한 모든 API 응답에 CORS 헤더를 추가해야 합니다.

CORS는 프리플라이트 요청도 사용합니다. 브라우저는 OPTIONS 동사를 사용하여 프리플라이트 요청을 전송해 다음 호출이 허용되는지 확인합니다.

CORS 정책에서 모든 CORS 기능을 처리할 수 있습니다.

CORS에 대한 자세한 내용은 Apigee CORS 문서를 참조하세요.

CORS 정책 추가

  1. Apigee 탐색 메뉴에서 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.

  2. 개발 탭을 클릭합니다.

  3. 프록시의 탐색기 메뉴에 있는 프록시 엔드포인트 섹션에서 PreFlow를 클릭합니다.

  4. 흐름 창의 요청 흐름 오른쪽 위에 있는 + 정책 단계 추가 버튼을 클릭합니다.

  5. 새 정책 만들기를 선택하고 보안 섹션의 정책 선택에서 CORS를 선택한 후 표시 이름이름CORS로 설정합니다.

  6. 추가를 클릭합니다.

    CORS 정책 구성은 흐름 창 아래에 표시됩니다.

    AllowOrigins는 허용된 출처를 나열합니다. 기본 구성은 요청에 전달된 출처와 허용된 출처를 동일하게 설정하므로 모든 출처를 허용합니다. 일반적인 프로덕션 사용 사례에서는 특정 호스트 이름의 요청만 허용할 수 있습니다.

    AllowMethods는 API에 허용되어야 하는 메서드를 지정합니다.

    AllowHeaders는 요청에 전달될 수 있는 헤더를 나열합니다.

    ExposeHeaders는 Origin과 함께 호출될 때 허용되어야 하는 응답의 헤더를 지정합니다. 기본값인 *를 사용하면 응답에서 응답 헤더가 삭제되지 않습니다.

    MaxAge는 브라우저에서 프리플라이트 응답을 캐시할 수 있는 기간(초)을 지정합니다.

    AllowCredentials는 요청에서 승인 헤더, TLS 클라이언트 인증서 또는 쿠키를 전송할 수 있는지 여부를 나타냅니다.

    GeneratePreflightResponseOPTIONS 메서드를 사용하는 프리플라이트 요청이 처리되는지 여부를 지정합니다.

  7. CORS 이름을 클릭합니다.

  8. AllowHeaders 구성을 다음으로 바꿉니다.

    <AllowHeaders>origin, x-requested-with, accept, content-type, apikey</AllowHeaders>

    API는 apikey 헤더를 사용하여 API 키를 지정하므로 브라우저에서 호출할 수 있도록 이 헤더를 추가해야 합니다.

  9. MaxAge 값을 -1로 바꿉니다.

    이렇게 하면 브라우저의 프리플라이트 응답 캐싱이 사용 중지되므로 프리플라이트 요청이 항상 표시됩니다. 프로덕션 사용 사례에서는 요청당 호출 2회가 방지되도록 응답 캐싱을 일반적으로 허용합니다.

  10. 프록시의 탐색기 메뉴에 있는 프록시 엔드포인트 섹션에서 PreFlow를 클릭합니다.

    CORS 정책이 추가된 경우 흐름 끝에 자동으로 추가됩니다. 하지만 프리플라이트 요청에는 API 키가 필요하지 않습니다.

  11. PreFlow 구성을 수정하여 CORS 정책을 VAK-VerifyKey 정책 앞으로 이동합니다. 다음을 바꿉니다.

    <PreFlow name="PreFlow"> <Request> <Step> <Name>VAK-VerifyKey</Name> </Step> <Step> <Name>Q-EnforceQuota</Name> </Step> <Step> <Name>CORS</Name> </Step> </Request> <Response/> </PreFlow>

    다음과 같이 바꿉니다.

    <PreFlow name="PreFlow"> <Request> <Step> <Name>CORS</Name> </Step> <Step> <Name>VAK-VerifyKey</Name> </Step> <Step> <Name>Q-EnforceQuota</Name> </Step> </Request> <Response/> </PreFlow>
  12. 저장을 클릭합니다. 프록시가 새 버전으로 저장되었다는 알림이 표시되면 새 버전으로 저장을 클릭합니다.

  13. 배포를 클릭합니다.

  14. 서비스 계정에 서비스 계정 이메일 주소를 지정합니다.

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  15. 배포를 클릭한 후 확인을 클릭합니다.

  16. 개요 탭을 클릭하고 eval 배포 상태에 프록시가 배포되었음이 표시될 때까지 기다립니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. API 프록시에 CORS 추가

디버그 세션 시작

  1. 디버그 탭을 클릭합니다.

  2. 디버그 세션 시작을 클릭합니다.

  3. 디버그 세션 시작 창의 환경 드롭다운에서 eval을 선택합니다.

  4. 시작을 클릭합니다.

    디버그 세션에서 요청 캡처를 시작하기까지 약간의 시간이 걸릴 수 있습니다.

CORS 기능 테스트

  1. Cloud Shell에서 테스트 VM에 대한 SSH 연결을 엽니다.

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. 승인을 요청하는 메시지가 나타나면 승인을 클릭합니다.

    이제 Cloud Shell 세션이 VM 내에서 실행됩니다.

  3. API 키를 가져오려면 다음 명령어를 실행합니다.

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) echo "PROJECT_ID=${PROJECT_ID}" export API_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/fullaccess-app" | jq ".credentials[0].consumerKey" --raw-output) echo "API_KEY=${API_KEY}"
  4. 고객 목록을 가져오도록 요청을 실행합니다.

    curl -i -k -X GET -H "apikey: ${API_KEY}" "https://eval.example.com/bank/v1/customers"

    출처가 없으므로 CORS 기능을 건너뜁니다. Access-Control-Allow-Origin 헤더가 반환되지 않는지 확인합니다.

  5. 또 다른 요청을 실행하되 이번에는 Origin 헤더를 포함합니다. 일반적인 CORS 요청을 테스트합니다.

    curl -i -k -X GET -H "Origin: https://www.example.com" -H "apikey: ${API_KEY}" "https://eval.example.com/bank/v1/customers"

    Origin이 제공되었으므로 access-control-* 헤더가 반환됩니다.

  6. 프리플라이트 요청을 실행합니다.

    curl -i -k -X OPTIONS -H "Origin: https://www.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: Content-Type,apikey" "https://eval.example.com/bank/v1/customers"

    CORS 정책은 응답에 프리플라이트 헤더를 설정하고 요청이 백엔드로 계속 진행되지 않도록 차단합니다.

    Apigee UI로 돌아가 디버그 도구에서 OPTIONS 호출을 살펴보면 CORS 정책에서 호출이 백엔드 서비스로 전달되지 않도록 했음을 확인할 수 있습니다.

  7. exit를 입력하여 가상 머신 SSH 세션을 종료합니다.

작업 6. OpenAPI 사양 다운로드 및 수정

이 작업에서는 API 프록시의 인터페이스를 정의하는 OpenAPI 사양을 다운로드하고 수정합니다.

OpenAPI 사양은 API 프록시를 개발자 포털에 게시할 때 사용됩니다.

OpenAPI 사양 다운로드 및 수정

  1. Cloud Shell에서 API 프록시의 OpenAPI 사양을 다운로드하려면 다음 명령어를 실행합니다.

    curl https://storage.googleapis.com/spls/shared/firestore-simplebank-data/dev-portal/simplebank-spec.yaml?$(date +%s) --output ~/simplebank-spec.yaml

    이 curl 명령어는 simplebank-spec.yaml 파일을 다운로드하고, 홈 디렉터리에 있고 이름이 같은 파일에 저장합니다.

참고: '?$(date +%s)'는 현재 날짜/시간 문자열 표현인 쿼리 파라미터를 URL에 추가합니다. 이 동적으로 변경되는 변수는 URL을 변경하고 이전 버전이 캐시된 경우에도 강제로 curl이 최신 버전의 파일을 가져오도록 합니다.
  1. Cloud Shell에서 편집기 열기를 클릭한 후 필요한 경우 새 창에서 열기를 클릭합니다.

    Cloud Shell 편집기 버튼

  2. 편집기에서 simplebank-spec.yaml 파일을 선택합니다.

    이 OpenAPI 사양은 이 실습에서 만든 API 프록시 인터페이스를 지정합니다. 사양은 개발자 포털에서 실시간 문서를 제공하는 데 사용됩니다.

    개발자 포털은 외부 네트워크에서 Apigee 프록시에 액세스합니다. 사용 중인 호스트 이름(eval.example.com)은 내부 네트워크에서만 사용될 수 있습니다.

    API 프록시에 대한 외부 액세스를 제공하기 위해 부하 분산기가 프로비저닝되었습니다. 외부 액세스는 와일드 카드 DNS 제공업체인 nip.io에서 제공하는 호스트 이름을 사용합니다.

    외부 호스트 이름이 다음과 같이 표시됩니다.

    eval.60.70.80.90.nip.io

    이 호스트 이름은 이미 eval-group 환경 그룹과 일치하는 호스트 이름으로 지정되어 있습니다.

  3. Cloud Shell에서 eval-group 설정을 검색하려면 다음 명령어를 사용합니다.

    curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/envgroups/eval-group"

    hostnames 배열에는 IP 주소가 없는 호스트 이름(eval.example.com) 하나와 IP 주소가 있는 호스트 이름(eval.60.70.80.90.nip.io와 유사) 하나 등 호스트 이름이 두 개 있습니다. OpenAPI 사양에서 IP 주소와 함께 호스트 이름을 사용합니다.

  4. 편집기에서 10번째 줄에 있는 호스트 이름을 다음으로 바꿉니다.

    eval.<IPADDR>.nip.io

    서버 URL의 호스트 이름을 바꾸면 10번째 줄이 다음과 같이 표시됩니다.

    - url: "https://eval.60.70.80.90.nip.io/bank/v1"
  5. 파일 > 저장을 클릭합니다.

  6. simplebank-spec.yaml > 다운로드를 마우스 오른쪽 버튼으로 클릭합니다.

    그러면 파일이 로컬 머신에 다운로드됩니다. 개발자 포털에서 업데이트된 사양을 사용합니다.

작업 7. 개발자 포털 만들기 및 API 게시

이 작업에서는 통합 개발자 포털을 만든 후 API를 게시합니다.

통합 개발자 포털 만들기

  1. Apigee 탐색 메뉴에서 배포 > 포털을 선택하고 + 만들기를 클릭합니다.

  2. 이름으로 은행을 입력한 후 만들기를 클릭합니다.

    생성하는 데 1분 정도 걸릴 수 있습니다. 그런 다음 포털 개요 페이지가 열립니다.

  3. '팀 및 대상 관리 기능 베타에 등록' 메시지가 표시되면 등록을 클릭합니다.

포털에 API 게시

  1. Apigee 탐색 메뉴에서 배포 > 포털을 선택하고 은행을 클릭합니다.

  2. + API를 클릭합니다.

  3. API 제품으로 은행(전체 액세스)을 선택합니다.

  4. API 세부정보를 맞춤설정합니다.

    속성
    게시됨(카탈로그에 등록됨) 선택됨
    표시 제목 SimpleBank
    표시 설명 SimpleBank API v1
    API 공개 상태 공개 선택(모든 사용자에게 표시)

    게시됨으로 설정하면 포털에 API가 표시되고 공개 상태로 설정하면 사용자가 포털에 로그인하지 않아도 API가 표시됩니다.

  5. Display Image에서 선택을 클릭한 후 URL을 클릭합니다.

  6. 이미지 URL을 다음으로 설정합니다.

    https://storage.googleapis.com/spls/shared/firestore-simplebank-data/dev-portal/piggy-bank.png

    미리보기를 클릭하면 돼지 저금통 이미지가 표시됩니다.

  7. 선택을 클릭합니다.

  8. API 참고 리소스 섹션에서 OpenAPI 문서를 선택합니다.

  9. Select File에서 선택을 클릭합니다.

  10. 찾아보기를 클릭하고 Cloud Shell에서 다운로드한 OpenAPI 사양 파일(simplebank-spec.yaml)을 선택합니다.

  11. 선택을 클릭합니다.

  12. 저장을 클릭합니다.

  13. 새 탭에서 개발자 포털을 열려면 오른쪽 상단에 있는 실시간 포털 보기를 클릭합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 개발자 포털 만들기 및 API 게시

디버그 세션 시작

  1. Apigee 탐색 메뉴로 돌아가 프록시 개발 > API 프록시를 선택한 후 bank-v1을 클릭합니다.
  2. 디버그 탭을 클릭합니다.
  3. 디버그 세션 시작 창의 환경 드롭다운에서 eval을 선택합니다.
  4. 시작을 클릭합니다.

개발자 포털을 사용하여 API 테스트

  1. Cloud Shell에서 전체 액세스 API 키를 가져오려면 다음 명령어를 실행합니다.

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) echo "PROJECT_ID=${PROJECT_ID}" export API_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/fullaccess-app" | jq ".credentials[0].consumerKey" --raw-output) echo "API_KEY=${API_KEY}"

    API 키를 클립보드에 복사합니다.

  2. 실시간 포털 탭으로 돌아가 API를 클릭합니다.

  3. 돼지 저금통을 클릭합니다.

    SimpleBank API가 표시됩니다.

  4. 승인을 클릭합니다.

  5. API 키를 에 붙여넣습니다.

  6. 승인을 클릭한 후 확인을 클릭합니다.

    이제 API 키가 모든 요청과 함께 전송됩니다.

  7. 왼쪽 메뉴에서 /customers POST를 클릭합니다.

  8. 다음 요청 본문을 지정합니다.

    { "email": "mina@example.com", "lastName": "Yu", "firstName": "Mina" }
  9. 실행을 클릭합니다.

    200 OK 응답은 고객이 생성되었음을 나타냅니다.

  10. 왼쪽 메뉴에서 /customers GET을 클릭합니다.

  11. 실행을 클릭합니다.

    방금 만든 고객이 데이터베이스의 다른 고객과 함께 반환됩니다.

    Apigee UI디버그 세션으로 돌아가면 두 명령어를 전송하기 전에 브라우저에서 OPTIONS(프리플라이트) 요청을 자동으로 전송한 것을 확인할 수 있습니다. 브라우저에서 apikey 헤더가 허용되어야 하는지 여부를 알 수 없으므로 GET 명령어 전에 프리플라이트 요청이 필요합니다.

작업 8. 포털에서 앱 개발자 만들기(선택사항)

이 작업에서는 개발자 포털을 사용하여 앱 개발자를 만듭니다.

참고: 이 작업을 수행하려면 등록 이메일을 수신할 이메일 주소를 입력해야 합니다. 이메일에는 등록된 계정이 개발자 포털에 로그인하려면 먼저 클릭해야 하는 링크가 포함되어 있습니다. 이메일 주소는 다른 용도로 사용되지 않으며 Google Cloud 프로젝트가 자동으로 삭제되면 같이 삭제됩니다.

개발자 포털에 앱 개발자 등록

  1. 실시간 포털로 돌아가 로그인을 클릭합니다.

  2. 계정 만들기를 클릭합니다.

  3. 이름, 성, 이메일 주소, 비밀번호를 입력합니다.

    개발자 포털에 로그인하려면 비밀번호를 사용해야 하므로 기억할 수 있는 비밀번호를 사용합니다.

  4. 이용약관에 동의함을 나타내는 체크박스를 클릭합니다.

    앱 개발자에게 API를 제공하는 조직에서 이용약관 페이지를 지정합니다.

  5. 계정 만들기를 클릭합니다.

    이메일이 이메일 주소로 전송됩니다. 계정 사용자가 로그인할 수 있도록 클릭해야 하는 링크가 포함되어 있습니다.

  6. 이메일로 전송된 링크를 클릭합니다.

    브라우저 탭이 개발자 포털로 열립니다.

  7. 로그인을 클릭합니다.

  8. 이메일 주소와 비밀번호를 입력한 후 로그인을 클릭합니다.

앱 개발자용 앱 만들기

  1. 오른쪽 상단에 있는 이메일 주소를 클릭한 후 을 클릭합니다.

  2. + 새 앱을 클릭합니다.

  3. 앱 이름으로 MyApp을 지정합니다.

  4. API 섹션에서 SimpleBank에 대해 사용 설정을 클릭합니다.

  5. 저장을 클릭합니다.

    앱이 등록되고 API 키가 표시됩니다. 이 API 키는 개발자 포털 내에서 사용될 수 있습니다. Apigee UI로 돌아가 각각 게시 > 개발자게시 > 앱으로 이동하면 앱 개발자와 앱이 표시됩니다.

수고하셨습니다

이 실습에서는 API 키 검증을 사용하여 API에 대한 액세스 권한을 제한했습니다. 내부 및 외부 앱 개발자에게 다양한 수준의 서비스를 제공하기 위해 API 제품을 만들었습니다. 할당량 정책을 사용하여 각 앱의 호출 수를 제한하고 API에서 교차 출처 리소스 공유를 지원하도록 CORS 정책을 추가했습니다. 개발자 포털을 만들고 앱 개발자가 사용할 수 있도록 API 제품을 게시했습니다.

다음 단계/더 학습하기

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2025년 8월 5일

실습 최종 테스트: 2025년 8월 5일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.