0Pricing
Docker & DevOps Fundamentals · レッスン

ネットワークポリシーと最小権限ネットワーク

デフォルト拒否のネットワークポリシー、明示的な許可ルール、ネットワークに適用した最小権限の原則によって、コンテナ間通信を制限します。

「ネットワークポリシーと最小権限ネットワーク」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。

デフォルトで許可するのは危険です

デフォルトでは、クラスター内のコンテナは通常、ほかのすべてのコンテナと通信できます。そのため、侵害された Pod がデータベースや内部 Service に自由にアクセスできてしまいます。ネットワークポリシーでその経路を閉じます。

ネットワークにも最小権限を適用する

最小権限の原則はトラフィックにも適用されます。Service は本当に必要な接続だけを受け入れ、確立するべきであり、それ以上は許可しません。

NetworkPolicy とは

NetworkPolicyは、ラベルで Pod を選択し、許可する Ingress および Egress トラフィックを指定する Kubernetes オブジェクトです。CNI プラグイン(Calico、Cilium)がこのポリシーを適用します。

適用に対応した CNI が必要です

Ingress にコントローラーが必要なのと同じように、NetworkPolicy には対応する CNI が必要です。ポリシーを無視するプラグイン上では、ルールは何の効果も示さず、問題にも気付きにくくなります。

Ingress をデフォルト拒否にする

まず Namespace への受信トラフィックをすべて拒否し、必要なものだけを許可します。空の podSelector はすべての Pod に一致します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

特定のトラフィックだけを許可する

次に、フロントエンドの Pod だけがポート8080で API にアクセスできるようにします。それ以外はすべてブロックされたままです。

spec:
  podSelector:
    matchLabels:
      app: api
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - port: 8080

Egress を制限する

外向きのトラフィックも制限できます。たとえば、Pod がデータベースにだけ接続できるようにして、乗っ取られた Pod が外部の攻撃者と通信するのを防ぎます。

spec:
  podSelector:
    matchLabels:
      app: api
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: db

Namespace セレクター

namespaceSelectorでルールを照合し、信頼できる Namespace からのクロス Namespace トラフィックだけを許可できます。共有プラットフォーム Service に便利です。

from:
- namespaceSelector:
    matchLabels:
      team: platform

DNS を許可する

よくある落とし穴があります。Egress を厳格にデフォルト拒否すると DNS もブロックされ、名前解決が機能しなくなります。kube-dns への UDP/TCP 53 番ポートを許可することを忘れないでください。

egress:
- to: []
  ports:
  - protocol: UDP
    port: 53

Kubernetes の先へ

Docker ユーザーは、関連するメリットをユーザー定義ネットワークから得られます。同じネットワーク上のコンテナだけが互いに通信できるため、無関係なアプリを分離できます。

docker network create --internal backend

ゼロトラストの考え方

最小権限のネットワーク設計によって、ゼロトラストに近づけます。ネットワークは敵対的なものと想定し、すべての接続を認証・認可し、デフォルトでは何も許可しません。

理解度チェック

ネットワークポリシーを始める際の、妥当な方針は何ですか。

まとめ

これで、トラフィックを安全に制限できるようになりました。

  • デフォルト拒否を適用し、明示的な許可ルールを追加します
  • ラベルや Namespace によってIngressとEgressの両方を制御します
  • DNS の許可を忘れないでください。適用に対応した CNI が必要です
  • Docker の内部ネットワークでも同様の分離を実現できます

最小権限のネットワーク設計により、侵害が発生した場合の影響範囲を小さくできます。

よくある質問

「ネットワークポリシーと最小権限ネットワーク」レッスンは無料ですか?

はい。「ネットワークポリシーと最小権限ネットワーク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。

「ネットワークポリシーと最小権限ネットワーク」で何を学びますか?

デフォルト拒否のネットワークポリシー、明示的な許可ルール、ネットワークに適用した最小権限の原則によって、コンテナ間通信を制限します。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ネットワークポリシーと最小権限ネットワーク」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?

はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. コンテナイメージのセキュリティスキャン
  2. コンテナのランタイムセキュリティ
  3. Secrets管理とRBAC
  4. ネットワークポリシーと最小権限ネットワーク
← Docker & DevOps Fundamentalsに戻る