Anthos のセキュリティ設計図: Google Cloud のクラスタにロケーション制限を適用する

このドキュメントでは、特定のリージョンでのみ使用できるようにリソースを管理する方法について説明します。ここでは、ロケーション制限を満たすことについて、その方法と必要性が生じる理由の概要、さらにこのタスクに使用する Google Cloud コントロールについて説明します。

このドキュメントは、Anthos の使用に関する規範的なガイダンスを示す一連のセキュリティ設計図の一部です。 これらのブループリントの詳細については、Anthos セキュリティ ブループリント: よくある質問をご覧ください。

はじめに

多くの企業は、地域固有の所在地の要件を満たす必要があります。つまり、サービス(多くの場合、サービスが実行されているクラスタ)は、特定の場所からのみデプロイまたはアクセスできるようにする必要があります。規制要件、レイテンシ要件、特定の国でのみサービスを提供することに関するビジネス要件など、さまざまな理由が考えられます。

地域固有の所在地の要件を満たすには、次の点を考慮する必要があります。

  • サービスを配置する必要がある場所。
  • 特定のリージョンからのサービスへのアクセスを制限する必要があるかどうか。
  • サービスが依存している Google Cloud サービス。
  • Google Cloud または GKE On-Prem で GKE を使用しているかどうか。
  • アプリ内およびアプリとの間で許可されるフローとオペレーション。

これらの問題をご理解いただければ、該当する各セキュリティ管理を地域固有の所在地の要件を満たすように構成する方法を決定できます。

必要なセキュリティ管理について

このセクションでは、要件を満たすレベルのロケーション制限を達成するために使用できるコントロールについて説明します。

Namespace

同じポリシーを使用するリソースにラベルを付ける

名前空間を使用すると、Pod、Service、レプリケーション コントローラなど、クラスタ内の関連付けられたリソースのスコープを指定できます。名前空間を使用することによって、関連付けられたリソースの管理責任を 1 つのユニットとして委任できます。したがって、名前空間はほとんどのセキュリティ パターンに不可欠です。

名前空間は、制御プレーンを分離するための重要な機能です。ただし、ノード分離、データプレーンの分離、ネットワークの分離を行うことはできません。

一般的な方法は、個別のアプリケーションの名前空間を作成することです。たとえば、アプリケーションの UI コンポーネントの Namespace myapp-frontend を作成できます。

組織のポリシー

クラスタをデプロイできるロケーションを制限する

組織ポリシー サービスは、Google 組織内でサポートされるリソースに対する制限を構成するために使用します。サポートされているリソースに対して制約を構成します。

サービスをローカルに制限する場合は、リソース ロケーション制限の制約を使用します。この制約は、ロケーション ベースの Google Cloud リソースを作成できる一連のロケーションを定義します。この制約のポリシーでは、許可または拒否する異なるロケーションを指定できます。たとえば、アジアやヨーロッパなどのマルチリージョン、us-east1europe-west1 などのリージョン、europe-west1-b などの個別のゾーンを指定できます。許可または拒否するすべてのロケーションの一覧を明示的に指定する必要があります。

Anthos Config Management

Anthos クラスタへの構成の適用

Anthos クラスタを管理する場合のおすすめの方法は、Anthos Config Management を使用することです。これにより、登録済みのクラスタが常に構成と同期されます。コンフィグリポジトリに保存されている YAML または JSON ファイルであり、これには kubectl apply コマンドを使用して手動でクラスタに適用できるものと同じタイプの構成情報が含まれています。Anthos Config Management を使用すると、policy-as-code の手法を採用することにより、ポリシーの場合と同様にポリシーとインフラストラクチャのデプロイを管理できます。

Anthos Config Management は、宣言されたポリシーの唯一の認証ソースとして機能する Git リポジトリと組み合わせて使用します。Anthos Config Management によって、RBAC、リソース割り当て、名前空間、プラットフォーム レベルでのインフラストラクチャのデプロイなどのアクセス制御ポリシーを管理できます。Anthos Config Management は宣言型です。クラスタの状態を継続的にチェックし、ポリシーを適用するために構成で宣言された状態を適用します。

