このセクションでは、Hybrid 管理プレーンとランタイム プレーンの MART サービスとの間の通信に Apigee Connect(ベータ版)を使用する方法について説明します。
はじめに
Apigee Connect を使用すると、インターネット上で MART エンドポイントを公開しなくても、Apigee Hybrid 管理プレーンをランタイム プレーンの MART サービスに安全に接続できます。Apigee Connect を使用する場合は、ホスト エイリアスと承認済み DNS 証明書を使用して MART Ingress ゲートウェイを構成する必要はありません。
前提条件
Apigee Connect を設定する前に、Apigee Hybrid バージョン 1.2.0 以降をインストールして構成する必要があります。
- Apigee Hybrid を初めてインストールする場合は、Apigee Hybrid のドキュメントのインストール手順に従ってください。
- 現在 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 Hybrid を有効にして使用する手順は次のとおりです。
- 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 Hybrid インストール手順のサービス アカウントの作成の手順で作成した 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 エージェントのロールは事前定義されていて、次の権限が割り当てられています。
権限 説明 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 Hybrid をインストールしたときにダウンロードした 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 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
このアップグレードで、Hybrid ランタイム プレーンは 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 エージェントは、既存の接続を即時停止するのではなく、有効期限が切れるまで待ちます。この遅延により、処理中のリクエストが失われないようにします。