保护 Kubernetes 数据平面强化

重要

注意:根据世纪互联发布的公告2026 年 8 月 18 日,中国地区的 Azure 中将正式停用所有 Microsoft Defender for Cloud 功能。

本页介绍如何使用 Microsoft Defender for Cloud 的一组专门用于 Kubernetes 数据平面强化的安全建议。

提示

有关可能针对 Kubernetes 群集和节点显示的安全建议的列表,请查看 容器建议

设置工作负载保护

Microsoft Defender for Cloud 包含安装适用于 Kubernetes 的 Azure Policy 后即可使用的一组建议。

先决条件

启用 Kubernetes 数据平面强化

可以通过以下两种方式之一启用适用于 Kubernetes 的 Azure Policy:

使用计划/连接器设置为所有当前和将来的群集启用适用于 Kubernetes 的 Azure Policy

注意

如果启用此设置,则适用于 Kubernetes 的 Azure Policy Pod 将安装在群集上。 此操作会为 Pod 分配少量的 CPU 和内存以供使用。 此分配可能会达到最大容量,但不会影响资源上剩余的 CPU 和内存。

为 Azure 订阅或本地服务器启用

为容器启用 Microsoft Defender 时,“用于 Kubernetes 的 Azure 策略”设置会默认为相关订阅中的 Azure Kubernetes 服务和 Azure Arc 启用的 Kubernetes 群集启用。 如果在初始配置中禁用该设置,则可以在之后手动启用它。

如果在容器计划下禁用了“Azure Policy for Kubernetes”设置,则可以按照步骤操作,以便在订阅中的所有群集中启用它:

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>Management>Environment settings

  3. 选择相关订阅。

  4. 在“Defender计划”页上,确保Containers切换到 On

  5. 选择“设置”。

    屏幕截图显示了 Defender 计划中的“设置”按钮。

  6. 在“设置与监视”页面,将 Azure Policy for Kubernetes 设为 开启

    屏幕截图显示了用于启用或禁用扩展的切换开关。

在现有群集上部署适用于 Kubernetes 的 Azure Policy

可以通过“建议”页面在现有 Kubernetes 群集上手动配置 Azure 策略(适用于 Kubernetes)。 启用后,强化建议将变为可用(其中一些建议需要其他配置才能正常工作)。

若要将 Kubernetes 的Azure Policy部署到指定的群集

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>General>Recommendations

  3. 搜索相关建议:

    • Azure -"Azure Kubernetes 服务 clusters should have the Azure Policy add-on for Kubernetes installed"

    截图展示了 Azure Kubernetes 服务群集的建议.

  4. 选择找到的建议。

  5. 选择“修复”。

    突出显示了“修复”按钮的建议的屏幕截图。

  6. 对每个额外建议重复此操作。

查看并配置建议选项集

适用于 Kubernetes 的 Azure Policy 加载项安装完成大约 30 分钟后,Defender for Cloud 会显示群集的运行状况,以提供以下建议(每个建议都在相关的安全控制中),如下所示:

注意

如果首次安装适用于 Kubernetes 的 Azure Policy,这些建议会显示为建议列表中的新增内容。

提示

某些建议包含参数,必须通过 Azure Policy 自定义参数才能有效地使用这些建议。 例如,要从建议仅从受信任的注册表部署容器映像中获益,您必须定义您信任的注册表。 如果没有为建议输入需要进行配置的必需参数,则工作负载将显示为“不正常”。

注意

默认情况下,Microsoft Defender 传感器等组件部署在 kube-system 命名空间中。 此设置可确保它们不会在数据平面建议中标记为不合规。 但是,安装在不同命名空间中的第三方供应商工具可能会被标记为不合规。 若要从这些建议中排除第三方供应商,可以将其命名空间添加到排除列表。

