《OpenShift / RHEL / DevSecOps 汇总目录》
文本已在 OpenShift 4.10 环境中进行验证。

为什么在 GitOps 过程中要保护 Secret 中的敏感数据

在 Kubernetes 或 OpenShift 环境中通常使用 Secret 类型对象保存用户和密码等敏感信息。虽然 Secret 会使用 Base64 对明文数据进行加密保存,但是这还不够安全。尤其是在基于 GitOps 的自动化部署过程中,保存这些敏感数据的 Secret 就放在可能任何人都可以访问的 Git Repository 中,因此就需要保护在 GitOps 过程中使用的 Secret 敏感数据。

SealedSecret 工作原理

kubeseal 运行包括两部分:部署在 OpenShift 中的 SealedSecretController,以及客户端 kubeseal 命令。使用过程大致如下:

  1. 通过 kubeseal 命令并使用 OpenShift 认可的公钥对 Secret 中的敏感数据进行加密,生成 SealedSecret 类型 YAML。加密后的 SealedSecret YAML 文件就可以放心存放在 Git Repository 中了。
  2. 在 GipOps 过程中首先 SealedSecret 对象会被部署在 OpenShift 项目中,然后 SealedSecretController 会根据 SealedSecret 对象以及系统私钥生成 Secret 对象。

安装环境

安装服务端

  1. 执行命令,在 kube-system 项目中部署 sealed-secrets-controller。
$ oc apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.18.2/controller.yaml
  1. 确认 sealed-secrets-controller 已经部署成功。
$ oc get deploy -n kube-system sealed-secrets-controller
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
sealed-secrets-controller   1/1     1            1           2m
  1. 查看 sealed-secrets-controller 的运行日志,确认 sealed-secrets-controller 创建了 kube-system/sealed-secrets-keyXXXXX 证书。
$ oc logs -n kube-system deploy/sealed-secrets-controller
controller version: 0.18.2
2022/09/21 03:02:28 Starting sealed-secrets controller version: 0.18.2
2022/09/21 03:02:28 Searching for existing private keys
2022/09/21 03:02:32 New key written to kube-system/sealed-secrets-keyzbk87
2022/09/21 03:02:32 Certificate is
-----BEGIN CERTIFICATE-----
MIIEzDCCArSgAwIBAgIQXDpPt5ppBPmawIpBqzYNlzANBgkqhkiG9w0BAQsFADAA
MB4XDTIyMDkyMTAzMDIzMloXDTMyMDkxODAzMDIzMlowADCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBAM4JVqTLoPrM/1uFI0GdrSPFgkyHpXLipZr4KGEa
53eBWZ7XeHX3RVNTwXQXCuveZPMSDiXL3JBVt/WwKHopowuq1XCK0G5PUQlzM9c3
l6eAfB8Se6lUofVRVThD75k/RwkDskdx4xxSvYrQKi9CrG7OvdrKEFxSJbuOWAIL
VyXG+MR9cWtKg2NTYu7cFBYjhAVymk6IotGbjRL352LP9XyEUYE0XCLYaP57WwVL
jGOUUqRy0oWtYd9UH2b7tZbY5JMM7imCCEZtCltM9SqKgZU3Q07DJ51O025++bYg
GyDztof1B8MwSErvWx0QCbI+RsSIIgRy6Rc3gOqV0nu5RWml6zg3T0TGFbuWsjLe
SfC6tpnxeGdizm8qwWOKxa1hfrdP/CQx3LdkSuAWO1+MQh9ZW09bzRM36xOxHU5B
aUN9QJ6dcpUnmLF6ptWm77mllhPN0fJh2i4e/hmm7dGZI6MYFn6Vt1dYy0YMEcA6
DaBJIlzHPuqckU00pc3qn0MCujH50w+PoZNK0I0mtRL9b1hFWMVQ0s0PWpfHgX8X
QjsT/LN2gm0nM0/SktjDC28pI2FZpCo0Kc9U8uqM0AUf7wb7rzB1noPizKnawsVe
aM9WGV+Wx7yQmchiaFRWgllzyR58164hhw5emelVVUMEY+iKmPRyNM2ralpSjoFY
m8t/AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIAATAPBgNVHRMBAf8EBTADAQH/MB0G
A1UdDgQWBBRUzpEg1KGpzint0spIRo6C97tHxDANBgkqhkiG9w0BAQsFAAOCAgEA
kzHDA4XSAkD62aZi5kpoJ87SxkfsEhkio9ZQZFrOfMu+G3INmLZcKqokXXEJeEyn
hUsA2RS6toQO+devaTW312Ggrwn5XMQFWXPsZ7dUn/Ph1y25B+h0ekfv1B9J3pab
PvLcOY1F9bZRd2qj2FPUZBRIz8uO8nsHc/AZxxLAfkle72pvjRErRYYP0O1rZm90
iutQfe77NMtYisk3n/2wXx6S8iAiSQn81ECwJaGCbvggFrnSn/JJYAAiG2eMkt9l
t/HbTvzVBnXIJOZXaazKd2Na5wNmSKcsknVQhkAIf7VHYXA6eMIAYgai8fEh3KB3
pMEkaOhPUZUWgxv+bq+um5KDpQzgZx+Dx/nGCdJfa7yQHMHRzMgYOoryb6BwtL8h
Ue3Y9N9OCcpoW1aXjmffV2Z7+udKTFpOp/sFQc5DJnunTFS9dyqESQiA55U/PLGy
vkjSfA6+ybIeFzy1DlcQcAOE5ewOiVaATp4Em8T1c75/eU+dBsU9w07NRYA4H8NB
PT2GUG/d656AkMOn/OBEKoDZc9AaiaCXjIWJHAiart4u9W3tdpi2ymDOUyDXgXPa
WjGGkOx6rabMdeb6GxTSZNoUKcNkEdJqshoBrAZ1rS8b29xjZcugRFHmurxEZWRv
S4VjvLJqAeDW1BkOGLfi9L44AcKW/yyMAUwQ1cglEMY=
-----END CERTIFICATE-----2022/09/21 03:02:32 HTTP server serving on :8080
  1. 查看 sealed-secrets-keyzbk87 中包含的秘钥内容。
