Kubernetes 中 API 安全加固

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
简介: Kubernetes 中 API 安全加固

网络异常,图片无法展示
|

使用 Kubernetes 部署容器化应用程序时,必须考虑应用程序所依赖的基础设施。在 Kubernetes 中保护应用程序或 API 时,请确保考虑云原生安全的 4C:云、集群、容器、代码。

遵循其中每一点的最佳实践可确保应用程序在安全环境中运行。这样的环境具有监控和避免各级意外行为的控件和组件,包括 Kubernetes 生态系统及其管理。

本文主要关注应用程序安全,讨论了入口控制器在 Kubernetes 中的作用(作为实现保护 API 最佳实践的一部分)。

提供单一入口点

默认情况下,pod 的端口不会暴露在 Kubernetes 集群之外。pod 可以通过服务进行分组,这些服务可以配置为公开 internet 上的端口。然而,服务资源是一个简单的组件。即使与负载均衡器结合使用,该设置也缺乏灵活性和适应性。另一方面,入口控制器提供了企业用例所需的许多功能,如基于名称的服务虚拟主机、路径映射、代理、响应缓存,最重要的是,还提供了身份验证或 TLS 终止等安全功能。

入口控制器为集群的单个入口点入口实现规则。作为该实现的一部分,入口控制器通常提供一系列安全功能。例如,NGINX 入口控制器支持 SSL 重定向、HTTP 严格传输安全(HSTS)或 HTTP 头过滤。根据入口控制器的选择,它甚至可以提供 API 网关的功能,如速率限制、聚合、监控或开发人员门户。一些入口控制器,如 Kong 入口控制器或 Tyk Operator,通过与 API 网关紧密集成,利用 Kubernetes 中的 API 网关功能。此外,三大云提供商提供云原生 Kubernetes 入口控制器,即 AWS 负载均衡器控制器、Azure 中的应用网关入口控制器和 GKE 入口控制器。

在 Kubernetes 中公开 API 时,使用入口控制器作为守门来保护集群中的所有服务。根据需求和以下最佳实践选择功能。

限制访问

作为单一入口点,入口控制器是实施身份验证和授权等安全策略的理想场所。这是一个常见的要求,入口控制器通常通过 OAuth 2.0 和 OpenID Connect 等开放标准提供身份验证支持。选择开放标准而不是专有解决方案是一种很好的做法,因为它支持互操作性和可移植性。当使用 OAuth 2.0 或 OpenID Connect 时,入口控制器可以在外围验证令牌。它还可以基于令牌中的数据(如颁发者、范围和受众参数)执行粗粒度访问控制,从而卸载 API。

在微服务架构中,一个服务可以调用另一个服务来满足请求。实际上,在返回响应之前可能会有一个完整的调用链。但是,并非链中的所有服务都需要相同的权限。因此,请确保令牌具有足够的权限。考虑令牌共享机制,以避免令牌过载,从而包含下游服务调用中可能需要或不需要的所有可能权限(作用域和声明)。

例如,让 OAuth 2.0 或 OpenID Connect 服务器发出包含另一个嵌入令牌的令牌,该令牌可用于下游服务调用。然而,这意味着令牌服务器必须事先知道要生成和嵌入哪些令牌。要做到这一点,它必须事先知道将调用哪些其他服务。在复杂的设置中,此要求可能很难维护。另一种更灵活的方法是令牌交换,即可以将现有令牌交换为新令牌。该协议类似于虚拟令牌方法,但它没有改变格式,而是改变了部分内容。

无论采用何种方法,转发定制令牌都是实现最小特权原则的一部分。最小特权原则减少了总体攻击面,因为利用特权和访问不应授予的服务和数据变得更具挑战性。

在成熟的设置中,入口控制器或 API 网关用于协调不同的微服务,它还将负责执行令牌交换。

不要相信任何人

最好的做法是不停在外围,而是实现零信任架构。确保集群中的所有服务请求都经过身份验证。服务网格在基础设施级别提供了这种方法。此外,OAuth 2.0 和 OpenID Connect 提供了应用程序级安全性工具。设计用于 API 中细粒度授权的访问令牌。

JSON Web 令牌(JWT)是访问令牌的流行格式。它们非常有用,因为它们支持零信任架构和自包含令牌。然而,如果未加密,此类令牌可能包含恶意参与者可以轻松解析的敏感数据。因此,JWT 只能在集群内使用。这被称为 Phantom Token 方法。

选择一个可扩展的入口控制器,以允许自定义和实现规则,例如 Phantom Token 方法或令牌交换所隐含的规则。它应该支持脚本功能或插件。后者更容易,因为你可以简单地添加和配置插件,而无需编写代码。特别是,你可以依靠安全专家的工作来获得与安全相关的插件。例如,使用为 NGINX 或 Kong 提供的插件来添加对 Phantom Token 方法的支持。但即使是脚本和配置也可以共享并用于分发零信任架构的安全最佳实践。

最佳实践一览

简而言之,在 Kubernetes 中保护 API 时,请考虑以下几点:

——使用入口控制器(或 API 网关)保护 Kubernetes 中 API 的所有服务。

——在外围执行粗粒度授权,并将细粒度决策留给 API。

——仔细设计令牌,并在需要时进行交换,以满足最小特权原则。

——依靠标准协议并使用可扩展性特性来实现零信任架构。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
Prometheus Kubernetes Cloud Native
云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
探索开源世界:Kubetools的推荐系统[Krs](https://github.com/kubetoolsca/krs)助力K8s优化,追踪K8s组件清单,指引IAC集成。阅读建议: Prometheus与Thanos的进化故事,Adidas容器平台管理经验,K8s请求实现详解。关注云原生:Argo Rollouts支持Gateway API 1.0,Kubewarden v1.14强化策略与镜像安全。
|
3月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
286 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
5月前
|
Kubernetes Serverless API
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
96 7
|
5月前
|
资源调度 Kubernetes API
在K8S中,能否实现不通过api-Server创建Pod?
在K8S中,能否实现不通过api-Server创建Pod?
|
5月前
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
5月前
|
Kubernetes 监控 API
在k8S中,各模块如何与API Server进行通信的?
在k8S中,各模块如何与API Server进行通信的?
|
5月前
|
存储 Kubernetes 负载均衡
在K8S中,api-server究竟是如何实现高可用?
在K8S中,api-server究竟是如何实现高可用?
|
6月前
|
Kubernetes Java 应用服务中间件
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
103 0
|
3天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
16天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。