Apigee Connect の使用(ベータ版)

このセクションでは、ハイブリッド管理プレーンとランタイム プレーンの MART サービスとの間の通信に Apigee Connect(ベータ版)を使用する方法について説明します。

はじめに

Apigee Connect を使用すると、インターネット上で MART エンドポイントを公開しなくても、Apigee Hybrid 管理プレーンをランタイム プレーンの MART サービスに安全に接続できます。Apigee Connect を使用する場合は、ホスト エイリアスと承認済み DNS 証明書を使用して MART Ingress ゲートウェイを構成する必要はありません。

ハイブリッド ランタイム プレーンで実行される主なサービスと Apigee Connect

前提条件

Apigee Connect を設定する前に、Apigee ハイブリッドのバージョン 1.2.0 以降をインストールして構成する必要があります。

  • Apigee ハイブリッドを初めてインストールする場合は、Apigee ハイブリッドのドキュメントのインストール手順に沿ってください。
  • 現在 Apigee Hybrid バージョン 1.1.x を使用している場合は、続行する前にインストールしているバージョンを 1.2.0 にアップグレードする必要があります。アップグレード手順については、Apigee ハイブリッドのアップグレードをご覧ください。

Apigee Connect をハイブリッド ランタイムに追加する

このセクションでは、Apigee Hybrid 1.2.0 以降をインストールまたはアップグレードしていることを前提としています。

Apigee Connect が構成されて有効になっている場合、MART Ingress は無視されます。管理プレーンは、必ず Apigee Connect を使用して MART に接続します。ハイブレッド ランタイム プレーン間のすべての MART トラフィックは、安全な Apigee Connect 接続を経由します。

Apigee Connect と Apigee ハイブリッドを有効にして使用する手順は次のとおりです。

  1. Google Cloud API ライブラリApigee Connect API を有効にします。API は Google Cloud(GCP)コンソール または gcloud で有効にできます。Google Cloud コンソールで API を有効にする手順については、ステップ 3: API を有効にするをご覧ください。gcloud を使用して API を有効にするには:
    $ gcloud config set project YOUR_GCP_PROJECT_ID
    $ gcloud services enable apigeeconnect.googleapis.com

    ここで、YOUR_GCP_PROJECT_ID は、Apigee が有効で、Apigee 組織がプロビジョニングされているものと同じ GCP プロジェクトです。
  2. Apigee ハイブリッド インストール手順のサービス アカウントを作成するのステップで作成した MART サービス アカウントに、Apigee Connect エージェントのロールを追加します。
    $ gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID
    --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

    ここで、YOUR_GCP_PROJECT_ID は、Apigee が有効で、Apigee 組織がプロビジョニングされているものと同じ GCP プロジェクトです。YOUR_MART_SERVICE_ACCOUNT_EMAIL は、MART サービス アカウント名です。名前はメールアドレスの形式です。例: apigee-mart@my-project.iam.gserviceaccount.com

    Apigee Connect Agent のロールは事前に定義されており、次の権限が割り当てられています。
    権限 説明
    apigeeconnect.endpoints.connect これは、Apigee Connect エージェントを設定するための権限です。

    GCP Console または API を使用して権限を付与する方法については、以下をご覧ください。

  3. サービス アカウントの作成で説明されているように、MART サービス アカウントのキーファイルが hybrid_files/service_accounts ディレクトリにあることを確認します。
  4. オーバーライド ファイルを開き、次のスタンザを追加します。この構成では、ダウンロードしたサービス アカウント キーのパスを指定する必要があります。Apigee Connect エージェント ロールを持つサービス アカウントのキーを使用する必要があります。
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json

    見出し k8sCluster の下にスタンザを追加します。次に例を示します。
    k8sCluster:
      name: your_cluster_name
      region: your_cluster_region
    
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      replicaCountMin: 3
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. Synchronizer アクセスを有効にするの説明に従って、Apigee ハイブリッドを最初にインストールしたときにダウンロードした、Apigee 組織管理者ロールを持つサービス アカウント キーを探します。以下で説明するように、このキーは API 呼び出しを行うためのトークンの生成で必要になります。
  6. 次の 2 つのコマンドを実行してトークンを取得します。
    $ export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
    $ export TOKEN=$(gcloud auth application-default print-access-token)

    ここで、org-admin-service-account-file は、Apigee 組織管理者ロールでダウンロードしたサービス アカウントキーのシステム上のパスです。
  7. 組織で Apigee Connect を有効にするには、次の Apigee API を呼び出します。
    curl -v -X PUT \
       https://apigee.googleapis.com/v1/organizations/your_org_name \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $TOKEN" \
      -d '{
      "name" : "your_org_name",
      "properties" : {
        "property" : [ {
          "name" : "features.hybrid.enabled",
          "value" : "true"
        }, {
          "name" : "features.mart.connect.enabled",
          "value" : "true"
        } ]
      }
    }'

  8. クラスタで Apigee Connect エージェントを起動します。

    $ $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml -c connect-agent

  9. mart:
      hostAlias: "mart.apigee-hybrid-docs.net"
      serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem
      sslKeyPath: ./certs/privkey.key
    
  10. Apigee Connect エージェントのログを確認します。エラーが報告されていなければ、アップグレードに成功しています。
    $ kubectl logs -n namespace apigee-connect-agent-pod-name

    Apigee Connect エージェントは次のログカテゴリを報告します。
    監査ログのカテゴリ オペレーション
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Apigee ハイブリッドで監査ログを表示する方法については、監査ログ情報をご覧ください。
  11. このアップグレードにより、ハイブリッド ランタイム プレーンは Apigee Connect を介して管理プレーンと通信するようになります。

  12. インストールをテストします

