kubernetes之Apparmor

容器运行使用的是宿主机的CPU、内存、内核等资源。在容器中的操作也和影响到操作系统上,同样,在操作系统中的漏洞也肯恩影响到容器的运行。例如,容器运行时和加载底层操作系统的linux内核中的模块,如果宿主机linux的内核中加载了有扣动的模块,则会影响到容器的安全,所以我们也需要在操作系统层面进行加固。

kubernetes之Apparmor_第1张图片

一、最小权限原则

最小权限原则(Principle of least privilege,POLP):是一种信息安全概念,即为用户提供执行其工作职责的最小权限等或许可。

最小权限原则被广泛认为是网络安全的最佳实践,也是饱和高价值数据和资产的特权访问的基本方式。

1.1 最小特权原则重要性:

减少网络攻击面: 当今,大多数高级攻击都依赖于利用特权凭证。通过限制超级用户和管理员权限,最小权限执行有助于减少总体网络攻击面。
阻止恶意软件的传播: 通过在服务器或者在应用系统上执行最小权限,恶意软件攻击(例如SQL注入攻击)将很难提权来增加访问权限并横向移动破坏其他软件、设备。
有助于简化合规性和审核 :许多内部政策和法规要求都要求组织对特权帐户实施最小权限原则,以防止对关键业务系统的恶意破坏。最小权限执行可以帮助组织证明对特权活动的完整审核跟踪的合规性。

1.2 实现方式

  1. 在内部、云、DevOps环境和端点中,审核整个环境以查找特权帐户(例如密码、SSH密钥、密码哈希和访问密钥)。
  2. 消除不必要的本地管理员权限,并确保所有人类用户和非人类用户仅具有执行其工作所需的权限。
  3. 将管理员帐户与标准帐户分开,并隔离特权用户会话。
  4. 将特权管理员帐户凭据提供给数字保管库,以开始保护和管理这些帐户。
  5. 每次使用后,立即轮换所有管理员密码,以使按键记录软件可能已捕获的所有凭据无效,并降低哈希传递的风险。
  6. 持续监视与管理员帐户有关的所有活动,以快速检测和警告可能表明正在进行攻击的异常活动。
  7. 启用即时访问特权升级,允许用户根据需要临时访问特权帐户或运行特权命令。

二、Apparmor

AppArmor(Application Armor) 是一个 Linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能。每个进程都可以拥有自己的安全配置文件。安全配置文件用来允许或禁止特定功能,例如网络访问、文件读/写/执行权限等。Apparmor已经内置在Ubuntu、Debian中
Linux内核已启用AppArmor,查看 cat /sys/module/apparmor/parameters/enabled。容器运行时需要支持AppArmor,目前Docker已支持

2.1 Apparmor两种工作模式

Enforcement(强制模式) :在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。使用aa-enforce <程序名>开启
Complain(投诉模式):在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。一般用于调试。使用aa-complain <程序名>
Disable: 此时对应配置文件不加载,没有对程序行为进行限制。aa-disable <程序名>

2.2 Apparmor使用

Apparmor通过配置文件来管理各个程序的权限。配置文件的文件名通常是其控制的程序的完整路径名(比如 /etc/apparmor.d/usr.sbin.nginx 是控制nginx的配置文件)。生效的配置文件的位置是/etcd/apparmor.d,
安装;
apt install apparmor-utils apparmor-profiles apparmor-profiles-extra
之后使用命令 aa-enabled 可以查看Apparmor 是否开启买也可以使用aa-status来查看Apparmor的运行状态
aa-enabled
> Yes
常用命令:
apparmor_status:查看AppArmor配置文件的当前状态的
apparmor_parser:将AppArmor配置文件加载到内核中
     • apparmor_parser # 加载到内核中
     • apparmor_parser -r # 重新加载配置
     • apparmor_parser -R # 删除配置
aa-complain:将AppArmor配置文件设置为投诉模式,需要安装apparmor-utils软件包
aa-enforce:将AppArmor配置文件设置为强制模式,需要安装apparmor-utils软件包

三、示例

案例:容器文件系统访问限制
步骤:
1、将自定义策略配置文件保存到/etc/apparmor.d/
2、加载配置文件到内核:apparmor_parser
3、Pod注解指定策略配置名
kubernetes之Apparmor_第2张图片

  限制容器对目录或者文件的访问

apiVersion: v1
kind: Pod
metadata:
  name: hello-apparmor
annotations:
  container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-deny-write
spec:
  containers:
    - name: hello
    image: busybox
    command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]

你可能感兴趣的:(kubernetes,容器,云原生)