このセクションでは、ハイブリッド管理プレーンとランタイム プレーンの MART サービスとの間の通信に Apigee Connect(ベータ版)を使用する方法について説明します。
はじめに
Apigee Connect を使用すると、インターネット上で MART エンドポイントを公開しなくても、Apigee Hybrid 管理プレーンをランタイム プレーンの MART サービスに安全に接続できます。Apigee Connect を使用する場合は、ホスト エイリアスと承認済み DNS 証明書を使用して MART Ingress ゲートウェイを構成する必要はありません。
前提条件
Apigee Connect を設定する前に、Apigee ハイブリッドのバージョン 1.2.0 以降をインストールして構成する必要があります。
- Apigee ハイブリッドを初めてインストールする場合は、Apigee ハイブリッドのドキュメントのインストール手順に沿ってください。
- 現在 Apigee Hybrid バージョン 1.1.x を使用している場合は、続行する前にインストールしているバージョンを 1.2.0 にアップグレードする必要があります。アップグレード手順については、Apigee Hybrid のアップグレードをご覧ください。
Apigee Connect を Hybrid ランタイムに追加する
このセクションでは、Apigee Hybrid 1.2.0 以降をインストールまたはアップグレードしていることを前提としています。
Apigee Connect が構成され有効になっている場合、MART Ingress は無視されます。管理プレーンは、必ず Apigee Connect を使用して MART に接続します。Hybrid ランタイム プレーン間のすべての MART トラフィックは、安全な Apigee Connect 接続を経由します。
Apigee Connect と Apigee ハイブリッドを有効にして使用する手順は次のとおりです。
- Google Cloud API ライブラリで Apigee Connect API を有効にします。API は Google Cloud(GCP)Console または
gcloud
で有効にできます。Google Cloud Console で 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 プロジェクトです。 - 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 を使用して権限を付与する方法については、以下をご覧ください。
- サービス アカウントの作成で説明されているように、MART サービス アカウントのキーファイルが
hybrid_files/service_accounts
ディレクトリにあることを確認します。 - オーバーライド ファイルを開き、次のスタンザを追加します。この構成では、ダウンロードしたサービス アカウント キーへのパスを指定する必要があります。キーは、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
- Synchronizer アクセスを有効にするで説明しているように、Apigee ハイブリッドを最初にインストールしたときにダウンロードした Apigee 組織管理者のロールを持つサービス アカウント キーを見つけます。このキーは、以下で説明するように、API 呼び出しを行うために必要なトークンを生成するために必要です。
- 次の 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 組織管理者のロールでダウンロードしたサービス アカウント キーのシステム上のパスです。 - 組織で 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" } ] } }'
- クラスタで Apigee Connect エージェントを起動します。
$ $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml -c connect-agent
- Apigee Connect エージェントのログを確認します。エラーが報告されていなければ、アップグレードに成功しています。
$ kubectl logs -n namespace apigee-connect-agent-pod-name
Apigee Connect エージェントは次のログカテゴリを報告します。監査ログのカテゴリ オペレーション DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- インストールをテストします。
mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-project-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key
このアップグレードにより、ハイブリッド ランタイム プレーンは Apigee Connect を介して管理プレーンと通信するようになります。
Apigee Connect の削除もご覧ください。
インストールのテスト
- Apigee Hybrid UI を開きます。
- デベロッパーと、以前に作成したデベロッパー アプリが UI に表示されていることを確認します。これらのエンティティは MART サーバーからクエリされるため、管理プレーンとランタイム プレーン間の通信が正しく構成されている場合にのみ表示されます。
- リクエストが 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"
- 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
- プロキシの作成とデプロイの説明に従って、新しいプロキシを作成してデプロイします。
- API キーの要求による API プロキシの保護の手順に従って、API キー検証を使用してプロキシを構成します。ランタイムは、Apigee Connect を介して管理プレーンから API キーを検証するために必要なデータを取得します。したがって、API キー検証が機能していれば、Apigee Connect は正しく機能しています。また、Apigee Connect のログでデータ転送のレポートを確認することもできます。
Apigee Connect の削除
Apigee Connect のデプロイを削除した場合、Pod のステータスは最大 7 分間「終了」状態のままになります。これは、予想される時間です。Apigee Connect エージェントは、既存の接続を即時停止するのではなく、有効期限が切れるまで待ちます。この遅延により、処理中のリクエストが失われないようにします。