ポッドのセキュリティポリシー - Amazon EKS

ポッドのセキュリティポリシー

Kubernetes ポッドのセキュリティポリシーのアドミッションコントローラーは、一連のルールに対してポッドの作成を検証し、リクエストを更新します。デフォルトでは、Amazon EKS クラスターには、制限のない、完全な許容度のセキュリティポリシーが設定されています。詳細については、Kubernetes ドキュメントの「Pod Security Policies」を参照してください。

注記

Kubernetes v1.21 以降、この機能は非推奨となります。PodSecurityPolicy では、Kubernetes の非推奨化ガイドラインに従い、いくつかのリリースの機能が継続されます。詳細については、PodSecurityPolicy Deprecation: Past, Present, and Future ならびに AWSブログを参照してください。

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 が、ポリシーの spechostNetwork: trueprivileged: true があることが必要です。

デフォルトのポッドセキュリティポリシーを削除するには

  1. デフォルトのポッドセキュリティポリシーをインストールまたは復元する のサンプルファイルの内容を使用して、privileged-podsecuritypolicy.yaml という名前のファイルを作成します。

  2. 次のコマンドを使用して YAML を削除します。これにより、デフォルトのポッドセキュリティポリシー、ClusterRole、および関連付けられた ClusterRoleBinding が削除されます。

    kubectl delete -f privileged-podsecuritypolicy.yaml

デフォルトのポッドセキュリティポリシーをインストールまたは復元する

Kubernetes の以前のバージョンからアップグレードする場合、またはデフォルトの Amazon EKS eks.privileged ポッドセキュリティポリシーを変更または削除した場合は、以下の手順で復元できます。

デフォルトのポッドセキュリティポリシーをインストールまたは復元するには

  1. 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
  2. 次のコマンドを使用して YAML を適用します。

    kubectl apply -f privileged-podsecuritypolicy.yaml