내부 전용 액세스로 API 프록시 호출

이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.

Apigee Edge 문서 보기

이 문서에서는 내부 네트워크에서 실행되는 클라이언트에서 API 프록시를 호출하는 방법을 설명합니다. 다음 단계는 Apigee가 내부 네트워크 라우팅을 사용하도록 프로비저닝된 경우 설정을 테스트하는 데 유용합니다. Apigee가 다음 네트워크 라우팅 구성으로 프로비저닝됐으면 이 문서의 단계를 수행할 수 있습니다.

프로비저닝 옵션 네트워킹 옵션 프로비저닝 단계
유료 구독 VPC 피어링 사용 내부 라우팅(VPC)
내부 라우팅(PSC)
사용한 만큼만 지불 VPC 피어링 사용 내부 라우팅(VPC)
내부 라우팅(PSC)
평가 VPC 피어링 사용 라우팅 구성(내부)
평가 VPC 피어링 미사용 내부 라우팅(PSC)

네트워킹 옵션도 참조하세요.

시작하기 전에

다음과 같은 사전 설정 단계를 수행하세요.

  1. 아직 Cloud SDK를 초기화하지 않았으면 gcloud CLI 초기화 설명대로 초기화하거나 기본 요건에서 만든 Google Cloud 프로젝트가 gcloud의 기본 프로젝트인지 확인합니다.
  2. 다음 로컬 환경 변수를 정의합니다.

    export PROJECT_ID=YOUR_PROJECT_ID
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export SUBNET=NETWORK_NAME
    export INSTANCE_NAME=INSTANCE_NAME
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

    각 항목의 의미는 다음과 같습니다.

    • PROJECT_ID기본 요건의 일부로 만든 Cloud 프로젝트 ID입니다.
    • AUTH는 Bearer 토큰이 있는 Authentication 헤더를 정의합니다. Apigee API를 호출할 때 이 헤더를 사용합니다. 토큰은 일정 시간 후 만료됩니다. 만료 후에는 동일 명령어를 사용해서 다시 생성할 수 있습니다. 자세한 내용은 print-access-token 명령어의 참조 페이지를 확인하세요.
    • SUBNET은 프로비저닝 중에 지정한 서브넷입니다. 예를 들면 default입니다.
    • INSTANCE_NAME: 새 인스턴스의 이름입니다. 예를 들면 my-runtime-instance입니다. 이름은 소문자로 시작해야 하며 최대 32자(영문 기준)이고 소문자, 숫자, 하이픈만 포함할 수 있습니다. 하이픈으로 시작하거나 끝날 수 없으며 2자(영문 기준) 이상이어야 합니다.
    • PROJECT_NUMBER기본 요건의 일부로 만든 Cloud 프로젝트 번호입니다. 이 예시에서는 gcloud 명령어를 실행하여 프로젝트 번호를 가져옵니다.
  3. Apigee 인스턴스에서 location 속성 값을 가져옵니다. 이 값은 인스턴스가 있는 리전입니다(예: us-west1).
    curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances
  4. 인스턴스 리전 내에서 영역을 선택하고 변수에 영역 이름을 입력합니다. 영역은 인스턴스 내에 있어야 합니다. 예를 들면 다음과 같습니다.
    export VM_ZONE="us-west1-b"

    인스턴스 리전 내에서 영역을 식별하는 데 도움이 필요할 경우 이 gcloud 명령어를 사용하면 구성된 런타임 리전의 영역 이름을 반환합니다. 예를 들면 다음과 같습니다.

    VM_ZONE=$(gcloud compute zones list | grep "us-west1" | head -n 1 | awk '{print $1}')

VM 만들기 및 API 프록시 호출

