你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
保护 Kubernetes 数据平面强化
本页介绍如何使用 Microsoft Defender for Cloud 的一组专门用于 Kubernetes 数据平面强化的安全建议。
提示
有关可能会针对 Kubernetes 群集和节点显示的安全建议的列表,请参阅建议参考表的容器建议。
设置工作负载保护
Microsoft Defender for Cloud 包含一组建议,当你安装了“适用于 Kubernetes 的 Azure Policy 加载项或扩展”后即可使用这些建议。
先决条件
- 添加 Azure Policy 所需的 FQDN/应用程序规则。
- (对于非 AKS 群集)将现有 Kubernetes 群集连接到 Azure Arc。
启用 Kubernetes 数据平面强化
启用适用于容器的 Microsoft Defender 时,会同时默认启用 Azure Kubernetes 服务群集和已启用 Azure Arc 的 Kubernetes 群集(预览版)保护。 在启用了 Microsoft Defender for Containers 时,可以配置 Kubernetes 数据平面强化。
若要启用 Azure Kubernetes 服务群集和已启用 Azure Arc 的 Kubernetes 群集(预览版):
登录 Azure 门户。
导航到“Microsoft Defender for Cloud”“环境设置”。
选择相关订阅。
在“Defender 计划”页上,确保“容器”切换为“打开”。
选择“配置” 。
在“高级配置”页上,将每个相关组件切换为“打开”。
选择“保存”。
配置适用于容器的 Defender 组件
如果在启用 Microsoft Defender for Containers 时禁用了任何默认保护,则可以更改配置并重新启用这些保护。
若要配置适用于容器的 Defender 组件:
登录 Azure 门户。
导航到“Microsoft Defender for Cloud”“环境设置”。
选择相关订阅。
在 Defender for Containers 计划的“监视范围”列中,选择“设置”。
确保适用于容器的 Microsoft Defender 组件(预览版)切换为“打开”。
选择“编辑配置”。
在“高级配置”页上,将每个相关组件切换为“打开”。
选择“确认”。
将加载项部署到指定的群集
可以通过“建议”页来手动配置 Kubernetes 数据平面强化加载项或扩展保护。 这可以通过修正 Azure Policy add-on for Kubernetes should be installed and enabled on your clusters
建议或 Azure policy extension for Kubernetes should be installed and enabled on your clusters
来实现。
若要将加载项部署到指定群集:
在“建议”页中,搜索建议
Azure Policy add-on for Kubernetes should be installed and enabled on your clusters
或Azure policy extension for Kubernetes should be installed and enabled on your clusters
。提示
建议包括在五个不同的安全控件中,在下一步中选择哪个控件都无关紧要。
从任何安全控件中,选择建议来查看可在其上安装加载项的资源。
选择相关群集并进行修正。
查看并配置建议的捆绑包
加载项安装完成大约 30 分钟后,Defender for Cloud 会显示群集的运行状况以提供以下建议(每个建议都在相关的安全控制中),如下所示:
注意
如果是第一次安装该加载项,这些建议将显示为建议列表中的新添加项。
提示
某些建议包含参数,必须通过 Azure Policy 自定义参数才能有效地使用这些建议。 例如,若要从“应只从受信任的注册表部署容器映像”建议中受益,必须定义受信任的注册表。
如果没有为建议输入需要进行配置的必需参数,则工作负载将显示为“不正常”。
建议名称 安全控制 需要进行配置 应强制执行容器 CPU 和内存限制 保护应用程序免受 DDoS 攻击 是 应只从受信任的注册表部署容器映像 修正漏洞 是 应强制对容器使用最低权限 Linux 功能 管理访问和权限 是 容器应仅使用允许的 AppArmor 配置文件 修正安全配置 是 服务应只侦听允许的端口 限制未经授权的网络访问 是 应限制对主机网络和端口的使用 限制未经授权的网络访问 是 Pod HostPath 卷装载的使用应仅限于已知列表 管理访问和权限 是 应避免使用特权提升的容器 管理访问和权限 否 应避免使用共享敏感主机命名空间的容器 管理访问和权限 否 应强制对容器使用不可变(只读)根文件系统 管理访问和权限 否 Kubernetes 群集应只可通过 HTTPS 进行访问 加密传输中的数据 否 Kubernetes 群集应禁用自动装载 API 凭据 管理访问和权限 否 Kubernetes 群集不应使用默认命名空间 实现安全最佳实践 否 Kubernetes 群集不应授予 CAPSYSADMIN 安全功能 管理访问和权限 否 应避免特权容器 管理访问和权限 否 应避免以根用户身份运行容器 管理访问和权限 否
对于带有需要自定义的参数的建议,需要设置参数:
设置参数:
登录 Azure 门户。
导航到“Microsoft Defender for Cloud”“环境设置”。
选择相关订阅。
在 Defender for Cloud 的菜单中,选择“安全策略”。
选择相关分配。 默认分配为
ASC default
。打开“参数”选项卡,并根据需要修改这些值。
选择“查看 + 保存”。
选择“保存”。
若要强制实施任何建议:
打开建议详细信息页,然后选择“拒绝”:
这会打开一个窗格,你可以在其中设置作用域。
设置作用域后,选择“更改为拒绝”。
若要查看适用于你的群集的建议:
打开 Defender for Cloud 的资产清单页并使用资源类型筛选器筛选出“Kubernetes 服务”。
选择要调查的群集,并查看可用于该群集的可用建议。
查看工作负载保护集提供的建议时,你会看到受影响的 pod(“Kubernetes 组件”)的数目随群集一起列出。 有关特定 pod 的列表,请选择该群集,然后选择“采取操作”。
若要测试强制实施,请使用下面的两个 Kubernetes 部署:
一个是正常的部署,遵循工作负载保护建议捆绑包。
另一个是非正常的部署,不遵循任何建议。
按原样部署示例 .yaml 文件,或参考它们来修正你自己的工作负载(步骤 VIII)。
正常的部署示例 .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 数据平面强化。
有关其他相关材料,请参阅以下页面: