Podセキュリティとネットワークポリシー
ワークロードを分離します。
「Podセキュリティとネットワークポリシー」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
ワークロードの分離
侵害された Pod の行動を制限する制御は2つあります。Pod Security は Pod の権限を制限し、Network Policies は相互に通信できる Pod を制限します。これらを組み合わせることで、被害の拡大範囲を抑えられます。
- Pod Security はノードへの脱出を防ぎます。
- Network Policies は Pod 間の横方向の移動を防ぎます。
危険な Pod 設定
許可するとリスクを大幅に高める Pod spec フィールドがいくつかあります。
privileged: trueはホストに近いアクセス権限を付与します。hostPID、hostNetwork、hostIPCは namespace の分離を破ります。hostPathボリュームはノードのディレクトリをマウントします。SYS_ADMINのような追加 capability は脱出を可能にします。- root として実行します(
runAsUser: 0)。
Pod Security Admission
Pod Security Admission(PSA)は PodSecurityPolicy に置き換わる機能です。namespace ごとに3つの組み込み標準を適用します。
- Privileged:制限なし(ワークロードでは避けます)。
- Baseline:既知の権限昇格をブロックします。
- Restricted:強化されたベストプラクティスです(root 以外で実行、権限付与なし、capability を削除)。
# Enforce the restricted standard on a namespace
kubectl label namespace prod \
pod-security.kubernetes.io/enforce=restricted強化された securityContext
securityContext を使用して、Pod とコンテナのレベルで最小権限を定義します。
- root 以外のユーザーで実行し、root ファイルシステムを読み取り専用にします。
- Linux capability をすべて削除し、必要なものだけを追加します。
- 権限昇格を禁止します。
# securityContext fields (YAML)
# runAsNonRoot: true
# readOnlyRootFilesystem: true
# allowPrivilegeEscalation: false
# capabilities: drop: [ALL]
kubectl apply -f hardened-deploy.yaml標準を超えたポリシーエンジン
PSA よりも柔軟なルールが必要な場合は、admission controller によってカスタムポリシーを適用します。
- OPA Gatekeeper は Rego の制約を評価します。
- Kyverno は YAML ポリシーを使用し、変更と検証の両方を実行できます。
これらを使うと、hostPath の禁止、署名済みイメージの必須化、クラスタ全体でのラベルの適用などが可能です。
# Apply a Kyverno policy that disallows privileged pods
kubectl apply -f disallow-privileged.yamlデフォルトでオープンなネットワーク
デフォルトでは、すべての namespace にまたがって、すべての Pod が他のすべての Pod に到達できます。Network Policies を追加するまで、ネットワークは分離されません。このフラットなネットワークがあるため、1つの侵害された Pod からクラスタ全体をスキャンして攻撃できます。
# From a pod, the flat network lets you reach any service
curl http://internal-db.prod.svc.cluster.local:5432Network Policy の基本
Network Policies は namespace 単位のルールであり、Pod を選択して特定の ingress と egress を許可します。これらは追加的に適用されます。Pod にいずれかのポリシーを適用すると、対象となる方向では default-deny に切り替わります。
- Selector はラベルによって Pod を照合します。
- ルールによって、特定の Pod、namespace、CIDR からの、またはそれらへのトラフィックを許可します。
- ポリシーをサポートする CNI(Calico、Cilium)が必要です。
default-deny の後に許可
推奨されるパターンは、namespace ごとに default-deny の基盤を設定し、その後、必要な通信フローに対して明示的な許可ルールを追加することです。
# Default-deny all ingress in a namespace (YAML)
# kind: NetworkPolicy spec: podSelector: {} policyTypes: [Ingress]
kubectl apply -f default-deny.yaml
# Then allow only frontend -> backend
kubectl apply -f allow-frontend.yamlEgress とメタデータのブロック
Egress ポリシーは ingress ポリシーと同じくらい重要です。
- Pod が到達できる外部エンドポイントを制限します(情報流出と C2 通信を抑制します)。
- クラウドのメタデータ IP
169.254.169.254への Pod からの通信をブロックし、ノードの認証情報の窃取を防ぎます。 - DNS と内部の east-west トラフィックを制限します。
ランタイム防御
静的ポリシーをランタイム検知で補完します。
- Falco は不審な syscall(コンテナ内の shell、機密性の高いマウント)を検知してアラートを出します。
- seccomp プロファイルは、コンテナが実行できる syscall を制限します。
- AppArmor/SELinux はノード上で強制アクセス制御を追加します。
# Apply the runtime/default seccomp profile (securityContext)
# seccompProfile: type: RuntimeDefault
kubectl apply -f seccomp-deploy.yaml分離のテスト
封じ込めを検証する際は、テスト用 Pod から Pod 間の接続と脱出に利用できるプリミティブを試し、ポリシーによってブロックされることを確認します。管理された namespace で実施し、終了後にテスト用 Pod を削除します。
privileged で実行されている Pod や default-deny が設定されていない namespace を、正確なマニフェスト修正とともに報告します。
クイックチェック
分離に関する知識を確認します。
まとめ
ワークロードを分離する方法を学びました。
- Pod Security Admission(restricted)と securityContext によって脱出を防ぎます。
- Gatekeeper/Kyverno によってカスタム admission ポリシーを適用します。
- ネットワークはデフォルトでオープンなので、default-deny を設定してから明示的な許可を追加します。
- Egress ルール、メタデータのブロック、Falco によって防御を強化します。
次は、サプライチェーンと Secrets の保護です。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「Podセキュリティとネットワークポリシー」レッスンは無料ですか?
はい。「Podセキュリティとネットワークポリシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「Podセキュリティとネットワークポリシー」で何を学びますか?
ワークロードを分離します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Podセキュリティとネットワークポリシー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Kubernetesの脅威モデル
- RBACとサービスアカウント
- Podセキュリティとネットワークポリシー
- サプライチェーンとシークレットの保護