이제 gcloud beta compute 명령어를 사용하여 VPC 네트워크 내에 새 VM을 만듭니다. VM은 내부 부하 분산기 IP로 요청을 보낼 수 있는 다리 역할을 합니다. VM이 설정된 후에 배포된 API 프록시를 호출할 수 있습니다.

  1. 다음 예시에서는 몇 가지 일반적인 옵션으로 새 VM을 만들고 이전에 정의한 환경 변수를 입력으로 사용합니다.
    gcloud beta compute --project=$PROJECT_ID \
      instances create $INSTANCE_NAME \
      --zone=$VM_ZONE \
      --machine-type=e2-micro \
      --subnet=$SUBNET \
      --network-tier=PREMIUM \
      --no-restart-on-failure \
      --maintenance-policy=TERMINATE \
      --preemptible \
      --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-server,https-server \
      --image=debian-10-buster-v20210217 \
      --image-project=debian-cloud \
      --boot-disk-size=10GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=$INSTANCE_NAME \
      --no-shielded-secure-boot \
      --shielded-vtpm \
      --shielded-integrity-monitoring \
      --reservation-affinity=any
  2. 방금 생성한 새 VM에 대한 보안 연결을 엽니다.

    gcloud compute ssh $INSTANCE_NAME --zone=$VM_ZONE --project=$PROJECT_ID
  3. VM 셸에서 jq 유틸리티를 설치합니다. 후속 단계에서 사용됩니다.
    sudo apt-get update -y
    sudo apt-get install -y jq
    
  4. VM 셸에서 API 프록시 요청을 쉽게 복사하고 붙여넣기할 수 있도록 다음과 같은 환경 변수를 만듭니다.
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export PROJECT_ID=YOUR_PROJECT_ID
    export ENV_GROUP_HOSTNAME=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups -s | jq -r '.environmentGroups[0].hostnames[0]')
    
  5. 변수가 올바르게 설정되었는지 확인합니다.
    echo $AUTH
    echo $PROJECT_ID
    echo $ENV_GROUP_HOSTNAME
  6. API 프록시를 호출합니다. Apigee 프로비저닝 중에 라우팅을 구성한 방법에 해당하는 옵션을 선택합니다.

    VPC 피어링을 사용하는 설치 옵션

    • (TLS 옵션 #1) 내부 라우팅(VPC)에 설명된 대로 프로젝트에서 내부 부하 분산기(ILB)를 구성한 경우 해당 ILB의 IP를 사용하여 프록시를 호출합니다. 이 옵션에서는 사용자가 제어하고 내부 부하 분산기를 만들 때 생성된 CA 인증서를 사용합니다.
      1. VM 인스턴스 그룹 백엔드로 내부 HTTP(S) 부하 분산 설정에 설명된 대로 프로젝트에서 ILB의 IP를 가져옵니다.
      2. API 프록시를 호출합니다.
        curl -H "Host: $ENV_GROUP_HOSTNAME" \
          https://INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (TLS 옵션 2) Apigee 프로젝트의 내부 부하 분산기로 확인되는 정규화된 기본 도메인 이름을 사용합니다. 이 옵션의 경우 TLS는 내부적으로 생성된 Apigee 자체 서명 인증서를 통해 사용됩니다. 이러한 인증서를 제어할 수 없습니다.
      1. Apigee 프로젝트에서 내부 부하 분산기의 IP를 가져옵니다.
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. 다음 명령어를 사용하여 조직을 만드는 동안 생성된 CA 인증서를 가져옵니다.
        curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID | jq -r .caCertificate | base64 -d > cacert.crt
      3. 요청을 배포된 API 프록시에 보냅니다. 여기서 example.$PROJECT_ID.apigee.internal은 내부 부하 분산기로 확인되는 내부의 정규화된 기본 도메인 이름입니다.
        curl -is -H "Host: $ENV_GROUP_HOSTNAME" \
          https://example.$PROJECT_ID.apigee.internal/PROXY_BASEPATH \
          --cacert cacert.crt \
          --resolve example.$PROJECT_ID.apigee.internal:443:$INTERNAL_LOAD_BALANCER_IP
    • (TLS가 아닌 옵션) TLS가 필요하지 않으면 curl 명령어에서 -k 플래그를 사용하여 TLS를 중지합니다. 그러면 SSL 문제를 방지할 수 있습니다.
      1. Apigee 프로젝트에서 내부 부하 분산기의 IP를 가져옵니다.
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. API 프록시를 호출합니다.
        curl -i -k \
          -H "Host: $ENV_GROUP_HOSTNAME" \
          https://$INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (서비스 엔드포인트 옵션) PSC로 유료 또는 평가 조직을 프로비저닝하고 서비스 엔드포인트 라우팅 옵션을 선택한 경우:
      1. 서비스 엔드포인트 IP를 가져옵니다. 엔드포인트 IP를 조회해야 하는 경우 엔드포인트 나열을 참조하세요.
      2. API 프록시를 호출합니다.
        curl -i -k \
           -H "Host: $ENV_GROUP_HOSTNAME" \
           https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        예를 들면 다음과 같습니다.

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    비VPC 피어링을 사용하지 않는 설치 옵션

    • (서비스 엔드포인트 옵션) PSC로 유료 또는 평가 조직을 프로비저닝하고 서비스 엔드포인트 라우팅 옵션을 선택한 경우:
      1. 서비스 엔드포인트 IP를 가져옵니다. 엔드포인트 IP를 조회해야 하는 경우 엔드포인트 나열을 참조하세요.
      2. API 프록시를 호출합니다.
        curl -i -k \
            -H "Host: $ENV_GROUP_HOSTNAME" \
            https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        예를 들면 다음과 같습니다.

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    이 프로세스 중에 오류가 발생하면 명령어에 사용하려고 만든 모든 환경 변수에 유효한 값이 있는지 확인하세요. 문제 해결도 참조하세요.

    다음 단계

    배포할 수 있는 프록시를 생성하거나 Apigee의 기능(예: 트래픽 급증 방지 또는 요청/응답 흐름의 세부정보 보기)을 소개하는 Apigee 튜토리얼을 둘러보세요.

    (고급) 이를 프로덕션 설정으로 전환할 계획이라면 새 클러스터 및 관련 클라우드 서비스 주변에 보안 경계를 구성할 수 있습니다. VPC 서비스 제어를 사용하면 됩니다.