0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何保护Kubernetes的机密信息

马哥Linux运维 来源:奇妙的Linux世界 作者:奇妙的Linux世界 2022-04-19 17:13 次阅读

现如今开发的大多数应用程序,或多或少都会用到一些敏感信息,用于执行某些业务逻辑。比如使用用户名密码去连接数据库,或者使用秘钥连接第三方服务。在代码中直接使用这些密码或者秘钥是最直接的方式,但同时也带来了很大的安全问题,如何保证密码、秘钥不被泄露。

如果你的应用程序已经被容器化,且使用Kubernetes(k8s),那情况会好很多。Kubernetes提供了一个原生资源,称为“Secret”,可用于管理和存储敏感信息。敏感信息被编码为未加密的Base64格式,并被存储在Secret对象中。Secret可以作为环境变量被注入到Pod内部的容器中,也可以作为数据卷挂载到容器内部。

为了保证敏感信息的安全性,Secret对象应该被加密,并且应该使用Kubernetes RBAC机制对访问进行控制。如果你正在使用AWS公有云来托管Kubernetes集群,则可以利用AWS密钥管理服务(KMS)对静态数据进行加密。

Kubernetes的清单文件通常被提交到代码仓库中以进行版本控制。但是你可能不希望将敏感信息以纯文本或Base64编码字符串的形式提交到Git代码仓库中。我们都应该知道为什么,这不安全!但是,你在Kubernetes集群之外将敏感数据保存在何处,以确保它们是安全的?

有很多方法可以解决这个问题。下面列出了其中几个:

1选项1:加密纯文本敏感数据,然后再提交到Git代码仓库中

使用对称或非对称算法加密纯文本敏感数据。

使用Kubernetes Custom Resource Definition(CRD)创建自定义的Secret对象,以使用加密的文本数据。

创建一个自定义Kubernetes控制器,该控制器读取自定义Secret对象中的加密信息,并在运行时解密,并创建一个原生的Secret对象。

使用这种方法,你可以将加密的数据提交到Git代码仓库中。而且它没有风险,因为数据是加密的,只能用你的私钥解密。但是你把私钥放在哪里?

如何存储加密密钥和管理整个加解密过程,可以使用Bitnami的Sealed Secrets[1]。

2选择2:使用第三方服务来存储敏感数据

你可以将敏感数据存储到第三方服务中,如AWS Secrets Manager或HashiCorp Vault。

创建自定义Kubernetes控制器,基于配置从这些服务中获取机密信息,并在运行时创建Kubernetes Secret对象。

External Secrets[2]项目可以帮助你实现选项2。

你还可以增强应用程序逻辑,以便在应用程序启动时从第三方服务读取机密信息,但这里的整体思想是将机密信息管理与应用程序业务逻辑分离开来,并利用Kubernetes的功能来进行相同的管理。

3快速概览Sealed Secrets

在Sealed Secret开源项目中,你可以将你的Secret加密为一个SealedSecret,这样就可以安全地存储,甚至可以存储到公共存储库中。SealedSecret只能由运行在目标集群中的控制器解密,其他人,甚至包括原始作者,都无法从SealedSecret获得原始的Secret。

Sealed Secrets由两部分组成:

服务器端的控制器

客户端工具:kubeseal

kubeseal使用非对称加密来加密数据,然后只有服务端的控制器才能解密数据。

这些加密数据被编码在SealedSecret资源中,你可以将其视为创建Secret的配方。

下面是如何使用Sealed Secrets来管理Secret的具体步骤。

1、安装kubeseal,这是一个客户端工具,可以帮助你创建SealedSecret

>wgethttps://github.com/bitnami-labs/sealed-secrets/releases/download/v0.15.0/kubeseal-linux-amd64-Okubeseal

>sudoinstall-m755kubeseal/usr/local/bin/kubeseal

2、安装服务器端控制器,为SealedSecret创建Custom Resource Definition(CRD)

>kubectlapply-fhttps://github.com/bitnami-labs/sealed-secrets/releases/download/v0.15.0/controller.yaml