$ oc get secret -n  kube-system sealed-secrets-keyzbk87 -oyaml
  1. 执行命令可将公钥证书下载到本地(确认其内容和上面日志中的证书相同),以便在 kubeseal 无法访问 OpenShift 时使用。
$ kubeseal --fetch-cert > my-pub-cert.pem
$ cat my-pub-cert.pem
-----BEGIN CERTIFICATE-----
MIIEzDCCArSgAwIBAgIQXDpPt5ppBPmawIpBqzYNlzANBgkqhkiG9w0BAQsFADAA
MB4XDTIyMDkyMTAzMDIzMloXDTMyMDkxODAzMDIzMlowADCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBAM4JVqTLoPrM/1uFI0GdrSPFgkyHpXLipZr4KGEa
53eBWZ7XeHX3RVNTwXQXCuveZPMSDiXL3JBVt/WwKHopowuq1XCK0G5PUQlzM9c3
l6eAfB8Se6lUofVRVThD75k/RwkDskdx4xxSvYrQKi9CrG7OvdrKEFxSJbuOWAIL
VyXG+MR9cWtKg2NTYu7cFBYjhAVymk6IotGbjRL352LP9XyEUYE0XCLYaP57WwVL
jGOUUqRy0oWtYd9UH2b7tZbY5JMM7imCCEZtCltM9SqKgZU3Q07DJ51O025++bYg
GyDztof1B8MwSErvWx0QCbI+RsSIIgRy6Rc3gOqV0nu5RWml6zg3T0TGFbuWsjLe
SfC6tpnxeGdizm8qwWOKxa1hfrdP/CQx3LdkSuAWO1+MQh9ZW09bzRM36xOxHU5B
aUN9QJ6dcpUnmLF6ptWm77mllhPN0fJh2i4e/hmm7dGZI6MYFn6Vt1dYy0YMEcA6
DaBJIlzHPuqckU00pc3qn0MCujH50w+PoZNK0I0mtRL9b1hFWMVQ0s0PWpfHgX8X
QjsT/LN2gm0nM0/SktjDC28pI2FZpCo0Kc9U8uqM0AUf7wb7rzB1noPizKnawsVe
aM9WGV+Wx7yQmchiaFRWgllzyR58164hhw5emelVVUMEY+iKmPRyNM2ralpSjoFY
m8t/AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIAATAPBgNVHRMBAf8EBTADAQH/MB0G
A1UdDgQWBBRUzpEg1KGpzint0spIRo6C97tHxDANBgkqhkiG9w0BAQsFAAOCAgEA
kzHDA4XSAkD62aZi5kpoJ87SxkfsEhkio9ZQZFrOfMu+G3INmLZcKqokXXEJeEyn
hUsA2RS6toQO+devaTW312Ggrwn5XMQFWXPsZ7dUn/Ph1y25B+h0ekfv1B9J3pab
PvLcOY1F9bZRd2qj2FPUZBRIz8uO8nsHc/AZxxLAfkle72pvjRErRYYP0O1rZm90
iutQfe77NMtYisk3n/2wXx6S8iAiSQn81ECwJaGCbvggFrnSn/JJYAAiG2eMkt9l
t/HbTvzVBnXIJOZXaazKd2Na5wNmSKcsknVQhkAIf7VHYXA6eMIAYgai8fEh3KB3
pMEkaOhPUZUWgxv+bq+um5KDpQzgZx+Dx/nGCdJfa7yQHMHRzMgYOoryb6BwtL8h
Ue3Y9N9OCcpoW1aXjmffV2Z7+udKTFpOp/sFQc5DJnunTFS9dyqESQiA55U/PLGy
vkjSfA6+ybIeFzy1DlcQcAOE5ewOiVaATp4Em8T1c75/eU+dBsU9w07NRYA4H8NB
PT2GUG/d656AkMOn/OBEKoDZc9AaiaCXjIWJHAiart4u9W3tdpi2ymDOUyDXgXPa
WjGGkOx6rabMdeb6GxTSZNoUKcNkEdJqshoBrAZ1rS8b29xjZcugRFHmurxEZWRv
S4VjvLJqAeDW1BkOGLfi9L44AcKW/yyMAUwQ1cglEMY=
-----END CERTIFICATE-----

