内部専用アクセスに制限された API プロキシの呼び出し

このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。

Apigee Edge のドキュメントを表示します。

このドキュメントでは、内部ネットワークで実行されているクライアントから API プロキシを呼び出す方法について説明します。以下の手順は、内部ネットワーク ルーティングを使用するように Apigee がプロビジョニングされている場合に設定をテストするのに役立ちます。Apigee が次のいずれかのネットワーク ルーティング構成でプロビジョニングされている場合は、このドキュメントの手順に沿ってください。

プロビジョニング オプション ネットワーキング オプション プロビジョニングの手順
有料サブスクリプション VPC ピアリングを使用 内部ルーティング(VPC)
内部ルーティング(PSC)
従量課金制 VPC ピアリングを使用 内部ルーティング(VPC)
内部ルーティング(PSC)
評価 VPC ピアリングを使用 ルーティングを構成する(内部)
評価 VPC ピアリングを使用しない 内部ルーティング(PSC)

ネットワーキング オプションもご覧ください。

始める前に

次の事前設定を行います。

  1. まだ行っていない場合は、gcloud CLI の初期化の説明に従って Cloud SDK を初期化します。また、前提条件で作成した 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 は、署名なしトークンを含む 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 プロジェクトの内部ロードバランサに解決されるデフォルトの完全修飾ドメイン名を使用します。このオプションでは、内部で作成された Apigee 自己署名証明書を使用して TLS が使用されます。これらの証明書はお客様が管理する必要はありません。
      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 証明書を pull します。
        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 チュートリアルのツアーに参加してください。

    (上級者向け)これを本番環境の設定に切り替える予定がある場合は、新しいクラスタおよび関連する Cloud サービスの周囲にセキュリティ境界を構成できます。これを実現するには VPC Service Controls を使用します。