Edge for Private Cloud v4.19.01
Apigee mTLS 機能により、Edge for Private Cloud クラスタ内のコンポーネント間の通信のセキュリティが強化されます。
アーキテクチャの概要
コンポーネント間の安全な通信を提供するために、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 コンポーネントに対して透過的に行われます。Consul プロキシ サービスによって実行される暗号化プロセスと復号プロセスには対応しません。
また、Apigee mTLS は iptables
ユーティリティ(トラフィックのリダイレクトを管理する Linux ファイアウォール サービス)を使用します。
要件
Apigee mTLS は、業界標準の方法でサービス メッシュを構成、インストールできます。パッケージ管理と構成の自動化がサポートされています。
Consul プロキシ サービスは個々のプロセスのポート割り当てとして密結合されているため、1 つのノードを変更すると、他のすべてのノードに影響します。そのため、トポロジが変更された場合は、クラスタ内のすべてのノードでサービスを再構成して再初期化する必要があります。
Apigee mTLS をインストールする前に、環境がこのセクションで説明する次の要件を満たしている必要があります。
これらの要件には次のものがあります。
- Edge for Private Cloud のバージョン
- インストールされて有効になっているユーティリティのセット
- 適切なレベルの権限を持つユーザー アカウント
- 管理マシン(推奨)
Edge for Private Cloud の要件
Apigee mTLS は、Private Cloud 用の Edge の次のバージョンをサポートします(ただし、OS 要件に記載されているとおり、サポートされているすべてのプラットフォームでサポートされているわけではありません)。
- 4.19.06
- 4.19.01
Apigee mTLS では、プライベート クラウド クラスタで 3 つ以上の Zookeeper ノードを含むトポロジを使用する必要があります。そのため、Apigee mTLS は 5、9、12(マルチデータセンター)、または 13 ノードを使用するトポロジにのみインストールできます。詳細については、インストール トポロジをご覧ください。
OS の要件
Apigee mTLS は、Private Cloud クラスタで次のプラットフォームをサポートしています(mTLS でサポートされる OS は Private Cloud のバージョンによって異なります)。
OS | サポートされているプライベート クラウドのバージョン | ||
---|---|---|---|
v4.19.06 | v4.50.00 | v4.51.00 | |
CentOS RedHat Enterprise Linux(RHEL) Oracle Linux |
7.5、7.6、7.7 | 7.5、7.6、7.7、7.8、7.9 | 7.5、7.6、7.7、7.8、7.9、8.0 |
ユーティリティ/パッケージ
Apigee mTLS では、インストール プロセスを開始する前に、クラスタ内の各マシン(管理マシンを含む)に次のパッケージをインストールして有効にしておく必要があります。
ユーティリティ/パッケージ | 説明 | インストール後に削除してもよろしいですか? |
---|---|---|
base64 |
インストール スクリプト内のデータを検証します。 | |
gnu-bash gnu-sed gnu-grep |
インストール スクリプトやその他の一般的なツールで使用されます。 | |
iptables |
デフォルトのファイアウォール firewalld を置き換えます。 |
|
iptables-services |
iptables ユーティリティに機能を提供します。 |
|
lsof |
インストール スクリプトで使用されます。 | |
nc |
iptables ルートを確認します。 |
|
openssl |
初期ブートストラップ プロセス中にローカルで証明書に署名します。 |
また、インストール中に、管理マシンに Consul パッケージをインストールして、認証情報と暗号鍵を生成できるようにします。
apigee-mtls
パッケージは、クラスタ内の ZooKeeper ノードに Ingress プロキシと下り(外向き)プロキシを含む Consul サーバーをインストールして構成します。
ユーザー アカウント権限
クラスタ内の各ノードで Apigee mTLS インストールを実行するアカウントは、次のことができる必要があります。
- Apigee コンポーネントの起動、停止、再起動、初期化
- ファイアウォール ルールを設定する
- 新しい OS/システム ユーザー アカウントを作成する
systemctl
でサービスを有効化、無効化、開始、停止、マスクする
管理マシン(推奨)
Apigee では、このドキュメントで説明する次のようなタスクを実行できるノードをクラスタ内に配置することをおすすめします。
- HashiCorp Consul 1.6.2 をインストールします。
- 証明書/鍵ペアとゴシップ暗号鍵を生成して配布します。
- 構成ファイルを更新して配布します。
管理マシンの要件は次のとおりです。
- Edge apigee-setup ユーティリティのインストールの説明に従って、
apigee-service
ユーティリティとapigee-setup
ユーティリティをダウンロードしてインストールしました。 scp/ssh
には、クラスタ内のすべてのノードに対するアクセス権があります。構成ファイルと認証情報を配布するには、クラスタ内のすべてのホストに対するscp/ssh
アクセス権が必要です。- 管理マシンに対する root 権限がある。
ポートの使用と割り当て
このセクションでは、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 接続を処理します。 このポートはリモート通信や調整には使用されません。ローカルホストでのみリッスンします。 |
HTTP | ||
8502 |
クラスタ内の他のノードから Consul Server API への gRPC + HTTPS 接続を処理します。 | gRPC+HTTPS | ||
8503 |
クラスタ内の他のノードから Consul Server API への HTTPS 接続を処理します。 | HTTPS | ||
8600 |
Consul サーバーの DNS を処理します。 | UDP/TCP | ||
* 受信リクエストをクラスタ メンバー(クロスデータストアを含む)のみに制限することをおすすめします。これは iptables で行えます。 |
この表に示すように、consul-server
コンポーネント(ZooKeeper ノード)を実行するノードは、データセンターで apigee-mtls
サービスを実行しているすべてのメンバーに対して、ポート 8301、8302、8502、8503 を開く必要があります。ZooKeeper を実行していないノードで、これらのポートを開く必要はありません。
すべての Consul ノード(ZooKeeper を実行しているノード)のポート割り当て
Consul 通信をサポートするには、次の Apigee コンポーネントを実行しているノードが、次の範囲内のポートへの外部接続を許可する必要があります。
Apigee コンポーネント | 範囲 | ノードごとに必要なポートの数 |
---|---|---|
Apigee mTLS | 10,700 ~ 10,799 | 1 |
Cassandra | 10,100 ~ 10,199 | 2 |
Message Processor | 10,500 ~ 10,599 | 2 |
OpenLDAP | 10,200 ~ 10,299 | 1 |
Postgres | 10,300 ~ 10,399 | 3 |
QPD | 10,400 ~ 10,499 | 2 |
ルーター | 10,600 ~ 10,699 | 2 |
ZooKeeper | 10001 ~ 10099 | 3 |
ポートの割り当てはシンプルな直線的です。たとえば、クラスタに 2 つの Postgres ノードがある場合、最初のノードは 2 つのポートを使用するため、Consul にはポート 10300 と 10301 が割り当てられます。2 番目のノードも 2 つのポートを使用するため、Consol では 10302 と 10303 がそのノードに割り当てられます。これは、すべてのコンポーネント タイプに適用されます。
ご覧のとおり、実際のポート数はトポロジによって異なります。クラスタに 2 つの Postgres ノードがある場合、4 つのポートを開く必要があります(2 つのノードに 2 つのポートを掛けた値)。
次の点に注意してください。
- Consul プロキシは Apigee サービスと同じポートでリッスンできません。
- ポートアドレス空間は 1 つしかありません。データセンターを含むクラスタ全体で一意である必要があります。つまり、ホスト A のプロキシ A がポート 15000 をリッスンしている場合、ホスト B のプロキシ B はポート 15000 をリッスンできません。
- 使用するポートの数は、前述のようにトポロジによって異なります。
マルチ データセンター構成では、mTLS を実行するすべてのホストでポート 8302 も開く必要があります。
Apigee mTLS が使用するデフォルト ポートをカスタマイズできます。方法については、プロキシのポート範囲のカスタマイズをご覧ください。
制限事項
Apigee mTLS には次の制限があります。
- Cassandra ノード間通信を暗号化しない(ポート 7000)
- 構成と設定はべき等ではありません。つまり、1 つのノードで 1 つの変更を行う場合、すべてのノードで同じ変更を行う必要があります。システムがその変更を取得して他のノードに適用することはありません。詳細については、既存の apigee-mtls 構成を変更するをご覧ください。
用語
このセクションでは、次の用語を使用します。
用語 | 定義 |
---|---|
cluster | Edge for Private Cloud を構成するマシンのグループです。 |
Consul | Apigee mTLS で使用されるサービス メッシュ。Consul がプライベート クラウド通信を保護する方法については、Consul のセキュリティ モデルをご覧ください。 |
mTLS | 相互認証 TLS。 |
サービス メッシュ | オーバーレイ ネットワーク(またはネットワーク内のネットワーク)。 |
TLS | トランザクション レイヤのセキュリティ安全な通信を実現する業界標準の認証プロトコル。 |