ポッドのセキュリティポリシー
Kubernetes ポッドのセキュリティポリシーのアドミッションコントローラーは、一連のルールに対してポッドの作成を検証し、リクエストを更新します。デフォルトでは、Amazon EKS クラスターには、制限のない、完全な許容度のセキュリティポリシーが設定されています。詳細については、Kubernetes ドキュメントの「Pod Security Policies
Kubernetes v1.21 以降、この機能は非推奨となります。PodSecurityPolicy では、Kubernetes の非推奨化ガイドラインに従い、いくつかのリリースの機能が継続されます。詳細については、PodSecurityPolicy Deprecation: Past, Present, and Future
Amazon EKS での デフォルトのポッドセキュリティポリシー
Kubernetes バージョン 1.13 以降の Amazon EKS クラスターには、eks.privileged
という名前のデフォルトのポッドセキュリティポリシーがあります。このポリシーには、システムに受け入れ可能な種類のポッドについて制限がありません。これは、PodSecurityPolicy
コントローラーを無効にして Kubernetes を実行するのと同じです。
このポリシーは、PodSecurityPolicy
コントローラーが有効になっていないクラスターとの下位互換性を維持するために作成されたものです。クラスターと個別名前空間およびサービスアカウントに対してより制限の高いポリシーを作成してから、デフォルトポリシーを削除し、より制限の高いポリシーを有効にすることができます。
次のコマンドを使用してデフォルトのポリシーを表示できます。
kubectl get psp eks.privileged
出力:
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
eks.privileged true * RunAsAny RunAsAny RunAsAny RunAsAny false *
詳細については、次のコマンドを使用してポリシーについて説明できます。
kubectl describe psp eks.privileged
出力:
Name: eks.privileged
Settings:
Allow Privileged: true
Allow Privilege Escalation: 0xc0004ce5f8
Default Add Capabilities: <none>
Required Drop Capabilities: <none>
Allowed Capabilities: *
Allowed Volume Types: *
Allow Host Network: true
Allow Host Ports: 0-65535
Allow Host PID: true
Allow Host IPC: true
Read Only Root Filesystem: false
SELinux Context Strategy: RunAsAny
User: <none>
Role: <none>
Type: <none>
Level: <none>
Run As User Strategy: RunAsAny
Ranges: <none>
FSGroup Strategy: RunAsAny
Ranges: <none>
Supplemental Groups Strategy: RunAsAny
Ranges: <none>
eks.privileged
ポッドセキュリティポリシー、そのクラスターロール、およびクラスターロールロールバインドに対する完全な YAML ファイルをデフォルトのポッドセキュリティポリシーをインストールまたは復元するで確認できます。
デフォルトの Amazon EKS ポッドセキュリティポリシーを削除する
ポッドに対してより制限の厳しいポリシーを作成する場合は、作成後にデフォルトの Amazon EKS eks.privileged
ポッドセキュリティポリシーを削除して、カスタムポリシーを有効にできます。
CNI プラグインのバージョン 1.7.0 以降を使用していて、デーモンセットによってデプロイされた aws-node
ポッドに使用した aws-node
Kubernetes サービスアカウントにカスタムポッドセキュリティポリシーを割り当てる場合、ポリシーの allowedCapabilities
セクションに NET_ADMIN
が、ポリシーの spec
に hostNetwork: true
と privileged: true
があることが必要です。
デフォルトのポッドセキュリティポリシーを削除するには
-
デフォルトのポッドセキュリティポリシーをインストールまたは復元する のサンプルファイルの内容を使用して、
という名前のファイルを作成します。privileged-podsecuritypolicy.yaml
-
次のコマンドを使用して YAML を削除します。これにより、デフォルトのポッドセキュリティポリシー、
ClusterRole
、および関連付けられたClusterRoleBinding
が削除されます。kubectl delete -f
privileged-podsecuritypolicy.yaml
デフォルトのポッドセキュリティポリシーをインストールまたは復元する
Kubernetes の以前のバージョンからアップグレードする場合、またはデフォルトの Amazon EKS eks.privileged
ポッドセキュリティポリシーを変更または削除した場合は、以下の手順で復元できます。
デフォルトのポッドセキュリティポリシーをインストールまたは復元するには
-
というファイルを次の内容で作成します。privileged-podsecuritypolicy.yaml
apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: eks.privileged annotations: kubernetes.io/description: 'privileged allows full unrestricted access to pod features, as if the PodSecurityPolicy controller was not enabled.' seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy spec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts: - min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' readOnlyRootFilesystem: false --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:podsecuritypolicy:privileged labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy rules: - apiGroups: - policy resourceNames: - eks.privileged resources: - podsecuritypolicies verbs: - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:podsecuritypolicy:authenticated annotations: kubernetes.io/description: 'Allow all authenticated users to create privileged pods.' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:podsecuritypolicy:privileged subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated
-
次のコマンドを使用して YAML を適用します。
kubectl apply -f
privileged-podsecuritypolicy.yaml