Kubernetes 【安全】2. System Hardening - apparmor

简介: Kubernetes 【安全】2. System Hardening - apparmor

文章目录

现在,想想在生产中实施 AppArmor的挑战。


首先,您必须为每个容器构建强大的配置文件,以在不阻塞日常任务的情况下防止攻击。


然后,您将必须跨集群中的所有节点管理多个配置文件。


我们将介绍kube-apparmor-manager如何帮助管理部分,以及Sysdig Secure 中的图像分析功能如何帮助构建这些配置文件。

Kube-apparmor-manager

有一些工具,比如apparmor-loader,可以帮助管理 Kubernetes 集群中的 AppArmor 配置文件。Apparmor-loader作为特权守护进程运行,轮询包含 AppArmor 配置文件的配置映射,最后将配置文件解析为强制模式或投诉模式。然而,这引入了远非理想的特权工作负载。这就是为什么我们可以想出另一种方法。


Kube-apparmor-manager方法不同:


它使用自定义资源(apparmorprofiles.crd.security.sysdig.com)将配置文件表示为Kubernetes 对象。

一个kubectl插件转换AppArmorProfile对象,存储在ETCD,到实际AppArmor配置文件,并同步他们的节点之间。

让我们详细看看它们是如何工作的。

AppArmorProfile 自定义资源定义

AppArmorProfile CRD定义了一个架构来将 AppArmor 配置文件表示为 Kubernetes 对象。

这就是我们的示例 AppArmor 配置文件在这种格式下的样子:

apiVersion: crd.security.sysdig.com/v1alpha1
kind: AppArmorProfile
metadata:
  name: k8s-apparmor-example-deny-write
