Skip to content
Stack Ashes
Go back

集群级别的最佳 Kubernetes 安全实践。

靶场概述

难度: hard 描述:集群级别的最佳 Kubernetes 安全实践。 这个房间适合所有有抱负的 DevSecOps 工程师和花时间学习该工具基础知识的 Kubernetes 爱好者。它适用于了解该工具、其工作原理以及构建安全 Kubernetes 集群时要采取的初始步骤的人。但现在怎么办?您已经构建了一个安全的集群,但如何确保其安全?随着 Kubernetes 被用作编排容器化应用程序的平台,必须在不同的层上考虑许多不同的安全因素。对于那些希望登上 DevSecOps Express 的人来说,甚至对于那些已经登上的人来说,这可能会让人不知所措。因此,这个房间旨在收集一些关键的最佳 Kubernetes 安全实践,以使您的旅程更加顺畅。全体上车!


基本信息

🚀本地机器信息目标机器信息
IP10.17.5.121
OSkali

基础知识

Kubernetes 中最重要的安全实践之一是高效、安全地实施访问控制。服务账户是 Access Control 难题的一部分,您需要完成它才能了解如何实现。服务帐户在 Kubernetes 简介房间中简要介绍了,但现在是时候更深入地了解它们是什么以及它们在 Kubernetes 中的使用方式了。“服务帐户”是如果您使用其他云技术时可能熟悉的通用术语。在这个任务中,我们将在 Kubernetes 的上下文中定义一个 Service 帐户,一个 ServiceAccount 对象。

服务帐户可以被视为数字身份或非人类帐户。在 Kubernetes 中,此身份在安全上下文中用于将身份与特定进程相关联。换句话说,集群内部和外部的 Kubernetes 系统组件、应用程序 Pod 或其他实体都可以使用 ServiceAccount 凭证来标识此 ServiceAccount。从安全角度来看,这意味着可以进行 API 身份验证,或者如前所述,可以使用这些 ServiceAccount 实现身份 / 访问控制。

ServiceAccounts 与用户 

这里是一个很好的观点,可以强调 ServiceAccount 的 “非人类账户” 方面,并消除关于人类用户被身份验证 / 授权进入集群的任何混淆。以下是有关 ServiceAccounts 和 Users 的一些信息。

服务账户用户
由 K8s 管理在 K8s 之外管理
由 API 创建没有 “User” Kubernetes Object
具有存储为 Secrets 的关联凭证无法通过 API 创建

从本质上讲,用户访问通常使用某种帐户管理解决方案来处理。Kubernetes 确实有一个内置的,但它通常与另一个用户管理系统(如 LDAP 或 AD)集成。对集群及其资源的非人工访问使用 Kubernetes ServiceAccounts 处理。

User and ServiceAccount

ServiceAccounts 具有以下属性:

**轻量级:**Kubernetes ServiceAccounts 允许您创建与 Kubernetes 集群中的特定任务/进程关联的账户。这省去了使用用户账户运行流程带来的许多麻烦(使用与用户账户创建中涉及的数据库相关的特殊系统和业务逻辑),并且更容易根据最小权限原则定义更精细的、特定于任务的权限。

**命名空间:**在 Kubernetes 中,ServiceAccounts 是一个命名空间资源,这意味着 ServiceAccount 名称只需要在它们关联的命名空间中是唯一的。每个命名空间在创建时都会获得一个与之关联的默认 ServiceAccount,该名称恰如其分地命名为 “default”。假设您没有在 pod/deployment 定义中手动定义 ServiceAccount。在这种情况下,这个 “默认” ServiceAccount(在创建 Pod 的命名空间中)将被分配给它,并且 ServiceAccounts 凭证(令牌)将作为 secret 挂载到它上面。请注意,默认情况下,“默认”ServiceAccount 的权限很少,因此如果任务需要更多权限,则需要创建一个 ServiceAccount。

**便携式:**由于 ServiceAccount 是轻量级的,并且只需要在命名空间级别是唯一的,因此它们可以捆绑在一起以供其他命名空间或项目使用,从而使其具有可移植性。

这些属性适用于多种用例。作为 DevSecOps 工程师,在处理这些问题时,您的 ServiceAccount 意识应该令人耳目一新。以下是一些示例:

ServiceAccounts 的创建和配置

使用 kubectl 定义 ServiceAccounts 非常容易。您可以使用以下命令在集群上创建 ServiceAccount。
**注意:**serviceaccount 可以缩写为 sa

kubectl 创建服务帐户

thm@k8s:~$ kubectl create serviceaccount example-name --namespace example-namespace

如果您希望此 ServiceAccount 与特定 Pod 相关联,则可以在 pod/部署配置 YAML 中定义,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  Namespace: example-namespace
spec:
  serviceAccountName: example-sa
  containers:
  - name: example-container
    image: nginx:latest
    ports:
    - containerPort: 80

信息搜集

攻击向量

漏洞利用

提权

知识点回顾

总结


Share this post on:

Previous Post
智能合约的问和答
Next Post
LLM攻击