Kubernetes 【安全】2. System Hardening - apparmor

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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 小时,了解预期的进程、文件系统活动、网络行为和系统调用。有了这些知识,您可以生成学习的映像配置文件,并使用它来创建运行时策略,以保护容器免受生产中的异常行为的影响。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|pod或容器的安全上下文配置解析
云原生|kubernetes|pod或容器的安全上下文配置解析
483 0
|
26天前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
115 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
5月前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
126 5
|
5月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
128 3
|
6月前
|
存储 Kubernetes 数据安全/隐私保护
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
92 0
|
6月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|apparmor的配置和使用
云原生|kubernetes|apparmor的配置和使用
787 0
|
6月前
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|安全漏扫神器trivy的部署和使用
云原生|kubernetes|安全漏扫神器trivy的部署和使用
414 0
|
6月前
|
Kubernetes 安全 容器
k8s学习-CKS真题-TLS安全配置
k8s学习-CKS真题-TLS安全配置
147 0
|
6月前
|
Kubernetes 容器
k8s-CKS真题-k8s安全策略PodSecurityPolicy
k8s-CKS真题-k8s安全策略PodSecurityPolicy
62 0
|
6月前
|
Kubernetes 安全 容器
k8s学习-CKS真题-Context安全上下文
k8s学习-CKS真题-Context安全上下文
124 0