Apigee mTLS の概要

Apigee mTLS 機能は、Edge for プライベート クラウド クラスタ内のコンポーネント間の通信にセキュリティを追加します。サービス メッシュを構成してインストールするための業界標準の方法を提供します。パッケージ管理と構成の自動化をサポートしています。

アーキテクチャの概要

コンポーネント間の安全な通信を実現するため、Apigee mTLS は、コンポーネント間で安全な相互認証 TLS 接続を確立するサービス メッシュを使用します。

次の図は、Apigee mTLS が保護する Apigee コンポーネント間の接続(in red)を示しています。図に示されているポートは例です。各コンポーネントで使用できる範囲のリストについては、ポートの使用をご覧ください。

(「M」が付いているポートはコンポーネントの管理に使用されるため、Management Server からアクセスできるようにコンポーネント上で開いておく必要があります)。

上の図に示すように、Apigee mTLS は、クラスタ内のほとんどのコンポーネント間の接続にセキュリティを追加します。

ソース 宛先
管理サーバー Router、MP、QPid、LDAP、Postgres、Zookeeper、Cassandra の各ノード
ルーター ループバック、Qpid、ZooKeeper、Cassandra ノード
Message Processor ループバック、Qpid、ZooKeeper、Cassandra ノード
ZooKeeper と Cassandra その他の Zookeeper ノードと Cassandra ノード
Edge UI SMTP(外部 IDP のみ)
Postgres その他の Postgres、ZooKeeper、Cassandra ノード

メッセージの暗号化/復号

Apigee mTLS サービス メッシュは、クラスタ内の各 ZooKeeper ノードで実行される Consul サーバーと、クラスタ内のすべてのノードで実行される次の Consul サービスで構成されています。

  • ホストノードで発信したメッセージをインターセプトする Egress プロキシ。このサービスは、発信したメッセージを暗号化してから宛先に送信します。
  • ホストノードで着信したメッセージをインターセプトする Ingress プロキシ。このサービスは、着信したメッセージを復号してから最終的な宛先に送信します。

たとえば、Management Server が Router にメッセージを送信すると、下り(外向き)プロキシ サービスが送信メッセージをインターセプトして暗号化し、Router に送信します。Router のノードがメッセージを受信すると、Ingress プロキシ サービスがメッセージを復号し、処理のために Router コンポーネントに渡します。

この処理はすべて Edge コンポーネントに対して透過的に行われます。Edge コンポーネントは、Consul プロキシ サービスによって実行される暗号化と復号のプロセスを認識しません。

また、Apigee mTLS は、トラフィックのリダイレクトを管理する Linux ファイアウォール サービスである iptables ユーティリティを使用します。

要件

Apigee mTLS をインストールする前に、環境が次の要件を満たしている必要があります。

以下のセクションでは、これらの要件について詳しく説明します。

トポロジの要件

Apigee mTLS では、環境のトポロジに少なくとも 3 つの Zookeeper ノードが含まれている必要があります。そのため、Apigee mTLS は、5、9、12(マルチデータ センター)、13 ノードを使用するトポロジにのみインストールできます。詳細については、インストール トポロジをご覧ください。

ユーティリティ/パッケージ

Apigee mTLS では、インストール プロセスを開始する前に、管理マシンを含むクラスタ内の各マシンに次のパッケージをインストールして有効にする必要があります。

ユーティリティ/パッケージ 説明 インストール後に削除しても問題ないか?
base64 インストール スクリプト内のデータを確認する。
gnu-bash
gnu-sed
gnu-grep
インストール スクリプトやその他の一般的なツールで使用されます。
iptables デフォルトのファイアウォール firewalld を置き換えます。
iptables-services iptables ユーティリティに機能を提供します。
lsof インストール スクリプトで使用されます。
nc iptables ルートを確認します。
openssl 最初のブートストラップ プロセス中に証明書にローカルで署名します。

インストール中に、管理マシンに Consul パッケージもインストールして、認証情報と暗号鍵を生成できるようにします。

apigee-mtls パッケージは、クラスタ内の ZooKeeper ノードに上り(内向き)プロキシと下り(外向き)プロキシを含む Consul サーバーをインストールして構成します。

ユーザー アカウント権限

インストールする前に、新しいユーザー アカウントを作成するか、昇格された権限を持つアカウントにアクセスできることを確認してください。

クラスタ内の各ノードで Apigee mTLS のインストールを実行するアカウントは、次のことができる必要があります。

  • Apigee コンポーネントの起動、停止、再起動、初期化
  • ファイアウォール ルールを設定する
  • 新しい OS/システム ユーザー アカウントを作成する
  • systemctl を使用して、サービスの有効化、無効化、開始、停止、マスクを行う

管理マシン(推奨)

Apigee では、このドキュメントで説明するさまざまな管理タスクを実行できるノードをクラスタ内に用意することをおすすめします。たとえば、次のようなタスクです。

  1. HashiCorp Consul 1.6.2 をインストールします。
  2. 証明書と鍵のペア、およびゴシップ暗号鍵を生成して配布します。
  3. 構成ファイルを更新して配布します。

管理マシンを設定する際は、次の点に注意してください。

  • root 権限があることを確認します。
  • Edge apigee-setup ユーティリティをインストールするの説明に従って、apigee-service ユーティリティと apigee-setup ユーティリティをダウンロードしてインストールします。
  • scp/ssh を使用して、管理マシンからクラスタ内のすべてのノードにアクセスできることを確認します。これは、構成ファイルと認証情報を配布できるようにするために必要です。

