ネットワークポリシーと最小権限ネットワーク
デフォルト拒否のネットワークポリシー、明示的な許可ルール、ネットワークに適用した最小権限の原則によって、コンテナ間通信を制限します。
「ネットワークポリシーと最小権限ネットワーク」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全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: 8080Egress を制限する
外向きのトラフィックも制限できます。たとえば、Pod がデータベースにだけ接続できるようにして、乗っ取られた Pod が外部の攻撃者と通信するのを防ぎます。
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: dbNamespace セレクター
namespaceSelectorでルールを照合し、信頼できる Namespace からのクロス Namespace トラフィックだけを許可できます。共有プラットフォーム Service に便利です。
from:
- namespaceSelector:
matchLabels:
team: platformDNS を許可する
よくある落とし穴があります。Egress を厳格にデフォルト拒否すると DNS もブロックされ、名前解決が機能しなくなります。kube-dns への UDP/TCP 53 番ポートを許可することを忘れないでください。
egress:
- to: []
ports:
- protocol: UDP
port: 53Kubernetes の先へ
Docker ユーザーは、関連するメリットをユーザー定義ネットワークから得られます。同じネットワーク上のコンテナだけが互いに通信できるため、無関係なアプリを分離できます。
docker network create --internal backendゼロトラストの考え方
最小権限のネットワーク設計によって、ゼロトラストに近づけます。ネットワークは敵対的なものと想定し、すべての接続を認証・認可し、デフォルトでは何も許可しません。
理解度チェック
ネットワークポリシーを始める際の、妥当な方針は何ですか。
まとめ
これで、トラフィックを安全に制限できるようになりました。
- デフォルト拒否を適用し、明示的な許可ルールを追加します
- ラベルや Namespace によってIngressとEgressの両方を制御します
- DNS の許可を忘れないでください。適用に対応した CNI が必要です
- Docker の内部ネットワークでも同様の分離を実現できます
最小権限のネットワーク設計により、侵害が発生した場合の影響範囲を小さくできます。
よくある質問
「ネットワークポリシーと最小権限ネットワーク」レッスンは無料ですか?
はい。「ネットワークポリシーと最小権限ネットワーク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「ネットワークポリシーと最小権限ネットワーク」で何を学びますか?
デフォルト拒否のネットワークポリシー、明示的な許可ルール、ネットワークに適用した最小権限の原則によって、コンテナ間通信を制限します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ネットワークポリシーと最小権限ネットワーク」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンテナイメージのセキュリティスキャン
- コンテナのランタイムセキュリティ
- Secrets管理とRBAC
- ネットワークポリシーと最小権限ネットワーク