AppArmor

AppArmor

【简介】

apparmor 是linux内核安全功能,可用于限制容器对资源的使用。 例如:容器使用linux内核能力,容器使用网络能力,容器对文件系统读写权限 等。

apparmor一条规则称为一个profile。profile可以 enforcingcomplain模式运行。

  • enforcing 可以理解为强制模式,需要容器必须符合规则
  • complain 可以理解为兼容模式,当容器不符合规范时仅仅打印提示信息



【前提条件】

  • 操作系统:Ubuntu 22.04

  • 内核支持

    cat /sys/module/apparmor/parameters/enabled
    Y
    
  • k8s>1.4版本,截止2023年功能仍处于beta阶段。

【示例】

  1. 编写apparmor插件,暂时不做深入研究语法

    tee test<<EOF
    #include <tunables/global>
    
    profile k8s-apparmor-example-deny-write flags=(attach_disconnected) {
      #include <abstractions/base>
    
      file,
    
      # 拒绝所有文件写入
      deny /** w,
    }
    EOF
    
  2. 加载插件

    # 加载配置文件到内核
    apparmor_parser -q test 
    
    # 查看是否加载成功
    # grep k8s-apparmor-example-deny-write /sys/kernel/security/apparmor/profiles
    
    root@master01:~# apparmor_status |grep k8s-apparmor-example-deny-write
       k8s-apparmor-example-deny-write
    
  3. 创建pod并使用该apparmor插件

    通过注解加载apparmor功能,注解格式如下:
    container.apparmor.security.beta.kubernetes.io/<容器名称>: <profile_ref>

    <profile_ref> 可以是以下取值之一:
    1.runtime/default 应用运行时的默认配置
    2. localhost/<profile_name>使用本地的profile插件
    3. unconfined 表示不加载配置文件

    kubectl run  busybox \
    --image=busybox  \
    --annotations=container.apparmor.security.beta.kubernetes.io/busybox=localhost/k8s-apparmor-example-deny-write \
    -- sleep 100
    
  4. 验证功能是否生效

    测试预期:无法写入文件

    root@master01:~# kubectl exec busybox -- cat /proc/1/attr/current
    k8s-apparmor-example-deny-write (enforce)
    
    root@master01:~# kubectl exec busybox -- touch /tmp/1
    touch: /tmp/1: Permission denied
    command terminated with exit code 1
    
posted @ 2024-02-22 10:14  mingtian是吧  阅读(58)  评论(0编辑  收藏  举报