
新钛云服已为您服务1486天

本文的的核心内容是提供有关如何设置 Gitlab 和 Vault 以在 CI/CD 管道构建期间使用密钥。另外,本文将分解 JWT 授权过程,并解释 Gitlab + Vault 的流程。通过本文,读者最终可以实现自己的带有 Vault 密钥的 CI/CD 流程。

目的
在 Vault 上启用 JWT 身份验证方法
利用 JWT 授权从 Vault 中读取密钥以进行 Gitlab CI/CD 作业
背景
什么是 Gitlab?
GitLab 是一个基于 Web 的 DevOps 生命周期工具 ,它提供了一个 Git 代码存储库管理,同时它使用 GitLab Inc 开发的开源许可证提供 wiki、问题跟踪以及持续集成和pipeline的功能。
在学习Gitlab的定义之前,首先需要了解一些术语。可能您经常遇到像Git,Gitlab,GitHub和Bitbucket这样的术语。
Git - 它是一个源代码版本控制系统,可让您在本地跟踪更改并从远程资源推送或提取更改。 GitLab ,GitHub和Bitbucket - 提供远程访问Git存储库的服务。除了托管代码之外,这些服务还提供用来帮助管理软件开发生命周期的附加功能。这些附加功能包括管理不同人之间的代码共享,错误跟踪,wiki空间和其他“社交编码”工具。
GitHub 是一项公开可用的免费服务,它要求所有代码(除非您有付费帐户)公开。任何人都可以看到您推送给GitHub的代码并提供改进建议。GitHub目前承载数以万计的开源项目的源代码。
GitLab是一种类似github的服务,组织可以使用它来提供git存储库的内部管理。它是一个自我托管的Git-repository管理系统,可以保持用户代码的私密性,并且可以轻松地部署代码的更改。
GitLab是集中服务器上管理git存储库的一个好方法。GitLab让您可以完全控制您的存储库或项目,并允许您自己决定是公共还是私有。
什么是HashiCorp Vault?
在企业级应用开发过程中,团队每时每刻都需要管理各种各样的私密信息,从个人的登陆密码、到生产环境的SSH Key以及数据库登录信息、API认证信息等。通常的做法是将这些秘密信息保存在某个文件中,并且放置到git之类的源代码管理工具中。个人和应用可以通过拉取仓库来访问这些信息。但这种方式弊端很多,比如跨团队分享存在安全隐患、文件格式难以维护、私密信息难以回收等。
尤其是微服务大行其道的今天,如何让开发者添加私密信息、应用程序能轻松的获取私密信息、采用不同策略更新私密信息、适时回收私密信息等变得越来越关键。所以企业需要一套统一的接口来处理私密信息的方方面面,而HashiCorp Vault就是这样的一款工具。
Vault 是 hashicorp 推出的 secrets 管理、加密即服务与权限管理工具。
它提供了这些功能:
集中管理各种私密信息;
为私密信息设置租期(Lease),到期后自动失效;
密钥的动态生成、注销和滚动更新;
动态创建无需保存的一次性登录密钥;
作为数据加密/解密接口;
完整的审计记录;
命令行 以及 RESTful API 访问接口;
· Valut存储私密信息
不仅可以存放现有的私密信息,还可以动态生成用于管理第三方资源的私密信息。所有存放的数据都是加密的。任何动态生成的私密信息都有租期,并且到期会自动回收。
· 滚动更新秘钥
用户可以随时更新存放的私密信息。Vault提供了加密即服务(encryption-as-a-service)的功能,可以随时将密钥滚动到新的密钥版本,同时保留对使用过去密钥版本加密的值进行解密的能力。对于动态生成的秘密,可配置的最大租赁寿命确保密钥滚动易于实施。
· 审计日志
保管库存储所有经过身份验证的客户端交互的详细审核日志:身份验证,令牌创建,私密信息访问,私密信息撤销等。可以将审核日志发送到多个后端以确保冗余副本。
另外,HaishiCorp Vault提供了多种方式来管理私密信息。用户可以通过命令行、HTTP API等集成到应用中来获取私密信息。HashiCorp Vault也能与Ansible、Chef、Consul等DevOps工具链无缝结合使用。
什么是 CI/CD?
CI/CD 自动化了将代码从开发人员机器交付到生产环境的过程。虽然只有短短数语,但如上图所示,该流程本质上包含很多步骤的。本节将详细描述该过程。CI/CD 代表持续集成和持续部署,正如上面缩写以及图所示,这是两个不同的阶段。持续集成是集成代码更改的过程,验证新代码更改仍然可以构建/编译应用程序,并确保新代码通过一组测试。
缩略词 CI / CD 具有几个不同的含义。CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
CI/CD 中的"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。
持续交付通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或Gitlab),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。
例如,假设您有一个用 GoLang 编写的 Web 应用程序。作为开发人员,您对本地开发机器上的现有应用程序进行一些更改,并将更改推送到 Gitlab。接下来,Gitlab 将尝试使用您的更改编译现有代码库。假设编译成功,Gitlab 将对新编译的代码进行多次测试,以确保应用程序按预期运行。如果测试成功,开发人员可以将更改合并到 MAIN 分支中。
现在你可能会问如果这个阶段不成功会发生什么?使用上面的示例,假设您初始化了一个未使用的变量。如果您是 GoLang 开发人员,您已经知道这将无法编译,但对于本示例,假设代码已推送到 Gitlab。Gitlab 将再次尝试编译包含您的更改的代码。但是,编译将失败,并且通常管道将在第一次出现错误时停止运行。Gitlab 将为开发人员提供审查产生的错误的能力。在解决此问题之前,Gitlab 将不允许合并新代码。
持续部署是再次评估/测试新提交的代码的过程,将应用程序推送给 QA 以进行进一步评估,最后在人工交互后将代码推送到生产环境。推送到产线(生产)意味着将您的代码推送到环境中,以便用户可以使用您的新代码。同样,正如上面的图表所示,此过程还有

本文详细介绍了如何设置GitLab和Vault以在CI/CD管道中使用JWT授权来安全地从Vault获取密钥。首先解释了GitLab、HashiCorp Vault和CI/CD的概念,接着详细阐述了JWT授权过程,包括JWT的生成、验证和使用。随后,文章逐步指导如何在GitLab项目中创建和配置Vault,包括启用JWT身份验证、创建密钥、设置策略和角色,以及在`.gitlab-ci.yml`中获取Vault密钥。通过本文,读者可以了解到使用Vault加密的GitLab CI/CD管道的实现方法。

最低0.47元/天 解锁文章
153

被折叠的 条评论
为什么被折叠?