Apigee Connect の削除もご覧ください。

インストールのテスト

  1. Apigee ハイブリッド UI を開きます。
  2. UI に、デベロッパーと以前に作成したデベロッパー アプリが表示されていることを確認します。これらのエンティティは、MART サーバーからクエリされるため、管理プレーンとランタイム プレーン間の通信が正しく構成されている場合にのみ表示されます。
  3. リクエストが MART Ingress ではなく Apigee Connect を経由していることを確認するには、MART サーバーのログをチェックします。apigee-connect-agent-1.0 という名前の Apigee Connect エージェントのエントリが表示されます。
    $ kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl -c apigee-mart | grep connect

    例:
    "2019-12-11 04:59:52,321 org: env: target: action: context-id: mode: pool-1-thread-1 INFO MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576040392317 /v1/organizations/apigee-connect-hybrid-prod/developers/ count=100&expand=true&startKey=4ee9e8f7-12b2-4cde-bf10-32d991469876 200 GET apigee-connect-hybrid-prod 10.40.11.3 10.40.0.5 apigee-connect-agent-1.0 null"
  4. Hybrid UI で、API プロダクト、デベロッパー、デベロッパー アプリを作成します。次に、MART サービスログでログエントリをチェックして、エンティティがランタイム プレーンに送信されたことを確認します。たとえば、次のログエントリは、foo-product という API プロダクトが受信されたことを示しています。
    $ kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl -c apigee-mart

    2019-12-16 22:15:29,572 org: env: target: action: context-id: mode: pool-1-thread-1 INFO  MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576534529566 /v1/organizations/myorg/apiproducts/foo-product/ -NA- 201 CREATE myorg 10.16.1.61  10.16.1.64 apigee-connect-agent-1.0 null
    
    2019-12-16 22:15:30,412 org: env: target: action: context-id: mode: pool-1-thread-1 INFO  MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576534530407 /v1/organizations/myorg/apps/ apiProduct=foo-product&expand=false 200 GET myorg 10.16.1.61  10.16.1.64 apigee-connect-agent-1.0 null
  5. プロキシの作成とデプロイの説明に従って、新しいプロキシを作成してデプロイします。
  6. API キーの要求による API プロキシの保護の手順に沿って、API キー検証を使用してプロキシを構成します。ランタイムは、Apigee Connect を介して管理プレーンから API キーを検証するために必要なデータを取得します。したがって、API キー検証が機能していれば、Apigee Connect は正しく機能しています。また、Apigee Connect のログでデータ転送のレポートを確認することもできます。

Apigee Connect の削除

Apigee Connect のデプロイを削除した場合、Pod のステータスは最大 7 分間「終了」状態のままになります。これは想定内の時間です。Apigee Connect エージェントは、既存の接続を即時停止するのではなく、有効期限が切れるまで待ちます。この遅延により、処理中のリクエストが失われないようにします。