重要
注意:根据世纪互联发布的公告,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根据群集配置生成数据平面强化建议。 本页演示如何查看这些建议、配置策略参数并在群集上强制执行它们。
先决条件
若要开始,请确保:
你的订阅中已启用Defender for Containers。
已为 Azure 策略添加了 必需的 FQDN/应用程序规则。
(对于非 AKS 群集)Kubernetes 群集连接到 Azure Arc。
通过修正建议来启用 Azure Policy for Kubernetes
如果尚未部署适用于 Kubernetes 的 Azure Policy,或在 Defender for Containers 计划设置中已将其关闭,您可以通过在 Defender for Cloud 中修正相关建议来安装它。
登录 Azure 门户。
转到 Microsoft Defender for Cloud>Recommendations。
搜索相关建议:
- Azure: Azure Kubernetes 服务 群集需要安装用于 Kubernetes 的 Azure Policy 加载项
选择一条建议。
在“ 执行操作 ”选项卡中,选择“ 修复”。
选择 “修复” 以修正所选资源。
对每个建议重复上述操作。
数据平面强化建议
为 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功能 | 管理访问和权限 | 否 |
| 应避免特权容器 | 管理访问和权限 | 否 |
| 应避免以根用户身份运行容器 | 管理访问和权限 | 否 |
查看群集的建议
要查看特定群集的数据平面加固建议:
登录 Azure 门户。
转到 Defender for Cloud>Inventory。
将资源类型筛选器设置为 Kubernetes 服务 ,然后选择“ 应用”。
选择相关的群集。
查看可用的建议。 数据平面加固建议显示受影响的 Kubernetes 组件数。
选择一项建议以查看受影响的资源。
选择“ 执行操作 ”选项卡以查看修正选项。
配置策略参数
某些建议要求参数配置有效。 例如,建议 容器映像应仅从受信任的注册表部署,这要求定义一个受信任的注册表列表。
如果未配置所需的参数,则资源显示为不正常。
若要配置策略参数,请执行以下操作:
登录 Azure 门户。
转到 Microsoft Defender for Cloud>环境设置。
选择相关订阅。
选择 “安全策略”。
在“ 标准 ”选项卡上,选择相关的安全标准。
选择相关策略分配的 3 点菜单,然后选择“ 管理效果和参数”。
更新所需的参数值。
选择“保存”。
强制实施数据平面强化策略
默认情况下,策略在审核模式下评估资源。 若要强制实施策略,请将其效果设置为 “拒绝”。
若要强制实施建议,
登录 Azure 门户。
转到 Microsoft Defender for Cloud>Recommendations。
搜索并选择相关的数据平面加固建议。
在“ 执行操作 ”选项卡上,选择“ 拒绝”。
设置范围。
选择 “更改”以拒绝。
测试策略强制实施
可以通过部署测试工作负荷来验证数据平面强化策略。
- 符合数据平面强化要求的合规部署
- 违反多个策略的不合规部署
部署以下示例 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 组件