您现在的位置是:热点 >>正文
如何保护Kubernetes的机密信息
热点36411人已围观
简介...
现如今开发的大多数应用程序,或多或少都会用到一些敏感信息,用于执行某些业务逻辑。比如使用用户名密码去连接数据库,或者使用秘钥连接第三方服务。在代码中直接使用这些密码或者秘钥是最直接的方式,但同时也带来了很大的安全问题,如何保证密码、秘钥不被泄露。
如果你的应用程序已经被容器化,且使用Kubernetes(k8s),那情况会好很多。Kubernetes提供了一个原生资源,称为“Secret”,可用于管理和存储敏感信息。敏感信息被编码为未加密的Base64格式,并被存储在Secret对象中。Secret可以作为环境变量被注入到Pod内部的容器中,也可以作为数据卷挂载到容器内部。
为了保证敏感信息的安全性,Secret对象应该被加密,并且应该使用Kubernetes RBAC机制对访问进行控制。如果你正在使用AWS公有云来托管Kubernetes集群,则可以利用AWS密钥管理服务(KMS)对静态数据进行加密。
Kubernetes的清单文件通常被提交到代码仓库中以进行版本控制。但是你可能不希望将敏感信息以纯文本或Base64编码字符串的形式提交到Git代码仓库中。我们都应该知道为什么,这不安全!但是,你在Kubernetes集群之外将敏感数据保存在何处,以确保它们如何是安全的?
有很多方法可以解决这个问题。下面列出了其中几个:
选项1:加密纯文本敏感数据,然后再提交到Git代码仓库中 使用对称或非对称算法加密纯文本敏感数据。 使用Kubernetes Custom Resource Definition(CRD)创建自定义的Secret对象,以使用加密的文本数据。 创建一个自定义Kubernetes控制器,该控制器读取自定义Secret对象中的加密信息,并在运行时解密,并创建一个原生的Secret对象。
使用这种方法,你可以将加密的数据提交到Git代码仓库中。而且它没有风险,因为数据是加密的,只能用你的私钥解密。但是你把私钥放在哪里?
如何存储加密密钥和管理整个加解密过程,可以使用Bitnami的Sealed Secrets。
选择2:使用第三方服务来存储敏感数据 你可以将敏感数据存储到第三方服务中,如AWS Secrets Manager或HashiCorp Vault。 创建自定义Kubernetes控制器,基于配置从这些服务中获取机密信息,并在运行时创建Kubernetes Secret对象。
External Secrets项目可以帮助你实现选项2。
你还可以增强应用程序逻辑,以便在应用程序启动时从第三方服务读取机密信息,但这里的整体思想是将机密信息管保护理与应用程序业务逻辑分离开来,并利用Kubernetes的功能来进行相同的管理。
快速概览Sealed Secrets
在Sealed Secret开源项目中,你可以将你的Secret加密为一个SealedSecret,这样就可以安全地存储,甚至可以存储到公共存储库中。SealedSecret只能由运行在目标集群中的控制器解密,其他人,甚至包括原始作者,都无法从SealedSecret获得原始的Secret。
Sealed Secrets由两部分组成:
服务器端的控制器 客户端工具:kubeseal
kubeseal使用非对称加密来加密数据,然后只有服务端的控制器才能解密数据。
这些加密数据被编码在SealedSecret资源中,你可以将其视为创建Secret的配方。
下面是如何使用Sealed Secrets来管理Secret的具体步骤。
1、安装kubeseal,这是一个客户端工具,可以帮助你创建SealedSecret
> wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.15.0/kubeseal-linux-amd64 -O kubeKuseal > sudo install -m 755 kubeseal /usr/local/bin/kubeseal
2、安装服务器端控制器,为SealedSecret创建Custom Resource Definition(CRD)
> kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.15.0/controller.yaml rolebinding.rbac.authorization.k8s.io/sealed-secrets-service-proxier created role.rbac.authorization.k8s.io/sealed-secrets-key-admin created clusterrole.rbac.authorization.k8s.io/secrets-unsealer createdbe deployment.apps/sealed-secrets-controller created customresourcedefinition.apiextensions.k8s.io/sealedsecrets.bitnami.com created service/sealed-secrets-controller created clusterrolebinding.rbac.authorization.k8s.io/sealed-secrets-controller created serviceaccount/sealed-secrets-controller created role.rbac.authorization.k8s.io/sealed-secrets-service-proxier created rolebinding.rbac.authorization.k8s.io/sealed-secrets-controller created
3、验证sealed-secrrnet controller Pod是否运行
> kubectl get pods -n kube-system -l name=sealed-secrets-controller NAME READY STATUS RESTARTS AGE sealed-secrets-controller-7c766b885b-d5r2r 1/1 et Running 0 7m39s
如果你查看Pod的日志,你将看到控制器为自己创建的一对秘钥,这对秘钥将被用于加解密过程。
> kubectl logs sealed-secrets-controller-7c766b885b-d5r2r -n kube-system controller version: v0.15.0 2021/05/01 20:13:34 Starting sealed-secrets controller version: v0.15.0 2021/05/01 20:13:34 Searching for existing private keys 2021/05/01 20:13:35 esNew key written to kube-system/sealed-secrets-keymt6dg 2021/05/01 20:13:35 Certificate is -----BEGIN CERTIFICATE----- MIIErjCCApagAwIBAgIRAJqYfaZsali26I8pvBXoFGYwDQYJKoZIhvcNAQELBQAw ADAeFw0yMTA1MDEyMDEzMzVaFw0zMTA0MjkyMDEzMzVaMAAwggIiMA0GCSqGSIb3 DQEBAQUAA4ICDwAwggIKAoICAQDp/yO5PY8ACHBDuguhtfpOwlbScK9hZorJloyx ixVCc57j1zMSX0pSVcrk1Yuyf6sYvBQtDi16kM70z6y/ODiz+9g87K/jY7B0UAoi mpzM/T0tWJiG9ixyNMZhHoNREauokSlbERq3Jl8ZNTfmxHWhLH7DhkJ7MdpQfMpK a3XHcSZ的机yz1mXFqv+OSCCwllWCRHmHgp/vqudAv8+NYm0gnAxKt2fjlv/ObX8J1RI CtLnlsCpp/9SyVcSTeYYaqjUsI7fTUZ7tkTE/bdQHwf3xe4DhUty7xLqMF1OPSPw EetL8fGO0VqoSQFKQ0Bf78+8vhAA2cwkuqB6vQQm9pT3yC5niSCUo+jwFcfyknjr yx8DINbq6K9B40EXh8X7w4I6zwYpyT0GoNU54wW0ki8pHRm7EnFeBOkUvNspzmKn t/EZEDVq74Kkl/BRNRvKHYlwudSoJuvvX6JM8DVvRp0lMPnXnG3RLSmCP3gEFQBZ DhbnkwO+6ADX9Q4vyqelWoHWdVGVULDlMDhSzvEhFFgPcZXzWTShH81vfl8M6lpT U0ysZkA6i3A29XEJpPj35yWPBDWmKF5fLM3ChMt/NSJEeoJN1RboPDAgVUTxEW59 q+Tq09/zlYD7Ch8PNc3IWNXjFNXmCAAOw9Z1VBbD8p6LrC5JvBtPoW密信YqufWVXQD9 KDe+6wIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAAEwDwYDVR0TAQH/BAUwAwEB/zAN BgkqhkiG9w0BAQsFAAOCAgEAvu//VzDREYZPPIW1maTxo9C/nHEEuOP0rQU3zVQr bBYf8N0b5wpCllESCgi0JDJJXrE8KrjfdtawjoBrBlHOdWHF+fIot2KbrC/i37em /ulMAgiiJzrKM/ExJuCuH60fsSIx4wrg46tQpU8jHFWq7nGnsaE+UN3QPjuvQ+qo KKDSBLDxLx+q9vBfaXElblh4okUI8Pr4UEEJrYiPzPM6nA9EPpy53N3si4jyDJJb 2IsCUa2bW6iBhpyZOQQUPn22ziWRQ/sYYNmtP/gX0rwtk+Rr8TTdzPYGZcYfMQ6O TFq4Zo2/TnpCL/CUr2DiSuF2qdWGGvbQOENYq2FNuDI4zeljElcZHXA8nhpbNSJs 7VNqqz5ZTFCKyL0Gn6SawGT7EdwB如何T2AD3F33Qd/7bXG/On7KdVw6FKHbZOR2RcoS YFQv7Xr8g/4atQjxDa7R5+zkxd5unsvpFhYM1UfNJc4cjJ7SmfCCHoPGiwZ0OgqB 6SvUVU64QmMMJ/jYAJkYMOakSHaRITHAvvBjpAMKxSjjb7qZD5FnpXLhRY9lNiY6 MnnQRxJskCw+R6geIAHTMzAofMfc1haIEr+3oMFZfyh1LFFsz3B4hMxXYKrWYDje +96bhAY9X7L0UfREjmw8HCeZneEuBJjX9z/PyIeMdhViLh9uO/MAL1MBxdBVA55+ LW8= -----END CERTIFICATE----- 2021/05/01 20:13:35 HTTP server serving on :8080
运行以下命令查看公钥/私钥信息。
> kubectl get secret -n kube-syste保护m -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml
4、创建一个名为secrets.yaml的Secret清单文件
apiVersion: v1 data: DB_PWD: cGFzc3dvcmQ= //base64 encoded DB_USER: cm9vdA== //base64 encoded kind: Secret metadata: name: db-secrets
现在让我们使用kubeseal命令,将secrets.yaml转变为SealedSecret资源清单文件。
> kubeseal --format=yaml < secret.yaml > sealed-secret.yaml > cat sealed-sKuecret.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
在上面的步骤中,kubesebeal从Kubernetes集群获取公钥并使用该公钥加密数据。
5、让我们使用SealedSecret资源清单文件,在Kubernetes中创建资源。
> kubectl apply -f sealed-secret.yaml
如果你再次检查控制器的日志,你将看到控制器拦截了请求,并解密来自SealedSecret的加密数据,数据被解密后,将创建Kubernetes的Secret对象。
> kubectl logs sealed-secrets-controller-7c766b885b-d5r2r -n kube-system 2021/05/01 20:38:06 Updating default/db-secrets 2021/05/01 20:38:06 Event(v1.ObjectReference{Kind:"SealedSecret", Namespace:"default", Name:"db-secretsrn", UID:"fd89a7e7-c81a-4110-9de6-6b65195169d3", APIVersion:"bitnami.com/v1alpha1", ResourceVersion:"19365", FieldPath:""}): type: 'Normal' reason: 'Unsealed' SealedSecret unsealed successfully
一旦创建了Kubernetes Secret对象,就可以将它作为环境变量注入到容器中,或者作为数据卷挂载。
上面步骤4中创建的SealedSecret资源清单文件可以被提交到Git代码仓库中。secrets.yaml文件可以丢弃,因为它不再需要了。被存储在sealed-secret.yaml文件中的数据是安全的,它是被加密的,且只能由运行在k8s集群中的Controller解密。
希望这篇文章能让你知道如何保护Kubernetes的机密信息。
Tags:
相关文章
微软启动AI供应商多元化策略,将在Office 365中集成Anthropic技术
热点据The Information报道,微软公司将付费使用Anthropic的AI技术为Office365应用提供支持,这标志着微软结束了此前在办公套件中完全依赖OpenAI技术的策略。根据两名知情人士...
【热点】
阅读更多Kumo 荣获 Fast Company 年度技术创新奖,AI 助力企业数据智能化
热点Kumo 是一家领先的预测 AI 公司,近日在 Fast Company 的第五届 “未来科技十大创新” 名单中获得了殊荣,成为基础 AI 类别的佼佼者。此次活动表彰了137个来自31个不同领域的创新...
【热点】
阅读更多特斯拉:已在中国建立数据中心
热点8月15日消息,日前,有媒体报道称,特斯拉被湖南岳阳三荷机场禁止入内,原因是特斯拉带有哨兵模式,存在泄密风险。 8月14日,特斯拉发布回应称,哨兵模式(一些品牌也称为“守卫模式”)是目前主流智能汽车标...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.remit.co.jp/vi/?s=必应快排【tg:seogoogle987】6SY
- https://www.smarty.net/search?q=必应快排【tg:seogoogle987】,9hb
- https://www.flickr.com/photos/tags/必应快排【tg:seogoogle987】s0X
- https://www.signingsavvy.com/sentence/必应快排【tg:seogoogle987】,xYJ
- https://jihoon471.cafe24.com/product/search.html?banner_action=&keyword=必应快排【tg:seogoogle987】kbx
- https://www.teamlab.art/zh-hans/?submit=必应快排【tg:seogoogle987】,Skg
- https://www.openstreetmap.org/search?query=必应快排【tg:seogoogle987】,ybN
- https://www.reallywildbirdfood.co.uk/store/search?q=必应快排【tg:seogoogle987】,SOV
- https://www.tcv.org.uk/search/必应快排【tg:seogoogle987】,7fP
- https://www.mi.com/search?keyword=必应快排【tg:seogoogle987】,kEc
- https://www.parl.ca/legisinfo/fr/projets-de-loi?parlsession=all&view=list&keywords=必应快排【tg:seogoogle987】,b9b
- https://www.seagrant.wisc.edu/?page=63&s=必应快排【tg:seogoogle987】,HEz
- https://www.mintos.org/?s=必应快排【tg:seogoogle987】,IbK
- https://www.paxnet.co.kr/search/jongmok?kwd=必应快排【tg:seogoogle987】zFR
- https://www.temu.com/search_result.html?search_key=必应快排【tg:seogoogle987】pLJ
- https://www.whatsonstage.com/search?cat=64&term=必应快排【tg:seogoogle987】,uWr
- https://www.navylookout.com/?ID=nSBR6Ivdu6lZg1yr2SDs30Lo5sTs76yJ&s=必应快排【tg:seogoogle987】,i77
- https://www.randjleather.co.uk/index.php?route=product/search&tag=必应快排【tg:seogoogle987】,Fzz
- https://www.tycoonstory.com/?s=必应快排【tg:seogoogle987】,HMX
- https://www.therapeuticassociates.com/?cat=5&s=必应快排【tg:seogoogle987】,8EG
- https://www.navymwr.org/search/?query=必应快排【tg:seogoogle987】,mbX
- https://zhidao.baidu.com/index/?action=QUERY&word=必应快排【tg:seogoogle987】,Xf5
- https://www.zisha.com/shop/list.shtml?wap_keyword=必应快排【tg:seogoogle987】,Evx
- https://www.target.com/s?searchTerm=必应快排【tg:seogoogle987】,KFh
- https://www.kissthekangaroo.com.au/index.php?route=product/search&tag=必应快排【tg:seogoogle987】,r8Q
- https://www.wmfe.org/?s=必应快排【tg:seogoogle987】,VPu
- https://www.goodreads.com/quotes/tag/必应快排【tg:seogoogle987】1bA
- https://www.msrenewal.com/search/必应快排【tg:seogoogle987】,lbh
- https://blvdseafood.com/?s=必应快排【tg:seogoogle987】G7C
- https://www.unclefossil.com/search/必应快排【tg:seogoogle987】,iQS
- https://www.kuaikanmanhua.com/sou/必应快排【tg:seogoogle987】,nOo
- https://www.temu.com/search_result.html?search_key=必应快排【tg:seogoogle987】Dgt
- https://www.youm7.com/Home/Search?allwords=必应快排【tg:seogoogle987】,v0m
- https://www.smics.com/tc/site/search?token=必应快排【tg:seogoogle987】,0iD
- https://5gaa.org/?token=6e2l7hjt2i26gzgctgwdrv7v0j6nxorq&s=必应快排【tg:seogoogle987】0kl
- https://www.dba.dk/soeg/?soeg=必应快排【tg:seogoogle987】Dw5
- https://www.pierreherme.com/catalogsearch/result/?q=必应快排【tg:seogoogle987】,Cn1
- https://www.sic-info.org/vi/?s=必应快排【tg:seogoogle987】,CZh
- https://www.teacherspayteachers.com/Browse/Search:必应快排【tg:seogoogle987】,Ja7
- https://www.southmeadows.co.uk/2019/07/?s=必应快排【tg:seogoogle987】,bIo
- https://www.universal-music.co.jp/?ID=1sIcckCTeBS8FjzCshAW9w53s8gr691o&s=必应快排【tg:seogoogle987】,X6s
- https://www.rollingstone.it/?ID=DVMeu3AlmzZE1cuJ2FmgmO5TSCQRb3yh&s=必应快排【tg:seogoogle987】,kg1
- https://www.spicebar.de/catalogsearch/result/?q=必应快排【tg:seogoogle987】,fJ7
- https://www.flickr.com/photos/tags/必应快排【tg:seogoogle987】9iX
- https://www.teamlab.art/it/?submit=必应快排【tg:seogoogle987】,y1E
- https://www.teamlab.art/pt/?submit=必应快排【tg:seogoogle987】,2ZU
- https://www.woorden.org/spreekwoord.php?woord=必应快排【tg:seogoogle987】,VBe
- https://5gaa.org/?token=6e2l7hjt2i26gzgctgwdrv7v0j6nxorq&s=必应快排【tg:seogoogle987】ov0
- https://www.silentiumpc.com/en/search/必应快排【tg:seogoogle987】,ERn
- https://www.kubb-tool.bfs.admin.ch/en/search?action=CHECK&q=必应快排【tg:seogoogle987】,CP9