rolebinding.rbac.authorization.k8s.io/sealed-secrets-service-proxiercreated
role.rbac.authorization.k8s.io/sealed-secrets-key-admincreated
clusterrole.rbac.authorization.k8s.io/secrets-unsealercreated
deployment.apps/sealed-secrets-controllercreated
customresourcedefinition.apiextensions.k8s.io/sealedsecrets.bitnami.comcreated
service/sealed-secrets-controllercreated
clusterrolebinding.rbac.authorization.k8s.io/sealed-secrets-controllercreated
serviceaccount/sealed-secrets-controllercreated
role.rbac.authorization.k8s.io/sealed-secrets-service-proxiercreated
rolebinding.rbac.authorization.k8s.io/sealed-secrets-controllercreated

3、验证sealed-secret controller Pod是否运行

>kubectlgetpods-nkube-system-lname=sealed-secrets-controller

NAMEREADYSTATUSRESTARTSAGE
sealed-secrets-controller-7c766b885b-d5r2r1/1Running07m39s

如果你查看Pod的日志,你将看到控制器为自己创建的一对秘钥,这对秘钥将被用于加解密过程。

>kubectllogssealed-secrets-controller-7c766b885b-d5r2r-nkube-system

controllerversion:v0.15.0
2021/05/012034Startingsealed-secretscontrollerversion:v0.15.0
2021/05/012034Searchingforexistingprivatekeys
2021/05/012035Newkeywrittentokube-system/sealed-secrets-keymt6dg
2021/05/012035Certificateis
-----BEGINCERTIFICATE-----
MIIErjCCApagAwIBAgIRAJqYfaZsali26I8pvBXoFGYwDQYJKoZIhvcNAQELBQAw
ADAeFw0yMTA1MDEyMDEzMzVaFw0zMTA0MjkyMDEzMzVaMAAwggIiMA0GCSqGSIb3
DQEBAQUAA4ICDwAwggIKAoICAQDp/yO5PY8ACHBDuguhtfpOwlbScK9hZorJloyx
ixVCc57j1zMSX0pSVcrk1Yuyf6sYvBQtDi16kM70z6y/ODiz+9g87K/jY7B0UAoi
mpzM/T0tWJiG9ixyNMZhHoNREauokSlbERq3Jl8ZNTfmxHWhLH7DhkJ7MdpQfMpK
a3XHcSZyz1mXFqv+OSCCwllWCRHmHgp/vqudAv8+NYm0gnAxKt2fjlv/ObX8J1RI
CtLnlsCpp/9SyVcSTeYYaqjUsI7fTUZ7tkTE/bdQHwf3xe4DhUty7xLqMF1OPSPw
EetL8fGO0VqoSQFKQ0Bf78+8vhAA2cwkuqB6vQQm9pT3yC5niSCUo+jwFcfyknjr
yx8DINbq6K9B40EXh8X7w4I6zwYpyT0GoNU54wW0ki8pHRm7EnFeBOkUvNspzmKn
t/EZEDVq74Kkl/BRNRvKHYlwudSoJuvvX6JM8DVvRp0lMPnXnG3RLSmCP3gEFQBZ
DhbnkwO+6ADX9Q4vyqelWoHWdVGVULDlMDhSzvEhFFgPcZXzWTShH81vfl8M6lpT
U0ysZkA6i3A29XEJpPj35yWPBDWmKF5fLM3ChMt/NSJEeoJN1RboPDAgVUTxEW59
q+Tq09/zlYD7Ch8PNc3IWNXjFNXmCAAOw9Z1VBbD8p6LrC5JvBtPoWYqufWVXQD9
KDe+6wIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAAEwDwYDVR0TAQH/BAUwAwEB/zAN
BgkqhkiG9w0BAQsFAAOCAgEAvu//VzDREYZPPIW1maTxo9C/nHEEuOP0rQU3zVQr
bBYf8N0b5wpCllESCgi0JDJJXrE8KrjfdtawjoBrBlHOdWHF+fIot2KbrC/i37em
/ulMAgiiJzrKM/ExJuCuH60fsSIx4wrg46tQpU8jHFWq7nGnsaE+UN3QPjuvQ+qo
KKDSBLDxLx+q9vBfaXElblh4okUI8Pr4UEEJrYiPzPM6nA9EPpy53N3si4jyDJJb
2IsCUa2bW6iBhpyZOQQUPn22ziWRQ/sYYNmtP/gX0rwtk+Rr8TTdzPYGZcYfMQ6O
TFq4Zo2/TnpCL/CUr2DiSuF2qdWGGvbQOENYq2FNuDI4zeljElcZHXA8nhpbNSJs
7VNqqz5ZTFCKyL0Gn6SawGT7EdwBT2AD3F33Qd/7bXG/On7KdVw6FKHbZOR2RcoS
YFQv7Xr8g/4atQjxDa7R5+zkxd5unsvpFhYM1UfNJc4cjJ7SmfCCHoPGiwZ0OgqB
6SvUVU64QmMMJ/jYAJkYMOakSHaRITHAvvBjpAMKxSjjb7qZD5FnpXLhRY9lNiY6
MnnQRxJskCw+R6geIAHTMzAofMfc1haIEr+3oMFZfyh1LFFsz3B4hMxXYKrWYDje
+96bhAY9X7L0UfREjmw8HCeZneEuBJjX9z/PyIeMdhViLh9uO/MAL1MBxdBVA55+
LW8=
-----ENDCERTIFICATE-----

