Amazon EKS 作成のポッドセキュリティポリシー (PSP) の説明
Kubernetes Pod のセキュリティポリシーのアドミッションコントローラーは、一連のルールに対して Pod の作成を検証し、リクエストを更新します。デフォルトでは、Amazon EKS クラスターには、制限のない、完全な許容度のセキュリティポリシーが設定されています。詳細については、「Kubernetes のドキュメント」の「ポッドセキュリティポリシー
注記
PodSecurityPolicy
(PSP) は Kubernetes バージョン 1.21
で非推奨となり、Kubernetes 1.25
で削除されました。PSPs は「ポッドセキュリティ標準 (PSS)1.25
から PSP の削除に対処するには、Amazon EKS に PSS を実装することをお勧めします。詳細については、「AWS ブログ」の「Implementing Pod Security Standards in Amazon EKS
Amazon EKS での デフォルトの Pod セキュリティポリシー
Kubernetes バージョン 1.13
以降の Amazon EKS クラスターには、eks.privileged
という名前のデフォルト Pod のセキュリティポリシーがあります。このポリシーには、システムに受け入れ可能な種類の Pod について制限がありません。これは、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
Pod セキュリティポリシー、そのクラスターロール、およびクラスターロールバインドに対する完全な YAML ファイルを「デフォルトの Pod セキュリティポリシーをインストールまたは復元するデフォルトのポッドセキュリティポリシーをインストールまたは復元する」で確認できます。
デフォルトの Amazon EKS Pod セキュリティポリシーを削除する
Pods に対してより制限の厳しいポリシーを作成する場合は、作成後にデフォルトの Amazon EKS eks.privileged
Pod セキュリティポリシーを削除して、カスタムポリシーを有効にできます。
重要
CNI プラグインのバージョン 1.7.0
以降を使用していて、Daemonset によってデプロイされた aws-node
Pods のために使用される aws-node
Kubernetes サービスアカウントにカスタム Pod セキュリティポリシーを割り当てる場合、ポリシーの allowedCapabilities
セクションには NET_ADMIN
が、またポリシーの spec
には hostNetwork: true
と privileged: true
があることが必要です。
-
デフォルトのポッドセキュリティポリシーをデフォルトの Pod セキュリティポリシーをインストールまたは復元するインストールまたは復元するためのサンプルファイルの内容を使用して、
privileged-podsecuritypolicy.yaml
という名前のファイルを作成します。 -
次のコマンドを使用して YAML を削除します。これにより、デフォルトの Pod セキュリティポリシー、
ClusterRole
、およびそれに関連付けられたClusterRoleBinding
が削除されます。kubectl delete -f privileged-podsecuritypolicy.yaml
デフォルトの Pod セキュリティポリシーをインストールまたは復元する
Kubernetes の以前のバージョンからアップグレードする場合、またはデフォルトの Amazon EKS eks.privileged
Pod セキュリティポリシーを変更または削除した場合は、次のステップで復元できます。
-
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