当前位置: 首页 > news >正文

云原生密钥管理:Sealed Secrets与Vault


在云原生环境中,密钥管理是保障系统安全的关键环节。密钥就像是一把打开系统资源的“钥匙”,如果管理不当,就会面临密钥泄露、管理失败等严重问题,从而威胁整个云原生系统的安全。而 Sealed Secrets 和 Vault 就是解决这些问题的有效工具。接下来,我们将深入了解它们的原理、使用方法,并通过实操演示,帮助你掌握在 Kubernetes 中安全管理密钥的技能。

Sealed Secrets 和 Vault 密钥管理原理

Sealed Secrets 原理

Sealed Secrets 是一个用于在 Kubernetes 中安全管理密钥的工具。它的核心原理是利用非对称加密技术,将敏感的密钥信息(如密码、令牌等)加密成一种称为 SealedSecret 的对象。

简单来说,非对称加密就像是有两把钥匙,一把是公钥,一把是私钥。公钥可以公开,任何人都可以用它来加密数据,但只有对应的私钥才能解密这些数据。在 Sealed Secrets 中,Kubernetes 集群会生成一个公钥,用户使用这个公钥将普通的 Secret 对象加密成 SealedSecret 对象。这个 SealedSecret 对象可以安全地存储在版本控制系统中,因为没有私钥,即使数据被泄露,攻击者也无法解密其中的敏感信息。

例如,假设你有一个应用程序需要使用数据库的用户名和密码,你可以将这些信息创建成一个普通的 Secret 对象,然后使用 Sealed Secrets 的公钥将其加密。加密后的 SealedSecret 对象可以放心地提交到代码仓库,当部署到 Kubernetes 集群时,集群中的控制器会使用私钥将其解密成普通的 Secret 对象,供应用程序使用。

Vault 原理

Vault 是一个功能强大的密钥管理系统,它提供了集中化的密钥管理和访问控制。Vault 的原理基于一个核心的安全存储库,所有的密钥、证书和其他敏感信息都存储在这个存储库中。

Vault 通过身份验证和授权机制来控制对这些敏感信息的访问。用户或应用程序需要先通过身份验证,获得一个令牌,然后使用这个令牌来请求访问存储在 Vault 中的密钥。Vault 会根据预先配置的策略来决定是否授予访问权限。

例如,某个微服务需要访问数据库的密钥,它首先要向 Vault 进行身份验证,提供自己的身份信息。如果验证通过,Vault 会根据策略判断该微服务是否有权限访问数据库密钥。如果有权限,Vault 会将密钥返回给微服务,并且可以设置密钥的有效期,过期后自动失效,从而增强了安全性。

Sealed Secrets 和 Vault 使用方法

Sealed Secrets 使用方法

Sealed Secrets 的使用主要分为以下几个步骤:

  • 安装 Sealed Secrets 控制器:在 Kubernetes 集群中安装 Sealed Secrets 控制器,它负责处理 SealedSecret 对象的解密操作。可以使用 Helm 或 YAML 文件进行安装。例如,使用 Helm 安装的命令如下:
helm repoaddsealed-secrets https://bitnami-labs.github.io/sealed-secrets helminstallsealed-secrets-controller sealed-secrets/sealed-secrets
  • 生成 SealedSecret 对象:首先创建一个普通的 Secret 对象,然后使用 kubeseal 命令将其加密成 SealedSecret 对象。例如,创建一个包含数据库用户名和密码的 Secret 对象:
kubectl create secret generic db -secret --from -literal=username=admin --from -literal=password=123456-o yaml --dry -run=client>db - secret.yaml

接着使用 kubeseal 命令进行加密:

kubeseal<db - secret.yaml>db - sealed - secret.yaml
  • 部署 SealedSecret 对象:将生成的 SealedSecret 对象部署到 Kubernetes 集群中,Sealed Secrets 控制器会自动将其解密成普通的 Secret 对象。
kubectl apply -f db - sealed - secret.yaml
Vault 使用方法

Vault 的使用步骤如下:

  • 安装和启动 Vault:可以从官方网站下载 Vault 的二进制文件,然后在服务器上启动 Vault 服务。例如,在 Linux 系统上启动 Vault 开发模式:
vault server -dev
  • 初始化和 unseal Vault:首次启动 Vault 时,需要进行初始化操作,生成根令牌和 unseal 密钥。然后使用 unseal 密钥对 Vault 进行解封,使其可以正常使用。例如,初始化 Vault:
vault operator init

使用 unseal 密钥解封:

vault operator unseal<unseal - key>
  • 存储和获取密钥:使用 Vault 的 API 或命令行工具将密钥存储到 Vault 中,并在需要时获取。例如,存储一个数据库密钥:
vault kv put secret/dbusername=adminpassword=123456

获取密钥:

vault kv get secret/db

Sealed Secrets 和 Vault 安装、配置示例

Sealed Secrets 安装、配置
  • 安装:如前面所述,可以使用 Helm 进行安装。安装完成后,检查 Sealed Secrets 控制器是否正常运行:
kubectl get pods -n kube - system|grepsealed - secrets - controller
  • 配置:Sealed Secrets 通常不需要太多的额外配置。但可以根据需要调整一些参数,如加密算法等。可以通过修改 Sealed Secrets 控制器的部署文件来进行配置。