2021/05/012035HTTPserverservingon:8080

运行以下命令查看公钥/私钥信息。

>kubectlgetsecret-nkube-system-lsealedsecrets.bitnami.com/sealed-secrets-key-oyaml

4、创建一个名为secrets.yaml的Secret清单文件

apiVersion:v1
data:
DB_PWD:cGFzc3dvcmQ=//base64encoded
DB_USER:cm9vdA==//base64encoded
kind:Secret
metadata:
name:db-secrets

现在让我们使用kubeseal命令,将secrets.yaml转变为SealedSecret资源清单文件。

>kubeseal--format=yaml< secret.yaml >sealed-secret.yaml

>catsealed-secret.yaml

apiVersion:bitnami.com/v1alpha1
kind:SealedSecret
metadata:
creationTimestamp:null
name:db-secrets
namespace:default
spec:
encryptedData:
DB_PWD:AgDaCRi27RV4/sVI2ok7JlqBSKT5+c7gGJog+...
DB_USER:AgAZG67CrrOBnyKIKha7xhJulr+CQGPaE/PpsjvY8jJR0IDO2...
template:
metadata:
creationTimestamp:null
name:db-secrets
namespace:default

在上面的步骤中,kubeseal从Kubernetes集群获取公钥并使用该公钥加密数据。

5、让我们使用SealedSecret资源清单文件,在Kubernetes中创建资源。

>kubectlapply-fsealed-secret.yaml

如果你再次检查控制器的日志,你将看到控制器拦截了请求,并解密来自SealedSecret的加密数据,数据被解密后,将创建Kubernetes的Secret对象。

>kubectllogssealed-secrets-controller-7c766b885b-d5r2r-nkube-system

2021/05/012006Updatingdefault/db-secrets
2021/05/012006Event(v1.ObjectReference{Kind:"SealedSecret",Namespace:"default",Name:"db-secrets",UID:"fd89a7e7-c81a-4110-9de6-6b65195169d3",APIVersion:"bitnami.com/v1alpha1",ResourceVersion:"19365",FieldPath:""}):type:'Normal'reason:'Unsealed'SealedSecretunsealedsuccessfully

一旦创建了Kubernetes Secret对象,就可以将它作为环境变量注入到容器中,或者作为数据卷挂载。

上面步骤4中创建的SealedSecret资源清单文件可以被提交到Git代码仓库中。secrets.yaml文件可以丢弃,因为它不再需要了。被存储在sealed-secret.yaml文件中的数据是安全的,它是被加密的,且只能由运行在Kubernetes集群中的Controller解密。

希望这篇文章能让你知道如何保护Kubernetes的机密信息。

原文标题:如何优雅的保护 Kubernetes 中的 Secrets

文章出处:【微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16339

    浏览量

    177859
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68539
  • kubernetes
    +关注

    关注

    0

    文章

    224

    浏览量

    8713

