Azure Kubernetes 服务 (AKS) Ubuntu 映像与 Internet 安全中心 (CIS) 基准保持一致
Azure Kubernetes 服务 (AKS) 是符合 SOC、ISO、PCI DSS 和 HIPAA 标准的安全服务。 本文介绍适用于 AKS 使用的 Ubuntu 映像的安全 OS 配置。 此安全配置基于符合 CIS 基准的 Azure Linux 安全基线。 有关 AKS 安全性的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中应用程序和群集的安全性概念。 有关 AKS 安全性的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中应用程序和群集的安全性概念。 有关 CIS 基准的更多信息,请参阅 Internet 安全中心 (CIS) 基准。 有关 Linux 的 Azure 安全基线的详细信息,请参阅 [Linux 安全基线][linux-security-baseline]。
Ubuntu LTS 18.04
AKS 群集部署在主机虚拟机上,该虚拟机运行具有内置安全配置的操作系统。 此操作系统用于 AKS 上运行的容器。 此主机操作系统基于应用安全配置的 Ubuntu 18.04.LTS 映像。
作为安全优化操作系统的一部分:
- AKS 默认提供经过安全优化的主机 OS,但不提供选择备用操作系统的选项。
- 经过安全优化的主机 OS 是专门为 AKS 构建和维护的,因此,仅在 AKS 平台受支持。
- 为了减少受攻击面,我们在 OS 中禁用了一些不必要的内核模块驱动程序。
注意
与 CIS 基准无关,Azure 会将每日修补程序(包括安全修补程序)应用到 AKS 虚拟主机。
内置安全配置的主机 OS 旨在减少受攻击面,并以安全的方式优化容器部署。
以下是 CIS Ubuntu 18.04 LTS 基准 v2.1.0 建议的结果。
建议可能有以下原因之一:
- 潜在的操作影响 - 未应用建议,因为该建议会对服务产生负面影响。
- 在其他地方覆盖 - 建议由 Azure 云计算中的另一个控件覆盖。
以下是实现的 CIS 规则:
CIS 段落编号 | 建议说明 | 状态 | 原因 |
---|---|---|---|
1 | 初始设置 | ||
1.1 | 文件系统配置 | ||
1.1.1 | 禁用未使用的文件系统 | ||
1.1.1.1 | 确保禁用装载 cramfs 文件系统的功能 | 通过 | |
1.1.1.2 | 确保禁用装载 freevxfs 文件系统的功能 | 通过 | |
1.1.1.3 | 确保禁用装载 jffs2 文件系统的功能 | 通过 | |
1.1.1.4 | 确保禁用装载 hfs 文件系统的功能 | 通过 | |
1.1.1.5 | 确保禁用装载 hfsplus 文件系统的功能 | 通过 | |
1.1.1.6 | 确保禁用装载 udf 文件系统的功能 | 失败 | 潜在的操作影响 |
1.1.2 | 确保已配置 /tmp | 失败 | |
1.1.3 | 确保在 /tmp 分区上设置 nodev 选项 | 失败 | |
1.1.4 | 确保在 /tmp 分区上设置 nosuid 选项 | 通过 | |
1.1.5 | 确保在 /tmp 分区上设置 noexec 选项 | 通过 | |
1.1.6 | 确保已配置 /dev/shm | 通过 | |
1.1.7 | 确保在 /dev/shm 分区上设置 nodev 选项 | 通过 | |
1.1.8 | 确保在 /dev/shm 分区上设置 nosuid 选项 | 通过 | |
1.1.9 | 确保在 /dev/shm 分区上设置 noexec 选项 | 失败 | 潜在的操作影响 |
1.1.12 | 确保 /var/tmp 分区包含 nodev 选项 | 通过 | |
1.1.13 | 确保 /var/tmp 分区包含 nosuid 选项 | 通过 | |
1.1.14 | 确保 /var/tmp 分区包含 noexec 选项 | 通过 | |
1.1.18 | 确保 /home 分区包含 nodev 选项 | 通过 | |
1.1.19 | 确保在可移动媒体分区上设置 nodev 选项 | 不适用 | |
1.1.20 | 确保在可移动媒体分区上设置 nosuid 选项 | 不适用 | |
1.1.21 | 确保在可移动媒体分区上设置 noexec 选项 | 不适用 | |
1.1.22 | 确保在所有全局可写入的目录上设置粘滞位 | 失败 | 潜在操作影响 |
1.1.23 | 禁用自动装载 | 通过 | |
1.1.24 | 禁用 USB 存储 | 通过 | |
1.2 | 配置软件更新 | ||
1.2.1 | 确保配置包管理器存储库 | 通过 | 在其他地方覆盖 |
1.2.2 | 确保已配置 GPG 密钥 | 不适用 | |
1.3 | 文件系统完整性检查 | ||
1.3.1 | 确保已安装 AIDE | 失败 | 在其他地方覆盖 |
1.3.2 | 确保定期检查文件系统完整性 | 失败 | 在其他地方覆盖 |
1.4 | 安全启动设置 | ||
1.4.1 | 确保未覆盖启动加载程序配置的权限 | 失败 | |
1.4.2 | 确保已设置启动加载程序密码 | 失败 | 不适用 |
1.4.3 | 确保配置了对引导加载程序配置的权限 | 失败 | |
1.4.4 | 确保进行单用户模式所需的身份验证 | 失败 | 不适用 |
1.5 | 其他进程强化 | ||
1.5.1 | 确保已启用 XD/NX 支持 | 不适用 | |
1.5.2 | 确保已启用地址空间布局随机化 (ASLR) | 通过 | |
1.5.3 | 确保已禁用预链接 | 通过 | |
1.5.4 | 确保已对核心转储进行限制 | 通过 | |
1.6 | 强制访问控制 | ||
1.6.1 | 配置 AppArmor | ||
1.6.1.1 | 确保已安装 AppArmor | 通过 | |
1.6.1.2 | 确保已在启动加载程序配置中启用 AppArmor | 失败 | 潜在操作影响 |
1.6.1.3 | 确保所有 AppArmor 配置文件都处于强制或抱怨模式 | 通过 | |
1.7 | 命令行警告横幅 | ||
1.7.1 | 确保已正确配置当天的消息 | 通过 | |
1.7.2 | 确保配置 /etc/issue.net 上的权限 | 通过 | |
1.7.3 | 确保配置 /etc/issue 上的权限 | 通过 | |
1.7.4 | 确保已配置 /etc/motd 上的权限 | 通过 | |
1.7.5 | 确保正确配置远程登录警告横幅 | 通过 | |
1.7.6 | 确保正确配置本地登录警告横幅 | 通过 | |
1.8 | GNOME 显示管理器 | ||
1.8.2 | 确保已配置 GDM 登录横幅 | 通过 | |
1.8.3 | 确保已启用 disable-user-list | 通过 | |
1.8.4 | 确保未启用 XDCMP | 通过 | |
1.9 | 确保已安装更新、修补程序和其他安全软件 | 通过 | |
2 | 服务 | ||
2.1 | 特殊用途服务 | ||
2.1.1 | 时间同步 | ||
2.1.1.1 | 确保正在使用时间同步 | 通过 | |
2.1.1.2 | 确保已配置 systemd-timesyncd | 不适用 | AKS 使用 ntpd 进行时间同步 |
2.1.1.3 | 确保配置 chrony | 失败 | 在其他地方覆盖 |
2.1.1.4 | 确保配置 ntp | 通过 | |
2.1.2 | 确保未安装 X Window 系统 | 通过 | |
2.1.3 | 确保未安装 Avahi 服务器 | 通过 | |
2.1.4 | 确保未安装 CUPS | 通过 | |
2.1.5 | 确保未安装 DHCP 服务器 | 通过 | |
2.1.6 | 确保未安装 LDAP 服务器 | 通过 | |
2.1.7 | 确保未安装 NFS | 通过 | |
2.1.8 | 确保未安装 DNS 服务器 | 通过 | |
2.1.9 | 确保未安装 FTP 服务器 | 通过 | |
2.1.10 | 确保未安装 HTTP 服务器 | 通过 | |
2.1.11 | 确保未安装 IMAP 和 POP3 服务器 | 通过 | |
2.1.12 | 确保未安装 Samba | 通过 | |
2.1.13 | 确保未安装 HTTP 代理服务器 | 通过 | |
2.1.14 | 确保未安装 SNMP 服务器 | 通过 | |
2.1.15 | 确保邮件传输代理配置为仅限本地模式 | 通过 | |
2.1.16 | 确保未安装 rsync 服务 | 失败 | |
2.1.17 | 确保未安装 NIS 服务器 | 通过 | |
2.2 | 服务客户端 | ||
2.2.1 | 确保未安装 NIS 客户端 | 通过 | |
2.2.2 | 确保未安装 rsh 客户端 | 通过 | |
2.2.3 | 确保未安装 talk 客户端 | 通过 | |
2.2.4 | 确保未安装 telnet 客户端 | 失败 | |
2.2.5 | 确保未安装 LDAP 客户端 | 通过 | |
2.2.6 | 确保未安装 RPC | 失败 | 潜在的操作影响 |
2.3 | 确保删除或屏蔽不重要的服务 | 通过 | |
3 | 网络配置 | ||
3.1 | 禁用未使用的网络协议和设备 | ||
3.1.2 | 确保已禁用无线接口 | 通过 | |
3.2 | 网络参数(仅主机) | ||
3.2.1 | 确保禁用数据包重定向发送 | 通过 | |
3.2.2 | 确保已禁用 IP 转发 | 失败 | 不适用 |
3.3 | 网络参数(主机和路由器) | ||
3.3.1 | 确保不接受源路由的数据包 | 通过 | |
3.3.2 | 确保不接受 ICMP 重定向 | 通过 | |
3.3.3 | 确保不接受安全 ICMP 重定向 | 通过 | |
3.3.4 | 确保记录可疑的数据包 | 通过 | |
3.3.5 | 确保忽略广播 ICMP 请求 | 通过 | |
3.3.6 | 确保忽略虚假的 ICMP 响应 | 通过 | |
3.3.7 | 确保已启用反转路径筛选 | 通过 | |
3.3.8 | 确保已启用 TCP SYN Cookie | 通过 | |
3.3.9 | 确保不接受 IPv6 路由器播发 | 通过 | |
3.4 | 不常见网络协议 | ||
3.5 | 防火墙配置 | ||
3.5.1 | 配置 UncomplicatedFirewall | ||
3.5.1.1 | 确保已安装 ufw | 通过 | |
3.5.1.2 | 确保 iptables-persistent 未随 ufw 一起安装 | 通过 | |
3.5.1.3 | 确保已启用 ufw 服务 | 失败 | 在其他地方覆盖 |
3.5.1.4 | 确保已配置 ufw 环回流量 | 失败 | 在其他地方覆盖 |
3.5.1.5 | 确保已配置 ufw 出站连接 | 不适用 | 在其他地方覆盖 |
3.5.1.6 | 确保所有打开端口都存在 ufw 防火墙规则 | 不适用 | 在其他地方覆盖 |
3.5.1.7 | 确保 ufw 启用默认的“拒绝防火墙”策略 | 失败 | 在其他地方覆盖 |
3.5.2 | 配置 nftables | ||
3.5.2.1 | 确保已安装 nftables | 失败 | 在其他地方覆盖 |
3.5.2.2 | 确保 ufw 已随 nftable 一起卸载或禁用 | 失败 | 在其他地方覆盖 |
3.5.2.3 | 确保 iptable 已随 nftable 一起刷新 | 不适用 | 在其他地方覆盖 |
3.5.2.4 | 确保存在 nftables 表 | 失败 | 在其他地方覆盖 |
3.5.2.5 | 确保存在 nftables 基链 | 失败 | 在其他地方覆盖 |
3.5.2.6 | 确保已配置 nftables 环回流量 | 失败 | 在其他地方覆盖 |
3.5.2.7 | 确保已配置 nftables 出站连接和已建立连接 | 不适用 | 在其他地方覆盖 |
3.5.2.8 | 确保 nftables 启用默认的“拒绝防火墙”策略 | 失败 | 在其他地方覆盖 |
3.5.2.9 | 确保已启用 nftables 服务 | 失败 | 在其他地方覆盖 |
3.5.2.10 | 确保 nftables 规则是永久性的 | 失败 | 在其他地方覆盖 |
3.5.3 | 配置 iptables | ||
3.5.3.1 | 配置 iptables 软件 | ||
3.5.3.1.1 | 确保已安装 iptables 包 | 失败 | 在其他地方覆盖 |
3.5.3.1.2 | 确保 nftable 未随 iptable 一起安装 | 通过 | |
3.5.3.1.3 | 确保 ufw 已随 iptables 一起卸载或禁用 | 失败 | 在其他地方覆盖 |
3.5.3.2 | 配置 IPv4 iptables | ||
3.5.3.2.1 | 确保 iptables 启用默认的“拒绝防火墙”策略 | 失败 | 在其他地方覆盖 |
3.5.3.2.2 | 确保已配置 iptables 环回流量 | 失败 | 不适用 |
3.5.3.2.3 | 确保已配置 iptables 出站连接和已建立连接 | 不适用 | |
3.5.3.2.4 | 确保所有打开端口都存在 iptables 防火墙规则 | 失败 | 潜在操作影响 |
3.5.3.3 | 配置 IPv6 ip6tables | ||
3.5.3.3.1 | 确保 ip6tables 启用默认的“拒绝防火墙”策略 | 失败 | 在其他地方覆盖 |
3.5.3.3.2 | 确保已配置 ip6tables 环回流量 | 失败 | 在其他地方覆盖 |
3.5.3.3.3 | 确保已配置 ip6tables 出站连接和已建立连接 | 不适用 | 在其他地方覆盖 |
3.5.3.3.4 | 确保所有打开端口都存在 ip6tables 防火墙规则 | 失败 | 在其他地方覆盖 |
4 | 日志记录和审核 | ||
4.1 | 配置系统会计(审核) | ||
4.1.1.2 | 确保启用审核 | ||
4.1.2 | 配置数据保留 | ||
4.2 | 配置日志记录 | ||
4.2.1 | 配置 rsyslog | ||
4.2.1.1 | 确保已安装 rsyslog | 通过 | |
4.2.1.2 | 确保启用 rsyslog 服务 | 通过 | |
4.2.1.3 | 确保配置日志记录。 | 通过 | |
4.2.1.4 | 确保已配置 rsyslog 默认文件权限 | 通过 | |
4.2.1.5 | 确保 rsyslog 配置为将日志发送到远程日志主机 | 失败 | 在其他地方覆盖 |
4.2.1.6 | 确保仅在指定的日志主机上接受远程 rsyslog 消息。 | 不适用 | |
4.2.2 | 配置日记 | ||
4.2.2.1 | 确保日志配置为将日志发送到 rsyslog | 通过 | |
4.2.2.2 | 确保日志配置为压缩大型日志文件 | 失败 | |
4.2.2.3 | 确保日志配置为将日志文件写入永久性磁盘 | 通过 | |
4.2.3 | 确保所有日志文件的权限都已配置 | 失败 | |
4.3 | 确保已配置 logrotate | 通过 | |
4.4 | 确保 logrotate 分配适当的权限 | 失败 | |
5 | 访问,身份验证和授权 | ||
5.1 | 配置基于时间的作业计划程序 | ||
5.1.1 | 确保已启用 cron 守护程序并运行 | 通过 | |
5.1.2 | 确保配置 /etc/crontab 上的权限 | 通过 | |
5.1.3 | 确保已配置 /etc/cron.hourly 的权限 | 通过 | |
5.1.4 | 确保已配置 /etc/cron.daily 的权限 | 通过 | |
5.1.5 | 确保已配置 /etc/cron.weekly 的权限 | 通过 | |
5.1.6 | 确保已配置 /etc/cron.monthly 的权限 | 通过 | |
5.1.7 | 确保已配置 /etc/cron.d 的权限 | 通过 | |
5.1.8 | 确保 cron 仅限于授权用户 | 失败 | |
5.1.9 | 确保 at 仅限于授权用户 | 失败 | |
5.2 | 配置 sudo | ||
5.2.1 | 确保已安装 sudo | 通过 | |
5.2.2 | 确保 sudo 命令使用 pty | 失败 | 潜在的操作影响 |
5.2.3 | 确保 sudo 日志文件存在 | 失败 | |
5.3 | 配置 SSH 服务器 | ||
5.3.1 | 确保已配置 /etc/ssh/sshd_config 的权限 | 通过 | |
5.3.2 | 确保已配置 SSH 私有主机密钥文件的权限 | 通过 | |
5.3.3 | 确保已配置 SSH 公共主机密钥文件的权限 | 通过 | |
5.3.4 | 确保限制 SSH 访问权限 | 通过 | |
5.3.5 | 确保 SSH LogLevel 合适 | 通过 | |
5.3.7 | 确保将 SSH MaxAuthTries 设置为 4 或更小的数字 | 通过 | |
5.3.8 | 确保已启用 SSH IgnoreRhosts | 通过 | |
5.3.9 | 确保已禁用 SSH HostbasedAuthentication | 通过 | |
5.3.10 | 确保禁用 SSH 根登录 | 通过 | |
5.3.11 | 确保已禁用 SSH PermitEmptyPasswords | 通过 | |
5.3.12 | 确保禁用 SSH PermitUserEnvironment | 通过 | |
5.3.13 | 确保仅使用强密码 | 通过 | |
5.3.14 | 确保仅使用强 MAC 算法 | 通过 | |
5.3.15 | 确保仅使用强密钥交换算法 | 通过 | |
5.3.16 | 确保配置 SSH 空闲超时间隔 | 失败 | |
5.3.17 | 确保将 SSH LoginGraceTime 设置为一分钟或更短的时间 | 通过 | |
5.3.18 | 确保配置 SSH 警告横幅 | 通过 | |
5.3.19 | 确保已启用 SSH PAM | 通过 | |
5.3.21 | 确保已配置 SSH MaxStartups | 失败 | |
5.3.22 | 确保对 SSH MaxStartups 进行限制 | 通过 | |
5.4 | 配置 PAM | ||
5.4.1 | 确保配置密码创建要求 | 通过 | |
5.4.2 | 确保为失败的密码尝试配置锁定 | 失败 | |
5.4.3 | 确保对密码重用进行限制 | 失败 | |
5.4.4 | 确保密码哈希算法为 SHA-512 | 通过 | |
5.5 | 用户帐户和环境 | ||
5.5.1 | 设置阴影密码套件参数 | ||
5.5.1.1 | 确保已配置密码更改最短间隔时间 | 通过 | |
5.5.1.2 | 确保密码有效期小于或等于 365 天 | 通过 | |
5.5.1.3 | 确保将密码过期警告天数设为 7 天或以上 | 通过 | |
5.5.1.4 | 确保非活动密码在 30 天或更短的时间内锁定 | 通过 | |
5.5.1.5 | 确保所有用户的上次密码更改日期都是过去的日期 | 失败 | |
5.5.2 | 确保系统帐户受到保护 | 通过 | |
5.5.3 | 确保根帐户的默认组为 GID 0 | 通过 | |
5.5.4 | 确保默认的用户 umask 为 027(或更严格的标准) | 通过 | |
5.5.5 | 确保默认用户 shell 超时为 900 秒或更短 | 失败 | |
5.6 | 确保根登录仅限于系统控制台 | 不适用 | |
5.7 | 确保限制对 su 命令的访问 | 失败 | 潜在操作影响 |
6 | 系统维护 | ||
6.1 | 系统文件权限 | ||
6.1.2 | 确保已配置 /etc/passwd 的权限 | 通过 | |
6.1.3 | 确保已配置 /etc/passwd- 的权限 | 通过 | |
6.1.4 | 确保已配置 /etc/group 的权限 | 通过 | |
6.1.5 | 确保已配置 /etc/group- 的权限 | 通过 | |
6.1.6 | 确保已配置 /etc/shadow 的权限 | 通过 | |
6.1.7 | 确保已配置 /etc/shadow- 的权限 | 通过 | |
6.1.8 | 确保已配置 /etc/gshadow 的权限 | 通过 | |
6.1.9 | 确保已配置 /etc/gshadow- 的权限 | 通过 | |
6.1.10 | 确保不存在全局可写文件 | 失败 | 潜在操作影响 |
6.1.11 | 确保不存在无属主文件或目录 | 失败 | 潜在操作影响 |
6.1.12 | 确保不存在无属组文件或目录 | 失败 | 潜在操作影响 |
6.1.13 | 审核 SUID 可执行文件 | 不适用 | |
6.1.14 | 审核 SGID 可执行文件 | 不适用 | |
6.2 | 用户和组设置 | ||
6.2.1 | 确保 /etc/passwd 中的帐户使用隐藏密码 | 通过 | |
6.2.2 | 确保密码字段不为空 | 通过 | |
6.2.3 | 确保 /etc/passwd 中的所有组也均存在于 /etc/group 中 | 通过 | |
6.2.4 | 确保所有用户的主目录都存在 | 通过 | |
6.2.5 | 确保用户拥有其主目录 | 通过 | |
6.2.6 | 确保用户的主目录权限限制为 750 或更高 | 通过 | |
6.2.7 | 确保用户的点文件不可由组或在全局范围内写入 | 通过 | |
6.2.8 | 确保无用户具有 .netrc 文件 | 通过 | |
6.2.9 | 确保无用户具有 .forward 文件 | 通过 | |
6.2.10 | 确保无用户具有 .rhosts 文件 | 通过 | |
6.2.11 | 确保根账号是唯一的 UID 0 帐户 | 通过 | |
6.2.12 | 确保根 PATH 完整性 | 通过 | |
6.2.13 | 确保不存在重复的 UID | 通过 | |
6.2.14 | 确保不存在重复的 GID | 通过 | |
6.2.15 | 确保不存在重复的用户名 | 通过 | |
6.2.16 | 确保不存在重复的组名 | 通过 | |
6.2.17 | 确保卷影组为空 | 通过 |
后续步骤
有关 AKS 安全性的详细信息,请参阅以下文章: