如何在 AKS 中的 K8S 集群中强制执行 MustRunAsNonRoot 策略

Mik*_*nov 6 kubernetes azure-aks

我有一个在 Azure AKS 服务中运行的 K8S 集群。

我想强制执行MustRunAsNonRoot策略。怎么做?

创建以下策略:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restrict-root
spec:
  privileged: false
  allowPrivilegeEscalation: false
  runAsUser:
    rule: MustRunAsNonRoot
  seLinux:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  volumes:
  - '*'
Run Code Online (Sandbox Code Playgroud)

它部署在集群中:

$ kubectl get psp
NAME                            PRIV    CAPS   SELINUX    RUNASUSER          FSGROUP     SUPGROUP    READONLYROOTFS   VOLUMES
restrict-root                   false          RunAsAny   MustRunAsNonRoot   RunAsAny    RunAsAny    false            *
Run Code Online (Sandbox Code Playgroud)

准入控制器在集群中运行:

$ kubectl get pods -n gatekeeper-system
NAME                                     READY   STATUS    RESTARTS   AGE
gatekeeper-audit-7b4bc6f977-lvvfl        1/1     Running   0          32d
gatekeeper-controller-5948ddcd54-5mgsm   1/1     Running   0          32d
gatekeeper-controller-5948ddcd54-b59wg   1/1     Running   0          32d
Run Code Online (Sandbox Code Playgroud)

无论如何,可以在 root 下运行一个简单的 pod:

apiVersion: v1
kind: Pod
metadata:
  name:      mypod
spec:
  containers:
    - name:  mypod
      image: busybox
      args: ["sleep", "10000"]
      securityContext:
        runAsUser: 0
Run Code Online (Sandbox Code Playgroud)

Pod 正在运行:

$ kubectl describe po mypod
Name:         mypod
Namespace:    default
Priority:     0
Node:         aks-default-31327534-vmss000001/10.240.0.5
Start Time:   Mon, 08 Feb 2021 23:10:46 +0100
Labels:       <none>
Annotations:  <none>
Status:       Running
Run Code Online (Sandbox Code Playgroud)

为什么MustRunAsNonRoot没有应用?如何强制执行?

编辑:看起来 AKS 引擎不支持 PodSecurityPolicy (支持的策略列表)。那么问题仍然是一样的:如何在工作负载上强制执行 MustRunAsNonRoot 规则?

mar*_*rio 3

不应PodSecurityPolicyAzure AKS 群集上使用,因为它已被设置为从 2021 年 5 月 31 日起弃用,转而采用Azure Policy for AKS。查看官方文档以获取更多详细信息:

警告

本文档中描述的功能(Pod 安全策略(预览版))已设置为弃用,并且在 2021 年 5 月 31 日之后将不再可用,取而代之的AKS 的 Azure 策略。弃用日期已从之前的 2020 年 10 月 15 日延长。

因此,目前您应该使用Azure Policy for AKS,其中在分组为计划的其他内置策略中(Azure Policy 中的计划是为实现单一总体目标而定制的策略定义的集合),您可以找到一个策略目标是禁止在AKS 群集上运行特权容器

至于PodSecurityPolicy,暂时应该还可以。如果您没有忘记任何事情,请检查此处,例如确保您设置了相应的内容ClusterRoleClusterRoleBinding允许使用该策略。