翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Beanstalk クラスター環境のマルチテナンシー
同じサブネットを使用する Beanstalk クラスター環境は、同じ Amazon EKS クラスターで実行されるため、コンピューティングインフラストラクチャを共有します。Elastic Beanstalk はその共有クラスターでそれらを分離します。各環境のアプリケーションはクラスターの独自のパーティションで実行され、Elastic Beanstalk はデフォルトで環境間のネットワークトラフィックをブロックします。このトピックでは、取得する分離、拡張または強化する方法、共有クラスターが満たすことができない要件について説明します。
Beanstalk クラスター環境間の分離には、2 つの独立したディメンションがあります。ネットワーク分離は、環境のアプリケーションにトラフィックを送信できる環境を制御します。コンピューティング分離は、環境のアプリケーションレプリカがノードを他の環境と共有するかどうかを制御します。どちらか一方をもう一方なしで設定できます。
分離境界の選択
環境を作成する前に必要な境界の強度を決定します。これは、割り当てたサブネットを介して選択され、既存の環境のサブネットを変更できないためです。2 つの境界が利用可能で、Amazon EKS がドキュメント化する 2 つのマルチテナンシーモデルに対応しています。
| 境界 | 取得方法 | 分離するもの |
|---|---|---|
| 共有クラスター (ソフトマルチテナンシー) | 同じサブネットのセットを使用して環境を作成します。これは、環境が VPC 設定を共有する場合のデフォルトです。 | 各環境のアプリケーションは、デフォルトでブロックされた環境間のネットワークトラフィックを使用して、クラスターの独自のパーティションで実行されます。環境はクラスター自体を共有し、専用ノードを設定しない限りノードを共有します。 |
| クラスターを分離する (ハードマルチテナンシー) | サブネットのセットが異なる環境を作成します。次に、Elastic Beanstalk はセットごとに個別のクラスターを作成します。 | 何も共有されません。個別のクラスターには個別のコントロールプレーン、個別のノードがあり、それらで実行されているアプリケーション間のネットワークパスはありません。 |
共有クラスターは環境間の論理的な分離を提供し、Elastic Beanstalk がクラスターに適用する設定によって強制されます。別のクラスターを使用すると、インフラストラクチャを分離できます。Amazon EKS は、ノードにアクセスしたワークロードが、そのノードで実行されている他のすべての認証情報とデータに到達する可能性があるため、クラスターを強力なセキュリティ境界を提供するコンストラクトとして文書化します。クラスター内の論理分離はソフトマルチテナンシーで、各テナントのクラスターはハードマルチテナンシーです。これを反映する一般的なガイダンスについては、「Amazon EKS ベストプラクティスガイド」の「テナント分離」を参照してください。
重要
環境がインフラストラクチャを共有してはならないワークロードを実行する場合は、個別のサブネットセット、つまり個別のクラスターを使用します。例としては、ビジネスのさまざまなエンドユーザーに属する環境、制御しないコードを実行する環境、インフラストラクチャの分離を必要とするコンプライアンス体制の範囲内の環境などがあります。このトピックの残りの部分で説明するコントロールは、共有クラスター上の環境を分離しますが、共有クラスターは個別のクラスターと同等にしません。
各クラスターは個別に請求され、ノードをクラスター間で共有することはできないため、クラスターを分離するとコストが高くなり、容量の使用効率が低下します。共有クラスターは、単一のアプリケーションを構成するサービスなど、1 つのチームが所有し、一緒に運用する環境に適しています。本番環境と開発を分離することは、何も必要としない場合でも、異なるサブネットセットを使用する一般的な理由です。Elastic Beanstalk が環境をクラスターにグループ化する方法については、「」を参照してください環境のグループ化。サブネット設定自体については、「」を参照してくださいBeanstalk クラスター環境のネットワークの設定。
共有クラスターでのネットワーク分離
Elastic Beanstalk は、デフォルトで共有クラスター上の Beanstalk クラスター環境間のネットワークトラフィックをブロックします。これを取得するための設定は必要なく、オフにするオプションもありません。環境のアプリケーションレプリカは、このセクションのオプションのいずれかで許可しない限り、どのポートでも別の環境のアプリケーションコピーからトラフィックを受信できません。
Elastic Beanstalk では、独自の運用コンポーネントがアプリケーションに到達できるため、ヘルスレポート、ログ収集、メトリクスベースのスケーリングが引き続き機能します。
ロードバランサーを介して環境に到達するトラフィックは影響を受けません。ブロックは、ある環境のアプリケーションレプリカから別の環境の に直接送信されるトラフィックに適用され、クラスター外から到着するトラフィックには適用されません。Application Load Balancer を介してアプリケーションに到達するリクエストは、別の環境がそのロードバランサーのパブリックエンドポイントに送信するリクエストを含め、正常に配信されます。
環境が通信することを許可する
aws:elasticbeanstalk:eks:environment 名前空間の 3 つのオプションは、共有クラスター上の環境間のトラフィックを許可します。各 はカンマ区切りのリストを取得します。名前は a-z、A-Z、、および 文字に制限されています-。文字で始まり0-9、4~40 文字の長さである必要があります。これらを変更しても、環境は中断されません。
| オプション | 効果 | 次の場合に使用します。 |
|---|---|---|
ingress-groups |
環境を 1 つ以上の名前付きグループに結合します。グループ内のすべての環境は、そのグループ内の他のすべての環境に双方向でトラフィックを送信できます。環境は複数のグループに属することができます。 | 1 つのアプリケーションのサービスなど、一連の環境はすべて相互に呼び出す必要があります。 |
ingress-allowlist-environments |
名前付き環境がこの環境にトラフィックを送信できるようにします。アクセス許可は 1 つの方法です。ここで環境の名前を付けると、この環境では呼び出されません。 | 環境は、他の特定の環境が呼び出す内部 API を提供します。 |
ingress-allowlist-groups |
名前付きグループ内のすべての環境が、それらのグループに参加せずに、1 つの方法でこの環境にトラフィックを送信できるようにします。 | 環境は、すでにグループを共有している発信者のセットを提供し、見返りとしてそれらにアクセスすることはできません。 |
グループに参加するingress-groups各環境に を設定します。グループメンバーシップは 1 か所から設定されません。グループをそのingress-groups値から削除するか、環境を終了すると、環境はグループを離れます。トラフィックを受信する環境の許可リストオプションを設定し、許可する発信者に名前を付けます。
2 つのメカニズムが組み合わされています。環境は、ピアとして連携するサービスのグループに参加し、一方の方法で到達する必要がある発信者を個別に許可リストに登録できます。環境で設定オプションを設定する方法については、「」を参照してください設定オプション。
トラフィックを許可しても、検出は設定されません。アプリケーションは、環境プロパティを介して他の設定を指定するのと同じ方法で、呼び出すアドレスを知る必要があります。Elastic Beanstalk は、許可する環境のアドレスを挿入しません。
環境の専用ノード
デフォルトでは、Elastic Beanstalk は任意の環境のアプリケーションレプリカをクラスターの共有ノード容量にスケジュールするため、異なる環境からのコピーを同じノードで実行できます。他の環境が使用していないノードで環境のアプリケーションレプリカを保持するには、aws:elasticbeanstalk:eks:environment名前空間の node-poolオプションを任意の名前に設定します。
次に、Elastic Beanstalk はその名前の一連のノードを予約し、同じnode-pool値を持つ環境からのアプリケーションレプリカのみをスケジュールします。値を設定しない環境、または別の値をそれらのノードに配置することはできません。
重要
node-pool 値を共有する環境は、ノードを相互に共有します。他に何も使用しない単一の環境ノードを指定するには、他の環境が使用しない値を指定します。
を変更すると、Elastic Beanstalk が正しいノードに再スケジュールできるように、環境のアプリケーションレプリカがnode-pool再起動されます。専用ノードは、環境が同じノードの CPU とメモリに対して競合しなくなるため、ある環境のリソース使用が別の環境に与える影響も軽減されます。専用ノードはネットワーク分離とは無関係です。環境は別々のノードで実行できますが、通信を許可したり、ノードを共有したり、通信をブロックしたりできます。
特にノード容量に関する要件node-poolを予約します。環境を互いに分離することを目標とする場合、異なるサブネットを指定する方が簡単で、クラスターとノードを分離できます。
共有クラスターが分離しないもの
異なるセキュリティ要件またはコンプライアンス要件を持つ環境を同じクラスターに配置する前に、これらの制限を理解してください。それぞれがクラスターを共有する環境の結果であり、Elastic Beanstalk が個別のクラスターを作成できるように環境ごとに異なるサブネットを提供することで、それぞれが削除されます。
-
アウトバウンドトラフィックは制限されません。デフォルトの分離は、環境に到着するトラフィックをブロックします。環境のアプリケーションがトラフィックを送信できる場所を制限しません。アプリケーションは、インターネットやその他の AWS サービスを含む、ネットワーク設定とその IAM アクセス許可が許可する任意の宛先に到達できます。Beanstalk クラスター環境からのアウトバウンドトラフィックを制限するオプションはありません。
-
クラスターのコントロールプレーンが共有されます。クラスター上のすべての環境は 1 つの Amazon EKS コントロールプレーンによって提供され、その Kubernetes バージョンはクラスターの存続期間中固定されます。Elastic Beanstalk はコントロールプレーンを操作し、設定しませんが、環境ごとに複製されません。
-
専用ノードを設定しない限り、ノードは共有されます。がない場合
node-pool、異なる環境のアプリケーションレプリカは同じノードで実行され、同じ CPU とメモリで描画されます。Elastic Beanstalk は、環境ごとにノード容量を予約しません。 -
クラスター全体の障害は、クラスター上のすべての環境に影響します。インフラストラクチャが想定された設定と一致しなくなったために Elastic Beanstalk がクラスターの管理を停止した場合、ドリフトが解決されるまで、そのクラスター上のすべての環境の更新は失敗します。復旧は環境ごとではなくクラスターごとです。復旧の原因となった変更を元に戻すと、Elastic Beanstalk はクラスターとそのすべての環境の管理を再開します。「クラスター設定ドリフト」を参照してください。
アプリケーションレベルの保護は、どちらの境界でもお客様の責任となります。環境間のネットワーク分離では、発信者の認証、環境間のトラフィックの暗号化、アプリケーションが保持する認証情報による処理の制限は行われません。各環境に独自のアプリケーションロールを割り当てて、アクセス AWS 許可の範囲を限定し、環境間の許可されたトラフィックを、アプリケーションが引き続き許可する必要があるトラフィックとして扱います。「アプリケーションのアクセス許可」を参照してください。
要件とコントロールの一致
| 要件 | コントロール |
|---|---|
| 環境はインフラストラクチャを共有してはいけません | 異なるサブネットのセットを使用して作成し、Elastic Beanstalk がそれぞれに個別のクラスターを作成します。環境を作成する前にこれを決定します。後でサブネットを変更することはできません。 |
| 環境はネットワーク経由で相互に到達してはいけません | 設定がありません。これは、共有クラスターのデフォルトです。 |
| 一連の環境は相互に呼び出す必要があります | をそれぞれの同じグループ名ingress-groupsに設定します。 |
| 1 つの環境は特定の環境からの呼び出しを受け入れる必要がありますが、その逆は受け付けないでください。 | トラフィックを受信する環境ではingress-allowlist-groups、、ingress-allowlist-environmentsまたは を設定します。 |
| 環境のアプリケーションレプリカは、他の環境とノードを共有してはいけません。 | 他の環境が使用しない値node-poolに設定します。 |
| 環境のアウトバウンドトラフィックを制限する必要があります | 設定オプションでは利用できません。アプリケーションで制限するか、環境に割り当てるサブネットのネットワーク設定を通じて制限します。 |