kubernetes--AppArmor限制容器对资源访问

介绍

AppArmor(ApplicationArmor)是一个Linux内核安全模块,可用于限制主机操作系统上运行的进程的功能。每个进程都可以拥有自己的安全配置文件。安全配置文件用来允许或禁止特点功能,例如网络访问、文件读/写/执行权限等

linux发行版内置:Ubuntu、Debian 在cents中是selinux,相比于linux更易于使用

工作流程

1、创建一个pod在注解里指定apparmor的profile

2、文件在对应宿主机上,对应宿主机的kubelet读取对应配置

3、如果pod的请求profile里拒绝,则pod没有权限

AppArmor两种工作模式

Enforcement(强制模式):在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些挟制条件的程序会进行日志记录

Complain(投诉模式):在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录一般用于调试

常用命令:

apparmor_status: 查看AppArmor配置文件的当前状态的

apparmor_parser:将AppArmor配置文件加载到内核中

apparmor_parser<profile> #加载到内核中

apparmor_parser-r <profile> #重新加载配置

apparmor_parser-R <profile> #删除配置

aa_complaij:将AppArmor配置文件设置为投诉模式,需要安装apparmor-utils软件包

aa-enforce:将AppArmor配置文件设置为强制模式,需要安装apparmor-utils软件包

K8s使用APPArmor的先决条件:

系统ubentu内置 centos不内置 做此实验用ubentu

K8s版本v1.4+,检查是否支持:kubectl describe node |grep AppArmor

Linux内核已启用AppArmor,查看cat /sys/module/apparmor/parameters/enabled

容器运行时需要支持AppArmor,目前Docker已支持

apiVersion: v1
kind: Pod
metadata:
  name: hello-apparmor
  annotations:
    # 告知 Kubernetes 去应用 AppArmor 配置 "k8s-apparmor-example-deny-write"。
    # 请注意,如果节点上运行的 Kubernetes 不是 1.4 或更高版本,此注解将被忽略。
    container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-deny-write
spec:
  containers:
  - name: hello
    image: busybox:1.28
    command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]

container.apparmor.security.beta.kubernetes.io/<container_name>: <profile_ref>

<container_name> 的名称是配置文件所针对的容器的名称,<profile_def> 则设置要应用的配置文件。 <profile_ref> 可以是以下取值之一:

  • runtime/default 应用运行时的默认配置

  • localhost/<profile_name> 应用在主机上加载的名为 <profile_name> 的配置文件

  • unconfined 表示不加载配置文件

<profile_ref>

#<container_name>Pod中容器名

#<profile_ref>pod所在宿主机上策略名,默认目录/etc/apparmor.d

访问文件权限模式

字符

描述

r

w

a

追加

k

文件加锁

l

链接

x

可执行

通配符

描述

示列

*

在目录级别匹配零个或多个字符

/dir/* 匹配目录中的任何文件

/dir/a* 匹配目录中以a开头的任意文件

/dir/*.png 匹配目录中以.png结尾的任意文 件

/dir/a*/ 匹配/dir里面以a开头的目录

/dir/*a/ 匹配/dir里面以a结尾的目录

**

在多个目录级别匹配零个或多个字符

/dir/** 匹配/dir目录或者/dir目录下任何文件 和目录 /dir/**/ 匹配/dir或者/dir下面任何目录

[] [^]

字符串,匹配其中任意字符

/dir/[^.]* 匹配/dir目录中以.之外的任何文件 /dir/**[^/] 匹配/dir目录或者/dir下面的任何 目录中的任何文件

案列:容器文件系统访问限制

步骤

1、将自定义策略配置文件保存到/etc/apparmor.d/修改文件即时生效

2、加载配置文件到内核:apparmor_parser<profile>

3、pod注解指定策略配置名

1.自定义配置文件及对应说明

vi /etc/apparmor.d/k8s-deny-write
#include <tunables/global>

profile k8s-apparmor-example-deny-write flags=(attach_disconnected) {
  #include <abstractions/base>

  file,

  # 拒绝所有文件写入,拒绝指定文件或者目录 deny /data/* w
  deny /** w,
}
#第一行:导入依赖,遵循c语言约定
#第二行:指定策略名
#第三行:{}策略块

2.加载至内核

【】cd /etc/apparmor.d/

【】apparmor_parser -r k8s-deny-write

【】apparmor_status |grep k8s

3、pod注解指定策略配置名并测试

【】kubectl apply -f apparmor.yaml#在上文

【】kubectl exec -it hello-apparmor bash

【】mkdir /test

4、创建其他pod可进行正常创建等行为

【】kubectl create deployment web --image=nginx-n zn

【】kubectl exec -it -n zn web-8667899c97-4s52r

【】mkdir /tmp/123

【】touch test

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值