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

时间:2021-02-08 22:28:31

标签: 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:
  - '*'

部署在集群中:

$ kubectl get psp
NAME                            PRIV    CAPS   SELINUX    RUNASUSER          FSGROUP     SUPGROUP    READONLYROOTFS   VOLUMES
restrict-root                   false          RunAsAny   MustRunAsNonRoot   RunAsAny    RunAsAny    false            *

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

$ 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

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

apiVersion: v1
kind: Pod
metadata:
  name:      mypod
spec:
  containers:
    - name:  mypod
      image: busybox
      args: ["sleep", "10000"]
      securityContext:
        runAsUser: 0

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

为什么不应用 MustRunAsNonRoot?如何执行?

编辑:看起来 AKS 引擎不支持 PodSecurityPolicy (list of supported policies)。那么问题还是一样:如何对工作负载强制执行 MustRunAsNonRoot 规则?

1 个答案:

答案 0 :(得分:1)

您不应在 Azure AKS 群集上使用 PodSecurityPolicy,因为它已被设置为自 2021 年 5 月 31 日起弃用,以支持 Azure Policy for AKS。查看 the official docs 了解更多详情:

<块引用>

警告

本文档中描述的功能 pod 安全策略(预览版)已设置为弃用,将不再可用 2021 年 5 月 31 日之后支持Azure Policy for AKS。 弃用日期已从上一个日期延长 2020 年 10 月 15 日。

因此,目前您应该使用 Azure Policy for AKS,其中 among other built-in policies 分组为倡议(Azure Policy 中的倡议是为实现单一总体目标而量身定制的策略定义集合),您可以找到目标是在您的 AKS 集群disallow running of privileged containers的策略。

至于PodSecurityPolicy,暂时应该还是可以的。如果您没有忘记任何事情,请检查 here,例如确保您set up the corresponding ClusterRole and ClusterRoleBinding允许使用该政策。