TKR 1.24 이하를 사용하는 TKG 서비스 클러스터에는 권한 있는 워크로드 및 제한된 워크로드 배포를 위해 바인딩할 수 있는 기본 포드 보안 정책이 포함됩니다.

역할 및 ClusterRole 바인딩을 사용하여 기본 포드 보안 정책 적용

vSphere IaaS control plane는 TKR 1.24 이하를 실행하는 감독자의 TKG 클러스터에 적용할 수 있는 기본 포드 보안 정책을 제공합니다. 이 작업은 기본 포드 보안 정책을 참조하는 RoleBinding 및 ClusterRoleBinding 개체를 생성하여 수행할 수 있습니다.
참고: 자체 포드 보안 정책을 작성하려면 Kubernetes 설명서를 참조하십시오.

RoleBinding은 특정 네임스페이스 내에서 사용 권한을 부여합니다. ClusterRoleBinding은 클러스터 전체에 사용 권한을 부여합니다. RoleBinding을 사용할지 아니면 ClusterRoleBinding을 사용할지는 사용 사례에 따라 다릅니다. 예를 들어 ClusterRoleBinding을 사용하고 system:serviceaccounts:<namespace>를 사용하도록 주체를 구성하는 경우 네임스페이스가 생성되기 전에 PSP에 바인딩할 수 있습니다. 자세한 내용은 Kubernetes 설명서에서 RoleBinding 및 ClusterRoleBinding을 참조하십시오.

다음 섹션에서는 기본 포드 보안 정책을 사용하도록 권한을 부여하는 RoleBinding 및 ClusterRoleBinding 개체를 생성하기 위한 YAML 및 CLI 명령을 제공합니다.

예 1: 권한 있는 워크로드 집합을 실행하는 ClusterRoleBinding

다음 kubectl 명령은 기본 PSP vmware-system-privileged를 사용하여 권한 있는 워크로드 집합을 실행하도록 인증된 사용자에게 액세스 권한을 부여하는 ClusterRoleBinding을 생성합니다.
경고: 예 1을 선언적으로 또는 명령적으로 적용하면 권한 있는 워크로드를 클러스터 전체에 배포할 수 있습니다. 실제로 예 1은 네이티브 보안 제어를 사용하지 않도록 설정하므로 영향을 충분히 인식하고 주의를 기울여서 사용해야 합니다. 보안을 강화하려면 예 2, 3, 4를 고려하십시오.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: psp:privileged
rules:
- apiGroups: ['policy']
  resources: ['podsecuritypolicies']
  verbs:     ['use']
  resourceNames:
  - vmware-system-privileged
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: all:psp:privileged
roleRef:
  kind: ClusterRole
  name: psp:privileged
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io
YAML을 적용하는 대신 다음 kubectl 명령을 실행할 수 있습니다.
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

예 2: 권한 있는 워크로드 집합을 실행하는 RoleBinding

다음 kubectl 명령은 기본 PSP vmware-system-privileged를 사용하여 권한 있는 워크로드 집합을 실행하도록 기본 네임스페이스 내의 모든 서비스 계정에 액세스 권한을 부여하는 RoleBinding을 생성합니다.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rolebinding-default-privileged-sa-ns_default
  namespace: default
roleRef:
  kind: ClusterRole
  name: psp:vmware-system-privileged
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
  apiGroup: rbac.authorization.k8s.io
  name: system:serviceaccounts
YAML을 적용하는 대신 다음 kubectl 명령을 실행할 수 있습니다.
kubectl create rolebinding rolebinding-default-privileged-sa-ns_default --namespace=default --clusterrole=psp:vmware-system-privileged --group=system:serviceaccounts

예 3: 제한된 워크로드 집합을 실행하는 ClusterRoleBinding

다음 YAML은 기본 PSP vmware-system-restricted를 사용하여 제한된 워크로드 집합을 실행하도록 인증된 사용자에게 클러스터 전체 액세스 권한을 부여하는 ClusterRoleBinding을 생성합니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: psp:authenticated
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:authenticated
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: psp:vmware-system-restricted

YAML을 적용하는 대신 다음 kubectl 명령을 실행할 수 있습니다.

kubectl create clusterrolebinding psp:authenticated --clusterrole=psp:vmware-system-restricted --group=system:authenticated

예 4: 제한된 워크로드 집합을 실행하는 RoleBinding

다음 YAML은 기본 PSP vmware-system-restricted를 사용하여 제한된 워크로드 집합을 실행하도록 특정 네임스페이스 내의 모든 서비스 계정에 액세스 권한을 부여하는 RoleBinding을 생성합니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: psp:serviceaccounts
  namespace: some-namespace
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: psp:vmware-system-restricted
YAML을 적용하는 대신 다음 kubectl 명령을 실행할 수 있습니다.
참고: "some-namespace"를 대상 네임스페이스로 변경합니다.
kubectl create rolebinding psp:serviceaccounts --clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts -n some-namespace

포드 보안 정책에 대한 역할 예

워크로드를 배포하기 위해 자체 PSP(포드 보안 정책)를 정의하는 경우 이 예를 참조하여 사용자 지정 PSP를 참조하는 Role 또는 ClusterRole을 생성합니다.

이 예는 PodSecurityPolicy에 바인딩된 역할을 보여줍니다. 역할 정의에서 example-role에는 직접 정의한 사용자 지정 PSP 리소스에 대한 use 동사가 부여됩니다. 또는 기본 PSP 중 하나를 사용합니다. 그런 다음 바인딩을 생성합니다.

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: example-role
  namespace: tkgs-cluster-ns
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - create
  - get
  - list
  - watch
  - update
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - update
  - patch
- apiGroups: 
  - extensions
  resourceNames:
  - CUSTOM-OR-DEFAULT-PSP
  resources:
  - podsecuritypolicies
  verbs:
  - use