spec:
  # Add fields here
  enforced: true
  rules: |
    # read only file paths
    file,
    deny /** w,

该enforced字段指示配置文件处于强制模式还是投诉模式。该字段rules包含带有白名单或黑名单规则列表的 AppArmor 配置文件正文。

请注意,这是一个集群级别的对象。

Apparmor-manager 插件

在 Kubernetes 集群中安装 CRD 后,您可以开始使用 kubectl 与 AppArmorProfile 对象进行交互。但是,您仍然需要将 AppArmorProfile 对象中的内容转换为实际的 AppArmor 配置文件,并将它们分发到所有节点。


这就是apparmor-managerkubectl 插件所做的。


您可以使用krew安装它:

$ wget https://github.com/kubernetes-sigs/krew/releases/download/v0.4.2/krew-linux_amd64.tar.gz
$ tar xzvf krew-linux_amd64.tar.gz
$ mv krew-linux_amd64 /usr/local/bin/krew
$ krew install apparmor-manager
$ krew install krew
WARNING: To be able to run kubectl plugins, you need to add
the following to your ~/.bash_profile or ~/.bashrc:
    export PATH="${PATH}:${HOME}/.krew/bin"
and restart your shell.
Updated the local copy of plugin index.
Installing plugin: krew
Installed plugin: krew
\
 | Use this plugin:
 |  kubectl krew
 | Documentation:
 |  https://krew.sigs.k8s.io/
 | Caveats:
 | \
 |  | krew is now installed! To start using kubectl plugins, you need to add
 |  | krew's installation directory to your PATH:
 |  | 
 |  |   * macOS/Linux:
 |  |     - Add the following to your ~/.bashrc or ~/.zshrc:
 |  |         export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
 |  |     - Restart your shell.
 |  | 
 |  |   * Windows: Add %USERPROFILE%\.krew\bin to your PATH environment variable
 |  | 
 |  | To list krew commands and to get help, run:
 |  |   $ kubectl krew
 |  | For a full list of available plugins, run:
 |  |   $ kubectl krew search
 |  | 
 |  | You can find documentation at
 |  |   https://krew.sigs.k8s.io/docs/user-guide/quickstart/.
 | /
/
$ echo 'export PATH="${PATH}:${HOME}/.krew/bin"' >> /root/.bashrc 
$ kubectl krew install apparmor-manager

当apparmor-manager通过 SSH 与工作节点通信时,您需要设置一些环境变量:


SSH_USERNAME: SSH 用户名以访问工作节点。默认为admin.

SSH_PERM_FILE:用于访问工作节点的 SSH 私钥。默认为$HOME/.ssh/id_rsa.

SSH_PASSPHRASE: SSH 密码(仅当私钥受密码保护时才适用)。

如果节点上没有安装 AppArmor,apparmor-manager 可以帮助您使用以下命令在工作节点上启用 AppArmor:

$ kubectl apparmor-manager init

该init命令还将为您安装 CRD。

配置完所有内容后,您可以使用以下命令检查节点上 AppArmor 的状态:

$ kubectl apparmor-manager status
+-------------------------------+---------------+----------------+--------+------------------+
|           NODE NAME           |  INTERNAL IP  |  EXTERNAL IP   |  ROLE  | APPARMOR ENABLED |
+-------------------------------+---------------+----------------+--------+------------------+
| ip-172-20-45-132.ec2.internal | 172.20.45.132 | 54.91.xxx.xx   | master | false            |
| ip-172-20-54-2.ec2.internal   | 172.20.54.2   | 54.82.xx.xx    | node   | true             |
| ip-172-20-58-7.ec2.internal   | 172.20.58.7   | 18.212.xxx.xxx | node   | true             |
+-------------------------------+---------------+----------------+--------+------------------+

您还可以使用 kubectl 创建您的第一个 AppArmorProfile 对象:

$ kubectl apply -f deny-write.yaml
apparmorprofile.crd.security.sysdig.com/k8s-apparmor-example-deny-write created
$ kubectl get aap
NAME                              AGE
k8s-apparmor-example-deny-write   5s

创建后,您需要将 AppArmorProfiles 同步到工作节点:

$ kubectl apparmor-manager enforced
+-------------------------------+--------+---------------------------------------------------------------+
|           NODE NAME           |  ROLE  |                       ENFORCED PROFILES                       |
+-------------------------------+--------+---------------------------------------------------------------+
| ip-172-20-48-62.ec2.internal  | node   | /usr/sbin/ntpd,docker-default,k8s-apparmor-example-deny-write |
| ip-172-20-77-231.ec2.internal | node   | /usr/sbin/ntpd,docker-default,k8s-apparmor-example-deny-write |
| ip-172-20-80-19.ec2.internal  | master |                                                               |
| ip-172-20-97-60.ec2.internal  | node   | /usr/sbin/ntpd,docker-default,k8s-apparmor-example-deny-write |
+-------------------------------+--------+---------------------------------------------------------------+

这k8s-apparmor-example-deny-write是我们刚刚创建并同步的一个,而另外两个默认安装在 AppArmor 中。


最后一步是配置 Pod 以使用此配置文件,使用annotations我们之前看到的。


接下来,我们来谈谈如何使用 Sysdig Secure 构建健壮的 AppArmor 配置文件。

Sysdig Secure 构建强大的 Apparmor Profile

借助图像分析,Sysdig Secure 将分析容器 24 小时,了解预期的进程、文件系统活动、网络行为和系统调用。有了这些知识,您可以生成学习的映像配置文件,并使用它来创建运行时策略,以保护容器免受生产中的异常行为的影响。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|pod或容器的安全上下文配置解析
云原生|kubernetes|pod或容器的安全上下文配置解析
1296 0
|
弹性计算 Kubernetes 数据处理
KubeRay on ACK:更高效、更安全
阿里云 ACK 以托管组件化的方式给客户提供快速搭建Ray集群的能力,并通过结合使用阿里云的调度,存储,日志与监控,给用户提供更佳使用体验。
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
2857 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
935 5
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
772 3
|
Kubernetes 安全 数据安全/隐私保护
ACK场景下应用程序安全访问云资源最佳实践
在实际的容器安全实践中,怎么样避免应用程序永久访问密钥。本文会介绍基于云原生的产品能力来实现无AK方案。
1226 6
ACK场景下应用程序安全访问云资源最佳实践
|
存储 Kubernetes 数据安全/隐私保护
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
344 0
|
安全 容器
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——安全
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——安全自制脑图
397 2
|
存储 Kubernetes 安全
Kubernetes 和容器安全的 7 个关键特性
Kubernetes 和容器安全的 7 个关键特性
471 0
Kubernetes 和容器安全的 7 个关键特性
|
运维 Kubernetes 监控
面向 DevOps 的 Kubernetes 最佳安全实践
Hello folks,我是 Luga,今天我们来分享一下与云原生安全相关的话题,即面向“DevOps”的 Kubernetes 最佳安全实践。
470 1

热门文章

最新文章

推荐镜像

更多