포드 보안 정책 - Amazon EKS

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

포드 보안 정책

Kubernetes 포드 보안 정책 승인 컨트롤러는 일련의 규칙을 기준으로 포드 생성 및 업데이트 요청을 검증합니다. 기본적으로 Amazon EKS 클러스터는 제한 없이 완전히 허용하는 보안 정책과 함께 제공됩니다. 자세한 내용은 Kubernetes 설명서의 Pod Security Policies(포드 보안 정책)를 참조하십시오.

참고

포드 보안 정책 승인 컨트롤러는 Kubernetes 버전 1.13 이상을 실행하는 Amazon EKS 클러스터에서만 활성화됩니다. 포드 보안 정책을 사용하려면 클러스터의 Kubernetes 버전을 최소 1.13으로 업데이트해야 합니다. 자세한 정보는 Amazon EKS 클러스터 Kubernetes 버전 업데이트 단원을 참조하십시오.

Amazon EKS 기본 포드 보안 정책

Amazon EKS 클러스터에 Kubernetes 버전 1.13 이상이 있는 경우 기본 팟 보안 정책이 eks.privileged. 이 정책은 시스템에 어떤 종류의 포드를 허용할 수 있는지에 대한 제한이 없으며, 이는 PodSecurityPolicy 컨트롤러 사용 안 함.

참고

이 정책은 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