TKR 1.24 以前を使用している TKG サービス クラスタには、権限および制限のあるワークロード デプロイ用の、バインド可能なポッド セキュリティ ポリシーがデフォルトで含まれています。

ロールと ClusterRole バインドを使用したデフォルトのポッド セキュリティ ポリシーの適用

vSphere IaaS control plane には デフォルトのポッド セキュリティ ポリシーが用意されており、TKR 1.24 以前を実行している スーパーバイザー 上の TKG クラスタに適用できます。これを行うには、 デフォルトのポッド セキュリティ ポリシーを参照する RoleBinding および ClusterRoleBinding オブジェクトを作成します。
注: 独自のポッド セキュリティ ポリシーを作成するには、 Kubernetes のドキュメントを参照してください。

RoleBinding は、特定の名前空間内で権限を付与します。ClusterRoleBinding は、クラスタ全体に権限を付与します。RoleBindings または ClusterRoleBinding を使用するかどうかは、使用方法によって異なります。たとえば、ClusterRoleBinding を使用して、system:serviceaccounts:<namespace> を使用するようにサブジェクトを構成する場合は、名前空間を作成する前に PSP にバインドできます。詳細については、Kubernetes ドキュメントのRoleBinding および ClusterRoleBindingを参照してください。

以下のセクションでは、デフォルトのポッド セキュリティ ポリシーの使用を許可する RoleBinding および ClusterRoleBinding オブジェクトを作成するための YAML および CLI コマンドについて説明します。

例 1:権限のあるワークロードのセットを実行するための ClusterRoleBinding

次の kubectl コマンドにより、ClusterRoleBinding が作成されます。これは、デフォルトの PSP vmware-system-privileged を使用して権限のあるワークロードのセットを実行する認証済みユーザーに、アクセス権を付与します。
注意: 例 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 を参照するロールまたは ClusterRole を作成します。

例は、PodSecurityPolicy にバインドされたロールを示しています。ロールの定義で use を verb として使用して、定義するカスタム PSP リソースに example-role を付与します。または、デフォルトの PSP の 1 つを使用します。次に、バインドを作成します。

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