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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

注記

ポッドセキュリティポリシーのアドミッションコントローラーは、Kubernetes バージョン 1.13 以降を実行している Amazon EKS クラスターでのみ有効になります。ポッドのセキュリティポリシーを使用するには、クラスターの Kubernetes のバージョンを少なくとも 1.13 に更新する必要があります。詳細については、「クラスターの更新」を参照してください。

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 ファイルを示しています。

--- 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

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

クラスターのカスタムポッドセキュリティポリシーを作成したら、デフォルトの Amazon EKS eks.privileged ポッドセキュリティポリシーを削除して、カスタムポリシーを有効にできます。

  1. privileged-podsecuritypolicy.yaml という名前のファイルを作成し、前の例の完全な eks.privileged YAML ファイルのコンテンツをそのファイルに貼り付けます (これにより、ポッドセキュリティポリシー、ClusterRole、関連付けられた ClusterRoleBinding を削除することができます)。

  2. 次のコマンドを使用して YAML を削除します。

    kubectl delete -f privileged-podsecuritypolicy.yaml

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

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

  1. privileged-podsecuritypolicy.yaml という名前のファイルを作成し、以下の 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