参照:
https://kubernetes.io/docs/concepts/security/pod-security-admission/
https://kubernetes.io/blog/2021/12/09/pod-security-admission-beta/
https://qiita.com/uesyn/items/cf47e12fba5e5c5ea25f
機能:
クラスタ(NameSpace)の範囲でセキュリティを適応する機能として
Pod Security Policiesがあるがver 1.25で廃止されてPodSecurityに変更される
ポイント:
以下のようにNameSpaceにラベルにルールを記載することでセキュリティが追加される。
(NameSpaceのデフォの作成時点では、関連したラベルがないのでセキュティの設定はされてない)
ポリシーは、ラベルを介して名前空間に適用されます。これらのラベルは次のとおりです。
例)
pod-security.kubernetes.io/<MODE(enforce | audit | worn)>: <LEVEL(privileged | baseline | restricted)>
pod-security.kubernetes.io/<MODE(enforce | audit | worn)>-version: <VERSION>(オプション、デフォルトは最新)
<MODE>
enforce:ポリシー違反により、Podは拒否されます。
audit :ポリシー違反は、監査ログに記録されたイベントへの監査注釈の追加をトリガーしますが、それ以外の場合は許可されます。
warn :ポリシー違反はユーザー向けの警告をトリガーしますが、それ以外の場合は許可されます。
<LEVEL>
privileged : オープンで無制限
baseline : 制限を最小限に抑えながら、既知の特権昇格をカバーします
restricted : 高度に制限され、既知および未知の特権エスカレーションに対して強化されます。
検証:
公式内容を参考に、コマンドベースでの検証を行ってみる。
1)検証用のnamespaceを作成する。
kubectl create namespace pod-security-test
2)ラベリングを行う。
(以下のラベルは、Podの作成を拒否することを表している。)
kubectl label namespace pod-security-test pod-security.kubernetes.io/enforce=restricted
3)対象のNameSpaceにラベルが付与されたとを確認
4)試しに、指定したNameSpaceにデプロイを行うと。
kubectl -n pod-security-test run test --dry-run=server --image=busybox --privileged
5)以下、メッセージが出て作成が失敗に終わります。
6)ラベルの上書きを行ってみる。
kubectl label --overwrite ns pod-security-test \
pod-security.kubernetes.io/enforce=privileged \
pod-security.kubernetes.io/warn=baseline \
pod-security.kubernetes.io/audit=baseline
7)再度、デプロイを実施する。
以下、デプロイが出来てることが把握できる。
以下のようにマニュフェストの作成でも実施可能である。