Cyber Security Academy · レッスン

Podセキュリティとネットワークポリシー

ワークロードを分離します。

レッスン 3/413 ステップ

「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:5432

Network 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.yaml

Egress とメタデータのブロック

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フィードバックを取得できます。ローカル設定は不要です。

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

  1. Kubernetesの脅威モデル
  2. RBACとサービスアカウント
  3. Podセキュリティとネットワークポリシー
  4. サプライチェーンとシークレットの保護
← Cyber Security Academyに戻る