建议名称 安全控制 需要进行配置
应强制执行容器 CPU 和内存限制 保护应用程序免受 DDoS 攻击
只应从信任的注册表部署容器镜像 修正漏洞
应强制对容器使用最低权限 Linux 功能 管理访问和权限
容器应仅使用允许的 AppArmor 配置文件 修正安全配置
服务应只侦听允许的端口 限制未经授权的网络访问
应限制对主机网络和端口的使用 限制未经授权的网络访问
Pod 的 HostPath (主机路径)卷装载的使用应仅限于已知列表。 管理访问和权限
应避免使用存在权限提升风险的容器 管理访问和权限
应避免使用共享敏感主机命名空间的容器 管理访问和权限
应强制对容器使用不可变(只读)根文件系统 管理访问和权限
Kubernetes 群集应只可通过 HTTPS 进行访问 加密传输中的数据
Kubernetes 群集应禁用自动装载 API 凭据 管理访问和权限
Kubernetes 群集不应使用默认命名空间 实现安全最佳实践
Kubernetes 群集不应授予 CAPSYSADMIN 安全功能 管理访问和权限
应避免特权容器 管理访问和权限
应避免以根用户身份运行容器 管理访问和权限

对于带有需要自定义的参数的建议,需要设置参数:

设置参数

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>Management>Environment settings

  3. 选择相关订阅。

  4. 在导航菜单中,选择 “安全策略”。

    “安全策略”页的屏幕截图。

  5. 在“ 标准 ”选项卡上,搜索相应的安全标准。

  6. 选择安全标准的 3 点菜单,然后选择“ 管理”。

    从建议的 3 点菜单中选择“管理”的屏幕截图。

  7. 选择相关策略分配的 3 点菜单,然后选择“ 管理效果和参数”。

    选择 3 点菜单,然后选择“管理效果和参数”的屏幕截图。

  8. 根据需要修改值。

    参数面板的屏幕截图。

  9. 选择“保存”。

若要强制实施任何建议:

  1. 打开建议详细信息页,然后选择“拒绝”:

    屏幕截图显示了用于 Azure Policy 参数的“拒绝”选项。

    此时会打开用于设置范围的窗格。

  2. 设置范围,然后选择“更改以拒绝”。

若要查看适用于你的群集的建议:

  1. 登录 Azure 门户

  2. 转到 Defender for Cloud>Inventory

  3. 将资源类型筛选器设置为 Kubernetes 服务 ,然后选择“ 应用”。

    使用资源类型筛选器选择 kubernetes 服务的屏幕截图。

  4. 选择要调查的群集。

  5. 查看可用的建议。 在查看工作负载保护集中的建议时,会随群集一起列出受影响的 pod(“Kubernetes 组件”)数目。

  6. 可选:要获取特定 Pods 的列表,请选择相应的建议。

    从“资源运行状况”页中选择建议的屏幕截图。

  7. 然后选择“ 执行操作”。

屏幕截图显示了查看 Kubernetes 建议的受影响 Pod 的位置。

若要测试执行,请使用以下两个 Kubernetes 部署:

  • 一个是可靠的部署,遵循工作负载保护建议的一组方案。

  • 另一个是不健康的部署,不遵循任何建议。

按原样部署示例 .yaml 文件,或参考它们来修正自己的工作负载。

正常的部署示例 .yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-healthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        container.apparmor.security.beta.kubernetes.io/redis: runtime/default
    spec:
      containers:
      - name: redis
        image: <customer-registry>.azurecr.io/redis:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 250Mi
        securityContext:
          privileged: false
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          runAsNonRoot: true
          runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
  name: redis-healthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 80
    targetPort: 80

不健康的部署示例.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-unhealthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:      
      labels:
        app: redis
    spec:
      hostNetwork: true
      hostPID: true 
      hostIPC: true
      containers:
      - name: redis
        image: redis:latest
        ports:
        - containerPort: 9001
          hostPort: 9001
        securityContext:
          privileged: true
          readOnlyRootFilesystem: false
          allowPrivilegeEscalation: true
          runAsUser: 0
          capabilities:
            add:
              - NET_ADMIN
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
          readOnly: true
      volumes:
      - name: test-volume
        hostPath:
          # directory location on host
          path: /tmp
---
apiVersion: v1
kind: Service
metadata:
  name: redis-unhealthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 6001
    targetPort: 9001

后续步骤

在本文中,你已了解了如何配置 Kubernetes 数据平面强化。

如需相关材料,请参阅以下页面内容: