この記事では、ラベルの標準とKubernetes セキュリティのベスト プラクティスについて説明します。これは、組織がセキュリティ要件を満たすために必要な一連のラベルを定義するのに苦労している共通の領域です。私のアドバイスは、常に企業のセキュリティとコンプライアンスの要件を達成できる階層的なセキュリティ設計から始めて、設計に合わせてラベル標準を定義することです。

オピス

これは、すべてのラベル要件の包括的なガイドではなく、特定のセキュリティ要件を満たすために独自のラベル標準を開発するためのフレームワークです。

ネットワーク ポリシーの Kubernetes ラベル

ラベルは、ユーザーにとって直感的で、インベントリ レポートやインテントの適用などの特定の目的に必要な属性を識別するために Kubernetes オブジェクトにアタッチされるキーと値のペアです。

ラベル分類

Kubernetes ネットワーク ポリシーは、意図したエンドポイントに一致するラベルを使用して、ポッドにセキュリティ コントロールを適用する意図を表しています。ラベル接頭辞は、ラベル分類を識別するために使用できます。次の短いリストは、Kubernetes ネットワーク ポリシーの設計を開発するために必要なエンドポイントの高レベルの分類です。

  • マルチテナント
  • アプリケーションのマイクロセグメンテーション
  • 外部エンドポイント
  • ホストエンドポイント

ラベルの範囲

ネットワーク ポリシーの定義に必要なラベルには、次のスコープを含めることができます。

  • 名前空間: マルチテナンシー コントロールを定義するために使用できます。ロールベースのアクセス制御 (RBAC) を使用して名前空間の作成または変更を制限し、高レベルのマルチテナント制御への準拠を確保できます。
  • Pod : 1 つまたは複数の名前空間のコンテキスト内でアプリケーションのマイクロセグメンテーション コントロールを定義するために使用できます。
  • Networkset :特定の名前空間内の Pod によってアクセスされる、または Pod へのアクセスを必要とするクラスターの外部のエンドポイントを定義するために使用されるCalico名前空間付きリソース。
  • GlobalNetworkset : クラスターの外部にあるエンドポイントを定義するための Calico グローバル リソースで、任意の名前空間のPodによってアクセスされるか、 Podへのアクセスが必要になります。

予約済みラベルキー

通常、クラスターの整合性に不可欠な特定のラベル キーの使用を制限する必要があります。Webhook を変更または検証することで、実行時またはCI/CD パイプラインで制限を実装できます。予約が必要なラベルの例を次に示します。

  • *kubernetes*: Kubernetes ノード用に予約済み
  • *tigera* および *calico*: Calico コンポーネント用に予約済み
  • Kubernetes ディストリビューションまたは管理 Kubernetes 環境のプラットフォーム アプリケーションまたはホストのその他の識別子

マルチテナント ラベル

マルチテナント ラベルを使用して、特定のテナントに属するエンドポイント、または共有サービスの場合は複数のテナントを識別することができます。これらのエンドポイントは、East-West または North-South テナント制御を定義するためのネットワーク ポリシーで選択できます。ポッドと名前空間の両方にマルチテナント ラベルをアタッチすることをお勧めします。エンタープライズ アーキテクチャに応じて、テナントの定義には次のいずれかが含まれる場合があります。

  • 事業単位
  • 開発チーム
  • 応用
  • クライアント
  • シェアードサービス
  • 環境
  • コンプライアンス
  • 資産分類

マルチテナント ラベルの典型的な標準:

  • sec.<organization_domain>/tenant-id: <tenant-uid>
  • sec.<organization_domain>/environment: <dev|test|prod>
  • sec.<organization_domain>/compliance: <compliance-requirement-uid>

ノート:

  • sec: セキュリティを表し、マルチテナントに必要なラベルを識別するプレフィックス
  • tenant-uid: 環境内のテナントの一意の識別子 (例: sec.tigera.io/tenant-id:tigera-customer-success-dev)
  • Compliance-requirement-uid: 特定のコンプライアンス環境の一意の識別子 (例: sec.tigera.io/compliance: pci-dss-marketplace)

アプリケーションのマイクロセグメンテーション ラベル

アプリケーションのマイクロセグメンテーション ラベルを使用して、特定のアプリケーションのマイクロサービスをバッキングするエンドポイントを識別できます。これらのエンドポイントは、マイクロサービス通信の東西および南北の制御を定義するためのネットワーク ポリシーで選択できます。

