Kubernetesにおいて、Podはアプリケーションが実行される最小単位です。しかし、もしPodがホストノード(Host Node)の重要な情報にアクセスしたり、他のPodに影響を与えたりする可能性があるとしたら、それは大きなセキュリティ脅威となり得ますよね? 💣
このような脅威を防ぐため、KubernetesはPodセキュリティ標準を定義し、Podが作成される際に特定のセキュリティ要件を満たすように強制します。これにより、クラスター全体のセキュリティレベルを向上させることができます。

Podセキュリティ標準の3つのレベル 🛡️
Podセキュリティ標準は3つのレベルに分かれています。各レベルは許可する権限の範囲が異なり、privilegedが最も許容的で、restrictedが最も厳格です。
- Privileged (特権): 最も許容的なポリシーです。既知のすべての権限昇格を許可し、ほぼすべてのPodを実行できます。システムレベルのワークロードを管理するなど、特別な場合にのみ使用すべきです。
- Baseline (基準): 中間レベルのポリシーです。既知の権限昇格を防ぎ、ほとんどの一般的なアプリケーションに推奨されます。厳格ではありますが、過度に制限的ではない、合理的なデフォルト値と考えてください。✅
- Restricted (制限): 最も厳格なポリシーです。Podの強化(hardening)のベストプラクティスに従い、セキュリティが非常に重要なワークロードに適しています。このレベルを使用すると、一部のアプリケーションが正しく実行されない可能性があるため、適用前に十分なテストが必要です。🔒
クラスターとネームスペースへの適用 🚀
Podセキュリティ標準は、クラスター全体に適用することも、特定のネームスペースにのみ選択的に適用することもできます。
ネームスペースレベルでの適用
特定のネームスペースにのみPodセキュリティ標準を適用したい場合は、ネームスペースの
ラベル(label)
を使用すればよいです。本当に簡単です!
例えば、my-namespaceというネームスペースにbaselineポリシーを適用したい場合は、次のコマンドを実行します。
kubectl label --overwrite ns my-namespace pod-security.kubernetes.io/enforce=baseline
このようにラベルを設定すると、my-namespaceに作成されるすべてのPodはbaselineポリシーを通過しなければなりません。もしポリシーに違反するPodを作成しようとすると、APIサーバーが作成を拒否します。🙅♀️
ネームスペースのラベルは、次の3つのモード(mode)を持つことができます。
- enforce: ポリシーに違反するPodの作成をブロックします。
- audit: ポリシーに違反するPodが作成されたときに警告ログを残します。(作成は許可)
- warn: ポリシーに違反するPodが作成されたときにユーザーに警告メッセージを表示します。(作成は許可)
例えば、enforceをbaselineに、warnをrestrictedに設定することで、段階的にセキュリティレベルを上げていくことができます。
kubectl label --overwrite ns my-namespace pod-security.kubernetes.io/enforce=baseline pod-security.kubernetes.io/warn=restricted
###
クラスターレベルでの適用
クラスター全体にデフォルトでPodセキュリティ標準を適用したい場合は、Admission Controllerの設定を変更する必要があります。これは、クラスターを最初に設定したり管理したりする際によく使われる方法です。
PodSecurityアドミッションコントローラーの設定ファイルに、次のようにクラスター全体に適用するデフォルトポリシーを定義できます。
# admission-configuration.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "baseline"
enforce-version: "latest"
audit: "restricted"
audit-version: "latest"
warn: "restricted"
warn-version: "latest"
exemptions:
# システムネームスペースはポリシーから除外
namespaces: ["kube-system"]
この設定は、クラスターのすべてのネームスペースにデフォルトでbaselineポリシーを強制し、restrictedポリシー違反時には警告を表示するようにします。kube-systemのようにKubernetesシステムコンポーネントが実行されるネームスペースは、ポリシー適用から除外(exemption)するのが一般的です。
まとめ ✨
これまで、KubernetesクラスターとネームスペースレベルでPodセキュリティ標準を適用する方法について見てきました。アプリケーションの特性とセキュリティ要件に合った適切なポリシーレベルとモードを選択して、クラスターをさらに安全に保護してください! 🛡️
Kubernetesのセキュリティは難しくありません! 😉
コメントを残す