マスター クラスタへのアクセス用の承認済みネットワーク

Kubernetes API サーバーにアクセスできるロケーションを制限する

承認済みネットワークを使用すると、特定の CIDR 範囲を許可(ホワイトリストに登録)し、その範囲内の IP アドレスが HTTPS を使用してクラスタ マスター エンドポイントにアクセスすることを許可できます。限定公開クラスタは外部 IP アドレスを公開せず、必要に応じて公開アクセス可能なエンドポイントなしでクラスタ マスターを実行します。

限定公開クラスタを承認済みネットワークの有効化と組み合わせて使用することを推奨する GKE 強化ガイドのガイダンスに沿って進めることをおすすめします。

クラスタタイプの選択

ユースケースに適したクラスタタイプを理解するには、リージョンとゾーン、リソースをデプロイできるロケーションについて理解する必要があります。「リージョン」は、「ゾーン」で構成された、独立した地理的エリアです。たとえば、ロンドン(europe-west2)はヨーロッパ内のリージョンであり、オレゴン(us-west1)はアメリカ大陸内のリージョンです。

「ゾーン」は、リージョン内にある Google Cloud リソースのデプロイエリアです。ゾーンは、リージョン内の単一の障害発生ドメインとみなすことができます。高可用性を備えたフォールト トレラントなアプリをデプロイするには、リージョン内の複数のゾーンにアプリをデプロイします。

リージョン内のロケーションについては、95 パーセンタイルでのラウンドトリップ ネットワーク レイテンシが 1 ミリ秒未満となる傾向が見られます。3 つのゾーンがあり asia-northeast1 リージョンに存在する東京(日本)が、ロケーションの一例です。

GKE には次の 3 種類のクラスタがあります。

  • シングルゾーン クラスタ。シングルゾーン クラスタには、1 つのゾーンで動作する 1 つのコントロール プレーン(マスター)が含まれています。このコントロール プレーンは、同じゾーンで動作するノード上のワークロードを管理します。
  • マルチゾーン クラスタ。マルチゾーン クラスタには、1 つのゾーンで動作するコントロール プレーンの 1 つのレプリカと、複数のゾーンで動作する複数のノードが含まれています。
  • リージョン クラスタ。リージョン クラスタは、単一のリージョン内の複数のゾーンにクラスタ マスターとノードを複製します。たとえば、us-east1 リージョン内のリージョン クラスタは、3 つの us-east1 ゾーン(us-east1-bus-east1-cus-east1-d)でコントロール プレーンとノードのレプリカを作成します。

可用性のニーズを満たすクラスタを選択する必要があります。たとえば、ワークロードで高可用性を必要とする場合は、リージョン クラスタを使用します。

まとめ

コントロールを統合するには、ロケーション制限の要件を決定します。次に、このガイドで説明したコントロールの範囲と、コントロールを構成する必要があるステージを次のようにマッピングします。

  1. リージョンの要件を定義します。
  2. クラスタに適したロケーションを特定します。
  3. リソース ロケーションの組織ポリシーを作成して、要件を満たすロケーションのみに GKE クラスタの作成を制限します。
  4. GKE クラスタ強化ガイドのガイダンスに従って、限定公開クラスタを作成します。クラスタを作成する際は、強化ガイドに従って --enable-network-policy フラグを使用するようにしてください。ネットワーク ポリシーは必須です。この手順により、クラスタ内の Pod 間を通過するトラフィックを制限するファイアウォール ルールを後で実装できます。
  5. 限定公開クラスタに承認済みネットワークを追加します。

ユーザーがサービスにアクセスできる場所を制限する必要がある場合は、次の手順を行います。

  • Google Cloud クラスタの GKE については、Google Cloud Armor セキュリティ ポリシーを定義して、受信トラフィックの地理的な場所に基づいてアクセス制御を適用します。上りリソースに関連付けられている各バックエンドにセキュリティ ポリシーを接続します。
  • Anthos Config Management を使用して、クラスタにアクセスできるユーザーを制限するポリシーを定義します。