在2019年底,由于该公司在业务研发过程中遇到了一些业务痛点,例如:该公司的开发技术堆栈与Java有关,而操作和维护工程师擅长于Shell和Python脚本,无法直接连接;该公司本身正在摆姿势。在快速增长的时期,工程师的发展不足,无法支持日常运营,维护以及操作以及维护平台的发展;在现有的操作和维护平台中,使用了各种开源工具,并且不集成且难以管理。因此,我启动了一个自动操作和维护平台的项目,希望通过此操作和此操作和维护平台,可以实现运营和维护工程师的开发,以自己开发业务并进行快速迭代服务。
同时,软WAF可以覆盖我们的安全业务场景的95%。作为Yunnian API网关,APISIX还提供了功能强大的日志功能并支持自定义日志格式,因此您可以直接允许访问日志连接Elk。还支持自定义插头的开发,可以根据我们的需求灵活地扩展。谢谢基本功能和APISIX系统的功能强大的插头,开发成本可以有效地降低。
自动操作和维护平台的总体体系结构如下:
对于所有Web框架,用户登录都是必须的,我将接下来向您介绍此场景。
首先,我们需要了解下一个场景中使用的相关组件。第一个是访问的前端。这在门户外面。其次,使用Apisix Yunya API网关作为业务边界。在Auth Service是一种自定义的微服务之后,角色是检查前端的URL请求和用户登录请求,并向认证的用户发出标记。LDAP.LDAP将密码信息存储在公司内。CMDB存储一些与业务相关的信息,包括组织结构,一些可以访问的权限的组织信息,最后是需要在前端访问的页面。
了解上述组件后,我将介绍总体过程:
当用户登录时,您首先需要通过网关查询。是否访问页面在白色列表上。由于某些页面不需要权限验证,例如:默认页面或某些错误页面。如果需要验证访问页面,则这些请求将通过相关转发到许可认证服务插头。
在“权限认证”中,检查服务将根据“用户名”和“密码”在LDAP中检查是否正确。您可以通过CMDB查看。在获取resultsmethods令牌存储后。如果用户将来继续访问,则网关将从cookie转移以前存储的令牌,以验证当前用户是否可以继续访问该页面。
在这里,我们使用apisix插头-in。上面提到的权限认证实际上是通过插件完成的。我们不需要在后台反复认证。
通过上述描述,我相信每个人都对正常请求过程有一定的了解。接下来,我将向您介绍如何判断这些用户权限不足的场景。在操作和维护平台,如果有涉及数据更改的操作,则必须携带令牌。当ACL接口验证此令牌接口时,无权访问权,并且将直接返回禁止的页面以允许前端进行处理。以下是用户登录和权限验证方案和相关的特定过程更多使用的组件。
在日常工作中,我们经常启动一些微服务,因此如何获得此微服务以访问自动化操作和维护平台?
我们将规定,无论工程师使用哪种语言开发微服务,我们都需要使用YAPI来定义API。因此,YAPI控制我们可以访问的所有URL,并且在此处都有统一的入口。因为YAPI支持各种环境,各种环境,,,,,环境,,环境我们在YAPI中定义了不同的操作环境。最典型的例子是:在生产环境中,我们将使用域名访问;在开发环境中,它直接用于访问。完成YAPI的定义后,它可以通过模拟生成一系列请求用例,这非常有利于以下 - UP生产环境测试。所有微型服务接口可以通过HTTP请求称为模拟。
接下来是权威管理服务。这里的所有操作都是自动的:它读取YAPI的API定义,然后生成一系列ACL规则。对于权限管理,我们在平台中使用管理页面:管理员可以通过此操作管理URL访问规则页。设置设置后,表单数据将更改为一系列ACL权限定义并存储在数据库中。在服务启动过程中,平台使用的Cachebin访问模型将直接将这些规则加载到内存中,并且然后生成一系列APISIX消费者的定义和路由表,然后将其写入APISIX等。完成上述操作后,当用户访问它时,平台可以直接通过APISIX进行管理。
该模型不仅适用于自动操作和维护平台,还适用于各种中小型业务系统。
通过上面的场景描述,我相信每个人都对整个系统都有一般的了解。接下来,我将介绍一些技术细节。
因为APISIX是基于NGINX + LUA实现的,因此需要通过NGINX库来实现某些功能。从上图,我们可以看到可以在各种LUA脚本中切入nginx。可以执行重写/访问和内容阶段。
因为在重写/访问阶段中,数据包尚未传输到上游,因此可以在此阶段执行各种数据预处理。从上图,我们可以看到,在此阶段,您可以使用拒绝命令到在此阶段管理权限,包括接口权限和IP访问 - 白色列表。稍后所述的插头 - 在此阶段实现。
其次,在此阶段,通常用于在请求访问时在HTTP请求标题上插入一些其他请求标头。例如,当我们需要发布在线灰度时,您可以将徽标位置添加到用户的请求标题中。通过这些徽标站点,您可以控制这些请求可以使用的后端服务来实现灰度发行。当然,我们还可以使用Apisix插件来释放灰度。
最后一个是舞台。在此阶段,我们可以直接输入一些跟踪信息或直接输入日志文件的一些失败信息。相似,Apisix还提供了许多插件,包括,等等。
插头的实现非常简单。首先,当请求用户时,我们将在cookie中的cookie添加相关的JWT令牌。之后,用户将从cookie访问的cookie中提取JWT令牌,然后解码令牌并获取用户信息。
在重写阶段中,通过使用用户ID,方法和URI,启动请求以验证背景ACL接口的权限。如果您通过它,您将在日志中记录相关信息以获取未来的安全认证。如果它失败,返回错误状态代码并将其记录到错误日志中。
在APISIX版本1.1中,当时未发布插件-in,因此对于Cross -domain请求,我们还通过插件实现了。请求获取和发布请求方法时,将执行相关的处理。如果是其他请求,它将直接通过,现在您可以使用apisix插件来实现。现在开发不仅LUA,还请参考:https://apisix.apache.org/zh/docs/apisix/plugin-develop。
身份验证服务是支持插件的认证服务。此服务的功能非常简单,主要是在请求消息中读取信息,然后解码所需的身份验证元素,然后将其转发到相关服务界面。接口将根据认证信息返回相应的结果,APISIX将根据结果拒绝或传递请求。
身份验证服务中的核心函数是将ACL规则从数据库加载到内存中。主函数分为两个部分:
以上是架构和一些基于Apache Apisix的自动化操作和维护平台的方案。很强大。如果您有任何疑问,请前往社区进行交流和讨论。
原始:https://juejin.cn/post/7109401671565836301