第15章 Skupper ポリシーを使用したサービスネットワークの保護
デフォルトでは、Skupper には、サイト間のすべてのサービスネットワーク通信に相互 TLS を使用するなど、多くのセキュリティー機能が含まれています。Skupper ポリシー CRD をインストールして、セキュリティー機能を追加できます。デフォルトでは、Skupper ポリシー CRD をクラスターに適用すると、そのクラスターとの間のすべてのサービスネットワーク通信が阻止されます。必要なサービスネットワーク通信のみを許可するには、Skupper ポリシー CR を詳細に指定します。
Skupper ポリシーは、Skupper CLI の使用 で説明されているように、Skupper サービスへのアクセスを現在の namespace に制限する network-policy
オプションである Kubernetes ネットワークポリシーとは異なります。
サービスネットワーク内の各サイトには、Skupper ルーターを実行し、プライベートな専用認証局 (CA) があります。サイト間の通信は相互 TLS で保護されているため、サービスネットワークは外部アクセスから分離され、横方向の攻撃、マルウェアの侵入、データの漏えいなどのセキュリティーリスクを防ぎます。Skupper ポリシーのセットは、クラスターレベルで別のレイヤーを追加して、クラスター管理者がサービスネットワークへのアクセスを制御できるようにします。
このガイドは、次の Skupper の概念を理解していることを前提としています。
- サイト
- Skupper がインストールされている namespace。
- token
- 2 つのサイト間のリンクを確立するには、トークンが必要。
- サービスネットワーク
- Skupper を使用してサービスを公開した後、サービスネットワークを作成している。
15.1. Skupper ポリシーについて
クラスター管理者は、Skupper ポリシーのカスタムリソース定義 (CRD) をインストールした後、開発者 がサービスネットワーク上でサービスを作成および使用できるように、1 つ以上のポリシーを設定する必要があります。
このガイドでは、開発者とは、namespace にアクセスできるが管理者権限を持たないクラスターのユーザーを指します。
クラスター管理者は、カスタムリソース (CR) を使用して、次の 1 つ以上の項目を設定して通信を有効にします。
- 入力リンクを許可する
-
allowIncomingLinks
を使用して、開発者がトークンを作成し、入力リンクを設定できるようにします。 - 特定のホストへの出力リンクを許可する
-
allowedOutgoingLinksHostnames
を使用して、開発者がリンクを作成できるホストを指定します。 - サービスを許可する
-
allowedServices
を使用して、開発者がサービスネットワーク上で作成または使用できるサービスを指定します。 - リソースの公開を許可する
-
allowedExposedResources
を使用して、開発者がサービスネットワーク上で公開できるリソースを指定します。
クラスター管理者は、各ポリシー CR 設定を 1 つ以上の namespace に適用できます。
たとえば、次のポリシー CR は、以下を除くすべての namespace ですべての Skupper 機能を完全に許可します。
-
.example.com
で終わるドメインへの出力リンクのみを許可します。 - 'deployment/nginx' リソースのみをサービスネットワークに公開できます。
apiVersion: skupper.io/v1alpha1 kind: SkupperClusterPolicy metadata: name: cluster-policy-sample-01 spec: namespaces: - "*" allowIncomingLinks: true allowedExposedResources: - "deployment/nginx" allowedOutgoingLinksHostnames: [".*\.example.com$"] allowedServices: - "*"
多くのポリシー CR を適用でき、許可された項目に競合がある場合は、最も許容度の高いポリシーが適用されます。たとえば、allowedOutgoingLinksHostnames: []
という行を含む追加のポリシー CR を適用する場合は、ホスト名をリストしない場合でも、元の CR で許可されているため、*.example.com
への出力リンクは許可されます。
namespaces
- このポリシーが適用される namespace を指定するための 1 つ以上のパターン。ラベルセレクター を使用して namespace を一致させることができることに注意してください。
allowIncomingLinks
-
他のサイトが指定された namespace へのリンクを作成できるようにするには、
true
を指定します。 allowedOutgoingLinksHostnames
- 1 つ以上のパターンを指定して、指定したネームスペースからリンクを作成できるホストを決定します。
allowedServices
- 1 つ以上のパターンを指定して、指定された namespace からサービスネットワークで許可されるサービスの許可される名前を決定します。
allowedExposedResources
- 指定された namespace から、サービストワークで許可されているリソースの 1 つ以上の許可された名前を指定します。パターンはサポートされていないことに注意してください。
正規表現を使用して、パターンの一致を作成します。次に例を示します。
-
.*\.com$
は、.com
で終わる任意の文字列に一致します。YAML の問題を回避するには、二重の円記号が必要です。 -
^abc$
は文字列abc
と一致します。
特定の namespace への送信リンクを許可する別の Skupper ポリシー CR を作成すると、ユーザーはその namespace からリンクを作成してサービスネットワークに参加できます。つまり、複数のポリシー CR のロジックは OR
です。単一のポリシー CR で操作が許可されている場合、操作は許可されます。