通常、名前空間ごとに 1 つのアプリケーションに従うデプロイ モデルは、ほとんどの顧客の要件に適合します。ただし、共有サービスは通常、複数のテナントからアクセスできるように独自の名前空間にデプロイする必要があります。アプリケーションのマイクロセグメンテーション ラベルをポッドに添付することをお勧めします。

アプリケーション アーキテクチャに応じて、アプリケーションのマイクロ セグメンテーション ラベルには次のいずれかが含まれる場合があります。

  • 応用
  • サービス
  • アプリケーション層
  • バージョン

アプリケーションのマイクロセグメンテーション ラベルの典型的な標準:

  • app.<organization_domain>/name: <app-uid>
  • app.<organization_domain>/instance: <app-instance-uid>
  • app.<organization_domain>/version: <app-version>
  • app.<organization_domain>/service: <svc-uid>
  • app.<organization_domain>/tier: <app-tier>

外部エンドポイントのラベル

外部エンドポイント ラベルを使用して、クラスターの外部のエンドポイントを識別できます。その後、それらのエンドポイントをネットワーク ポリシーで選択して、クラスター エンドポイントとの間の送信および受信通信の North-South 制御を定義できます。

イングレス
  • 公開されたサービスについては、テナントの信頼できるロード バランサーから
  • レガシー インフラストラクチャの信頼できるサブネットから
  • 信頼できるパートナーから
下り
  • レガシー インフラストラクチャのサービスへ
  • 信頼できる外部APIサービスへ
  • 信頼できるリポジトリへ
  • 信頼のファブリックサービスへ

外部エンドポイント ラベルの典型的な標準:

  • eep.<organization_domain>/ingress-lb: <tenant-id-load-balancer>
  • eep.<organization_domain>/egress-api: <tenant-id-api>
  • eep.<organization_domain>/egress-db: <tenant-id-db>
  • eep.<organization_domain>/egress-repo: <tenant-id-repo>

注意:

  • eep: 外部エンドポイントを識別するプレフィックス

ホスト エンドポイント ラベル

ホスト エンドポイント ラベルを使用して、クラスター ホストまたは外部ホストを識別できます。これらのエンドポイントは、次の制御を定義するためにネットワーク ポリシーで選択できます。

  • クラスター ホスト: ホスト間、ポッド間、およびホスト ネットワーク通信を使用するポッドの南北および東西の制御。これは、クラスターの強化と、コントロール プレーンと管理プレーンの制御を実装するために必要です。
  • 外部ホスト: ベア メタルまたは仮想マシンでホストされているホストおよびレガシー アプリケーションの North-South および East-West 制御。これは、統合または移行のシナリオでクラウド ネイティブの制御をレガシー ホストに拡張する場合に効果的です。

Kubernetes ディストリビューションとクラスター内のノードの役割に応じて、ホスト エンドポイント ラベルには次のいずれかが含まれる場合があります。

  • Kubernetes ノードの役割
  • ホスト機能
  • 建築
  • オペレーティング・システム
  • 領域
  • データセンター
  • ラック
  • 親和性基準

外部ホスト エンドポイント ラベルには、マルチテナンシー、アプリケーション マイクロセグメンテーション、およびホストされたレガシー サービスを保護するために適切な上記のホスト エンドポイント ラベルのいずれかが含まれる場合があります。

ホスト エンドポイント ラベルの典型的な例。その一部は、Kubernetes ディストリビューションにネイティブにすることができます。

  • kubernetes.io/arch: amd64
  • kubernetes.io/os: Linux
  • node-role.kubernetes.io/worker: true
  • node-role.kubernetes.io/egress-gateway: true
  • topology.kubernetes.io/地域: ca-central-1
  • topology.kubernetes.io/zone: ca-central-1a

ベストプラクティス

  • 組織内でラベル標準を開発し、伝達します。
  • 組織のセキュリティとコンプライアンスの目標を達成する階層設計に従って、セキュリティ コントロールのラベルを定義します。
  • ラベル定義で直感的な言語を使用して、ラベル付けされた Kubernetes オブジェクトをすばやく簡単に識別できるようにします。
  • ラベル キーのプレフィックスとサフィックスを使用して、資産分類に必要な属性を識別します。
  • CI/CD パイプラインまたは実行時にラベル ガバナンス チェックを実装することにより、適切なラベルが Kubernetes オブジェクトに適用されていることを確認します。
  • 組織内のさまざまな利害関係者の展開、レポート、およびセキュリティ要件を満たす包括的なラベル セットを開発します。
  • ラベルの使用を乱用しないでください。ラベルは、特定の明示的な目的を達成するために定義する必要があります。

コメントをどうぞ