在 Defender for Cloud 中配置 Kubernetes 数据平面强化

重要

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

Kubernetes 数据平面强化有助于为群集中运行的工作负荷强制实施安全配置,例如限制特权容器、强制实施资源限制和限制网络访问。

在Microsoft Defender for Cloud中,使用 Azure Policy 实现数据平面强化,以便 Kubernetes 评估和强制实施这些配置。 启用自动预配时,Azure Policy作为容器Defender的一部分进行部署。

如果在 Defender for Containers 计划设置中关闭了 Azure Policy for Kubernetes,则可以修正相关建议来进行部署。 如果在启用期间禁用了自动预配或从自动预配中排除特定群集,也可以使用 Azure CLI 手动部署Azure Policy

部署 Kubernetes Azure Policy后,Defender for Cloud根据群集配置生成数据平面强化建议。 本页演示如何查看这些建议、配置策略参数并在群集上强制执行它们。

先决条件

若要开始,请确保:

通过修正建议来启用 Azure Policy for Kubernetes

如果尚未部署适用于 Kubernetes 的 Azure Policy,或在 Defender for Containers 计划设置中已将其关闭,您可以通过在 Defender for Cloud 中修正相关建议来安装它。

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>Recommendations

  3. 搜索相关建议:

    • Azure: Azure Kubernetes 服务 群集需要安装用于 Kubernetes 的 Azure Policy 加载项

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

  4. 选择一条建议。

  5. 在“ 执行操作 ”选项卡中,选择“ 修复”。

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

  6. 选择 “修复” 以修正所选资源。

  7. 对每个建议重复上述操作。

数据平面强化建议

为 Kubernetes 部署Azure Policy后,Defender for Cloud评估群集配置并生成数据平面强化建议。 此过程最多可能需要 30 分钟。

注意

默认情况下,Microsoft组件(如Defender传感器)部署在 kube-system 命名空间中,不会标记为不符合。 可能会标记其他命名空间中安装的第三方组件。 若要排除特定命名空间,请配置Azure策略排除项。

下表列出了常见的数据平面强化建议:

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

查看群集的建议

要查看特定群集的数据平面加固建议:

  1. 登录 Azure 门户

  2. 转到 Defender for Cloud>Inventory

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

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

  4. 选择相关的群集。

  5. 查看可用的建议。 数据平面加固建议显示受影响的 Kubernetes 组件数。

  6. 选择一项建议以查看受影响的资源。

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

  7. 选择“ 执行操作 ”选项卡以查看修正选项。

    “执行操作”选项卡的屏幕截图,用于查看建议的修正步骤。

配置策略参数

某些建议要求参数配置有效。 例如,建议 容器映像应仅从受信任的注册表部署,这要求定义一个受信任的注册表列表。

如果未配置所需的参数,则资源显示为不正常。

若要配置策略参数,请执行以下操作:

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>环境设置

  3. 选择相关订阅。

  4. 选择 “安全策略”。

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

  5. 在“ 标准 ”选项卡上,选择相关的安全标准。

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

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

  7. 更新所需的参数值。

    参数面板的屏幕截图。

  8. 选择“保存”。

强制实施数据平面强化策略

默认情况下,策略在审核模式下评估资源。 若要强制实施策略,请将其效果设置为 “拒绝”。

若要强制实施建议,

  1. 登录 Azure 门户

  2. 转到 Microsoft Defender for Cloud>Recommendations

  3. 搜索并选择相关的数据平面加固建议。

  4. 在“ 执行操作 ”选项卡上,选择“ 拒绝”。

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

  5. 设置范围。

  6. 选择 “更改”以拒绝

测试策略强制实施

可以通过部署测试工作负荷来验证数据平面强化策略。

  • 符合数据平面强化要求的合规部署
  • 违反多个策略的不合规部署

部署以下示例 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

不合规部署示例

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

了解详细信息

  • 使用 Azure CLI 部署容器的 Defenders 组件

后续步骤