安装客户端

  1. 运行命令安装客户端
$ wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.18.2/kubeseal-0.18.2-linux-amd64.tar.gz
$ tar -xvzf kubeseal-0.18.2-linux-amd64.tar.gz kubeseal
$ sudo install -m 755 kubeseal /usr/local/bin/kubeseal

验证

  1. 创建测试项目
$ oc new-project mysecret
  1. 执行命令生成定义 Secret 的 YAML 格式定义文件,其中包含 username 和 password 两个敏感数据。
$ oc create secret generic db-secret --from-literal=username=admin --from-literal=password='password' --dry-run=client -o yaml > db-secret.yaml
  1. 根据 Secret 对象生成 SealedSecret 对象定义文件
$ kubeseal < db-secret.yaml > db-sealedsecret.yaml
  1. 如果 kubeseal 无法访问到 OpenShift,可执行以下命令生成 SealedSecret 对象定义文件
$ kubeseal --format=yaml --cert=my-pub-cert.pem < db-secret.yaml > db-sealedsecret.yaml
  1. 根据 YAML 文件创建 SealedSecret 对象。
$ oc create -f db-sealedsecret.yaml
  1. 确认 SealedSecret 和 Secret 对象都创建成功。
$ oc get sealedsecret db-secret
NAME        AGE
db-secret   2m40s$ oc get secret db-secret
NAME        TYPE     DATA   AGE
db-secret   Opaque   2      2m9s
  1. 确认 sealed-secrets-controller 日志中有 SealedSecret unsealed successfully 提示。
$ oc logs -n kube-system deploy/sealed-secrets-controller
2022/09/21 07:02:23 Updating mysecret/db-secret
2022/09/21 07:02:23 Event(v1.ObjectReference{Kind:"SealedSecret", Namespace:"mysecret", Name:"db-secret", UID:"4a7096f1-0c80-4098-a8ce-8c7da5ab9bf0", APIVersion:"bitnami.com/v1alpha1", ResourceVersion:"521438", FieldPath:""}): type: 'Normal' reason: 'Unsealed' SealedSecret unsealed successfully
  1. 执行命令,查看创建的 db-secret 对象中 username 和 password 内容正确。
$ oc get secret db-secret -o jsonpath='{.data.username}' | base64 -d
$ oc get secret db-secret -o jsonpath='{.data.password}' | base64 -d

其他

另外
https://cloud.redhat.com/blog/a-guide-to-secrets-management-with-gitops-and-kubernetes

参考

https://cloud.redhat.com/blog/gitops-secret-management
https://cloud.redhat.com/blog/integrating-hashicorp-vault-in-openshift-4
https://blog.stderr.at/openshift/2021-09-25-sealed_secrets/
https://medium.com/@jerome_tarte/managing-your-sensitive-information-during-gitops-process-with-secret-sealed-27498c77e2b8