ポートの使用状況と割り当て

このセクションでは、Apigee mTLS との Consul 通信をサポートするためのポートの使用とポートの割り当てについて説明します。

ポートの使用状況: apigee-mtls を実行しているすべてのノード

apigee-mtls サービスを使用するクラスタ内のすべてのノードは、localhost(127.0.0.1)上のサービスからの接続を許可する必要があります。これにより、Consul プロキシは、受信メッセージと発信したメッセージを処理するときに他のサービスと通信できます。

ポートの使用状況: Consul サーバーノード(ZooKeeper を実行するノード)

クラスタ内のすべてのノードからのリクエストを受け入れるには、Consul サーバーノード(ZooKeeper を実行しているノード)で次のポートのほとんどを開く必要があります。

ノード Consul サーバーポート 説明 プロトコル 外部 mtls-agents を許可する
*
Consul サーバー(ZooKeeper ノード) 8300 クラスタ内のすべての Consul サーバーを接続します。 RPC
8301 クラスタ内のメンバーシップとブロードキャスト メッセージを処理します。 UDP/TCP
8302 マルチデータセンター構成でメンバーシップ メッセージとブロードキャスト メッセージを処理する WAN ポート。 UDP/TCP
8500 同じノード上のプロセスから Consul Server API への HTTP 接続を処理します。

このポートはリモート通信や調整には使用されません。localhost でのみリッスンします。

HTTP
8502 クラスタ内の他のノードから Consul Server API への gRPC+HTTPS 接続を処理します。 gRPC+HTTPS
8503 クラスタ内の他のノードから Consul Server API への HTTPS 接続を処理します。 HTTPS
8600 Consul サーバーの DNS を処理します。 UDP/TCP
* Apigee では、インバウンド リクエストをクラスタ メンバー(クロスデータストアを含む)のみに制限することをおすすめします。iptables を使うことで、これが可能になります。

この表に示すように、consul-server コンポーネントを実行するノード(ZooKeeper ノード)は、apigee-mtls サービスを実行しているクラスタのすべてのメンバーに対して、データセンターをまたいでポート 8301、8302、8502、8503 を開く必要があります。ZooKeeper を実行していないノードでは、これらのポートを開く必要はありません。

すべての Consul ノード(ZooKeeper を実行しているノードを含む)のポート割り当て

Consul 通信をサポートするには、次の Apigee コンポーネントを実行するノードで、次の範囲内のポートへの外部接続を許可する必要があります。

Apigee コンポーネント 範囲 ノードあたりに必要なポート数
Apigee mTLS 10700 ~ 10799 1
Cassandra 10100 ~ 10199 2
Message Processor 10500 ~ 10599 2
OpenLDAP 10200 ~ 10299 1
Postgres 10300 ~ 10399 3
Qpid 10400 ~ 10499 2
ルーター 10600 ~ 10699 2
ZooKeeper 10000 ~ 10099 3

Consul は、単純な線形方式でポートを割り当てます。たとえば、クラスタに 2 つの Postgres ノードがある場合、最初のノードは 2 つのポートを使用するため、Consul はポート 10300 と 10301 を割り当てます。2 番目のノードも 2 つのポートを使用するため、Consol は 10302 と 10303 をそのノードに割り当てます。これはすべてのコンポーネント タイプに適用されます。

ご覧のとおり、実際のポート数はトポロジによって異なります。クラスタに 2 つの Postgres ノードがある場合は、4 つのポート(2 つのノードにそれぞれ 2 つのポート)を開く必要があります。

次の点にご留意ください。

  • Consul プロキシは、Apigee サービスと同じポートをリッスンできません。
  • Consul にはポートアドレス空間が 1 つしかありません。Consul プロキシポートの割り当ては、データセンターを含むクラスタ全体で一意である必要があります。つまり、ホスト A のプロキシ A がポート 15000 でリッスンしている場合、ホスト B のプロキシ B はポート 15000 でリッスンできません。
  • 前述のように、使用されるポートの数はトポロジによって異なります。

マルチデータセンター構成では、mTLS を実行しているすべてのホストでポート 8302 を開く必要があります。

Apigee mTLS が使用するデフォルトのポートをカスタマイズできます。この方法については、プロキシポート範囲のカスタマイズをご覧ください。

制限事項

Apigee mTLS には次の制限があります。

  • ノード間の Cassandra 通信(ポート 7000)を暗号化しない
  • 構成と設定はべき等ではありません。つまり、1 つのノードで 1 つの変更を行った場合、すべてのノードで同じ変更を行う必要があります。システムは、他のノードにその変更を適用しません。詳細については、既存の apigee-mtls 構成を変更するをご覧ください。

用語

このセクションでは、次の用語を使用しています。

用語 定義
クラスタ Edge for Private Cloud のインストールを構成するマシンのグループ。
Consul Apigee mTLS で使用されるサービス メッシュ。Consul が Private Cloud の通信を保護する方法については、Consul のセキュリティ モデルをご覧ください。
mTLS 相互認証 TLS。
サービス メッシュ オーバーレイ ネットワーク(またはネットワーク内のネットワーク)。
TLS Transport Layer Security。安全な通信のための業界標準の認証プロトコル。