原文标题:如何优雅的保护 Kubernetes 中的 Secrets

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高通指控苹果偷窃芯片机密,用于改进英特尔的芯片性能

    9月26日讯,据CNBC报道,提交至美国加州高等法院的一份文件显示,高通对苹果提出了多项指控,其中包括苹果偷窃其机密信息和商业机密,以改进高通的竞争对手英特尔的芯片性能。
    的头像 发表于 09-26 10:37 3488次阅读

    SK海力士机密信息被盗

    据韩媒报道,近期SK海力士遭受了黑客组织Maze的勒索攻击,目前Maze声称入侵了SK海力士11TB的数据,并公布了约600MB的数据信息,约占其总数据量的5%。
    的头像 发表于 08-24 14:21 3227次阅读

    如何让员工高效地分享企业知识的同时又能保护机密文件的

    NTA-文档保密的“硬”办法如何防止员工离职时擅自拷贝带走机密资料? 如何防止设计图纸、程序源代码等机密信息等泄露给竞争对手? 如何让员工高效地分享企业知识的同时又能保护机密文件的安全
    发表于 09-16 10:04

    防止u盘机密文件泄露,请给U盘文件加密

    给网络攻击或者丢失,没有你设置的密码也是无法打开U盘中某些重要的文件。 为了保证你U盘中某些机密资料、个人隐私的安全,防止此类信息外泄给你带来损失,请给你U盘中的文件加密保护。如果你使用的U盘是加密U
    发表于 04-20 17:15

    CyUSBSerial库许可条款什么是机密和专有信息

    所有,2012-2013,保留所有权利未发表的、许可的软件。第七章机密信息和专有信息这是柏树的特性。第七章这个文件的使用是受支配的由文件中包含的许可协议第七章安装和/许可证/许可证/许可证第七章
    发表于 10-22 14:48

    基于STC的加密信息存储与游戏操作系统设计

    HNU小学期计算机系统设计与创新基础训练——加密信息存储与游戏操作系统一、 选题名称二、 选题背景三、 实现功能1. 主要功能2. 细节设计四、 设计思路五、 基本原理1. 数码管与发光二极管1.1
    发表于 02-18 06:13

    彩色遥感影像的机密诠释信息隐藏技术

    实现彩色遥感影像的机密诠释信息隐藏技术,研究信息嵌入域的选择方法,提出空间信息隐藏W(L) 矩阵方法。实验结果表明,该技术具有透明性较高、信息
    发表于 03-20 13:40 24次下载

    什么是增强保密信

    什么是增强保密信件 为提供电子邮件的保密性,需要一定的机制来向发送者和接收者确保信息机密的,信息来源可靠并没有被更改和
    发表于 04-03 16:19 348次阅读

    高通指控苹果窃取商业机密帮助英特尔 最后因证据不足驳回诉讼请求

    26日,高通提交给加州最高法院的文件显示,指控苹果窃取其大量机密信息和商业机密,从而帮助英特尔公司提升芯片性能。
    的头像 发表于 09-28 11:55 3351次阅读

    虚拟局域网的优点

    虚拟局域网优点之一:具有安全稳定性。虚拟的局域网可以使局域网更加的安全,它能够让比较敏感的带有数据的用户和网络的其他部分进行一定的隔离,这样就能够保护网络的机密信息了,可以有效的防止机密信息的泄漏。
    的头像 发表于 02-28 14:26 1.3w次阅读

    超过40款高通芯片存在“旁路漏洞”,该漏洞可被用来窃取芯片内所储存的机密信息

    4月28日消息,近日英国安全机构NCC Group公布了一则重磅消息:超过40款高通芯片存在“旁路漏洞”,该漏洞可被用来窃取芯片内所储存的机密信息,并波及采用相关芯片的Android手机等相关装置。
    的头像 发表于 04-30 14:22 3685次阅读

    晶心科技与Silex Insight达成战略合作,推出RISC-V信任根完整解决方案

    Silex Insight推出的高级eSecure IP模块为安全应用的完整解决方案,能防止机密信息外泄,并提供安全启动、密钥认证与应用程序的保护
    发表于 11-07 14:26 1575次阅读

    LG电子和SK海力士遭遇勒索软件攻击,窃取50GB机密信息

    这年头不管多大的公司,一不小心都有可能被黑客盯上,韩国两大电子巨头SK海力士、LG电子就被黑了,多达50GB机密文件被加密勒索。
    的头像 发表于 09-11 16:58 2043次阅读

    电脑的机箱风扇不联网也能泄露机密信息

    想法太天真了。他们用实验证明,即使不联网,机箱里的风扇也能泄露你的机密信息。   这项研究的作者 Mordechai Guri 来自以色列本·古里安大学。在最近发表的一篇论文中,他提出了一种名为 AiR-ViBeR 的数据窃取技术。令人颇为震惊的是,这
    的头像 发表于 01-12 09:43 2778次阅读

    特斯拉起诉前供应商:干电极电池技术商业机密泄露风波

    其窃取特斯拉的商业机密,并试图为与电动汽车电池相关的机密信息申请专利,同时将这些敏感信息分享给特斯拉的竞争对手。
    的头像 发表于 06-20 10:36 1746次阅读