OpenShift 4 - 在 GitOps 中使用 SealedSecret 保护敏感数据相关推荐

  1. OpenShift 4 之 GitOps(1)通过OpenShift GitOps Operator安装ArgoCD

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 安装 ArgoCD 用 OpenShift GitOps Operator ...

  2. OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群

    <OpenShift 4.x HOL教程汇总> 文章目录 Pacman应用部署架构 部署HAProxy 部署Pacman应用 本文是<OpenShift 4 之 GitOps(6)用 ...

  3. OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群

    <OpenShift 4.x HOL教程汇总> 文章目录 部署架构 部署MongoDB主从集群 准备操作环境 配置ArgoCD 准备MongoDB所需证书 更新被部署的YAML文件 在三个 ...

  4. 深度学习核心技术精讲100篇(五十三)-机器学习中的隐私保护

    前言 近年来,随着 GDPR 通用数据保护条例出台以及一些互联网公司数据隐私泄漏等事件的发生,数据隐私的保护问题在行业应用中备受关注.与数据密切相关的机器学习算法的安全性成为一个巨大挑战.本文将介绍在 ...

  5. OpenShift 4 之 GitOps(5)用ArgoCD配置其他OpenShift资源

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.6环境中验证 文章目录 创建用户 设置Build的全局属性 设置Import Image的全局属性 ...

  6. OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 运行环境 用Helm创建样例Chart 根据Helm Chart安装Open ...

  7. OpenShift 4 之 GitOps(2)用ArgoCD部署应用

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 用ArgoCD部署应用 向ArgoCD增加Github Repo 通过Arg ...

  8. 在SQL Server 2016中使用动态数据屏蔽来保护敏感数据

    Dynamic Data Masking is a new security feature introduced in SQL Server 2016 that limits the access ...

  9. STM32F0 、F1 在软件程序中写读保护选项字节(Option Bytes)

    转载自:https://blog.csdn.net/Flyaswing/article/details/90578645 单片机:STM32F030 库:HAL库 目标:在程序软件中修改读保护选项字节 ...

  10. 元宇宙产业委共治大会专题——樊晓娟律师:元宇宙中的隐私保护迫在眉睫

    2022年9月24日,元宇宙产业委特别筹备的"发展与治理"2022元宇宙共治大会暨<元宇宙发展与治理>课题征求意见会.元宇宙产业委数字藏品发展讨论会议,于9月24日在央 ...

最新文章

  1. Struts 2的输入校验(一)
  2. php框架里有模版引擎吗,Yii框架用模版引擎了吗?_PHP开发框架教程
  3. ios开发之 icon规范+启动图规范+启动页规范
  4. java中打印输出数组内容的三种方式
  5. activiti实现跳转节点的方法
  6. 小程序引用icon图标(入门)
  7. 李晓菁201771010114《面向对象程序设计(java)》第十三周学习总结
  8. linux 命令全集
  9. 麦克风阵列原理(转载)
  10. springboot-20-全局异常处理
  11. 有哪些免费软件下载网站,安全靠谱的软件分享网站
  12. Spring与Spring Framework的入门介绍以及学习文章整理
  13. APICloud 上传文件到云数据库2.0的代码实现
  14. crossover程序错误_如何使用Crossover在Linux上安装Windows应用程序
  15. tensorflow目标检测--识别赵丽颖
  16. 诸葛智能荣登《2022中国企业数智化转型升级创新服务企业》榜单!
  17. uniapp 请求接口封装
  18. 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
  19. axios如何二次封装
  20. Padding设置方法

热门文章

  1. 我在印尼工作的日子-基本环境
  2. 红旗h5中控台恢复出厂设置后不显示倒车影像问题
  3. 2021年茶艺师(初级)考试内容及茶艺师(初级)模拟考试
  4. 使用清华源镜像安装pytorch
  5. 新年新气象 新年新打算
  6. 在Kubuntu14.04中安装小企鹅输入法
  7. java开发基础知识学习总结
  8. jpg怎么转换jpeg?一招教你轻松完成转格式
  9. 上海是怎么错失这些年的互联网机遇的?——写的很好,转
  10. 服务器2008修改虚拟内存,Windows 2008 关闭系统虚拟内存功能 如何删除pagefile.sys