Vault 安装、配置
  • 安装:从官方网站下载适合你操作系统的 Vault 二进制文件,然后将其添加到系统的 PATH 环境变量中。
  • 配置:创建一个 Vault 的配置文件,指定存储后端、监听地址等信息。例如,创建一个名为 vault.hcl 的配置文件:
storage "file" { path = "/vault/data" } listener "tcp" { address = "0.0.0.0:8200" tls_disable = 1 }

然后使用该配置文件启动 Vault:

vault server -config=vault.hcl

实操演示:在 Kubernetes 中安全管理密钥

使用 Sealed Secrets 管理密钥
  1. 创建普通 Secret 对象:按照前面的示例,创建一个包含敏感信息的普通 Secret 对象。
  2. 加密成 SealedSecret 对象:使用 kubeseal 命令将普通 Secret 对象加密成 SealedSecret 对象。
  3. 部署 SealedSecret 对象:将 SealedSecret 对象部署到 Kubernetes 集群中,验证是否成功解密成普通 Secret 对象。可以使用以下命令查看解密后的 Secret 对象:
kubectl get secret db - secret -o yaml
使用 Vault 管理密钥
  1. 启动 Vault 服务:按照前面的步骤启动 Vault 服务,并进行初始化和解封操作。
  2. 存储密钥到 Vault:使用 Vault 的命令行工具将密钥存储到 Vault 中。
  3. 在 Kubernetes 中集成 Vault:可以使用 Vault Agent Injector 来实现 Kubernetes 与 Vault 的集成。首先安装 Vault Agent Injector,然后创建一个包含 Vault 访问信息的 Pod 模板。例如,创建一个名为 app - pod.yaml 的文件:
apiVersion:v1kind:Podmetadata:name:app-podannotations:vault.hashicorp.com/agent - inject:"true"vault.hashicorp.com/role:"app - role"vault.hashicorp.com/agent - inject - secret - db:"secret/db"spec:containers:-name:app-containerimage:nginx

部署该 Pod,验证是否成功从 Vault 中获取密钥。

总结

通过学习 Sealed Secrets 和 Vault 的密钥管理原理、使用方法,以及进行实际的安装、配置和操作演示,你已经掌握了在云原生环境中使用这两个工具实现密钥安全管理的技能。Sealed Secrets 利用非对称加密技术,将敏感信息加密后可以安全地存储在版本控制系统中;Vault 则提供了集中化的密钥管理和访问控制,增强了密钥的安全性和可控性。

掌握了云原生密钥管理中 Sealed Secrets 与 Vault 的相关内容后,下一节我们将深入学习云原生网络安全防护策略,进一步完善对本章云原生安全实践主题的认知。—


🍃 系列专栏导航


  • 🔖 《深入浅出云原生》

  • 🍃 博客概览:《程序员技术成长导航,专栏汇总》
http://www.jsqmd.com/news/145089/

相关文章:

  • 基于深度学习的电动车头盔佩戴检测系统
  • 嚯,拼多多也开奖了
  • OpenAI ChatGPT功能大升级,NVIDIA斯坦福开源游戏AI,通义千问Qwen Code生态扩展,中国AI产业突破万亿大关
  • 艾曲波帕联合治疗方案:肿瘤放化疗后血小板低的优化策
  • 分布式ID之雪花算法
  • 2026年最新权威AI编程软件评测和推荐
  • 实用指南:Spring Boot:DTO、VO、BO、Entity 的正确工程化分层
  • 基于springboot二手物品交易平台系统(源码+lw+部署文档+讲解等)
  • 虚拟机操作系统选择指南(2025)
  • 权威报告与专家共识加持,五大专家推荐宝宝敏感肌纸尿裤品牌助力宝宝远离干红痒 - 速递信息
  • DDD笔记 | 领域驱动设计(DDD)实战
  • STM32F103 学习笔记-21-串口通信(第1节)-串口通信协议简介
  • 快速幂
  • 学长亲荐8个AI论文软件,研究生论文写作不再难!
  • nt!MiInitializeLoadedModuleList分析和全局变量nt!PsLoadedModuleList初始化和LoaderBlock->LoadOrderListHead的关系非常重要
  • 私有知识库:数字时代的知识守护者
  • 【课程设计/毕业设计】基于Java的网上宠物店管理系统基于java的宠物用品店系统【附源码、数据库、万字文档】
  • 【mac如何连接redis】很好用的一款Redis客户端
  • Java计算机毕设之基于Java的网上宠物店管理系统宠物种类管理、宠物信息管理、食品类型管理(完整前后端代码+说明文档+LW,调试定制等)
  • transformer-explainer
  • 安装FunASR
  • 【开题答辩全过程】以 河金新生报到管理APP为例,包含答辩的问题和答案
  • 编译安装Freeswitch 1.10.12
  • 虚拟桌面是什么?Windows 自带的高效办公与摸鱼神器
  • 汽车领域智能体构建全解析—腾讯云黑客松Agent应用创新挑战赛微信公众号赛道实战复盘
  • 英伟达圣诞偷袭,200亿美元收购Groq
  • 鸿蒙开发入门:从环境搭建到第一个ArkTS应用,30分钟上手
  • 【计算机毕业设计案例】基于springboot的课程互助学习系统“资源共享 - 协作学习 - 互助答疑(程序+文档+讲解+定制)
  • [从程序员到架构师] 微服务场景实战 - 注册发现
  • 安装nvm管理node版本