亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

現(xiàn)如今開(kāi)發(fā)的大多數(shù)應(yīng)用程序,或多或少都會(huì)用到一些敏感信息,用于執(zhí)行某些業(yè)務(wù)邏輯。比如使用用戶名密碼去連接數(shù)據(jù)庫(kù),或者使用秘鑰連接第三方服務(wù)。在代碼中直接使用這些密碼或者秘鑰是最直接的方式,但同時(shí)也帶來(lái)了很大的安全問(wèn)題,如何保證密碼、秘鑰不被泄露。

如果你的應(yīng)用程序已經(jīng)被容器化,且使用Kubernetes(k8s),那情況會(huì)好很多。Kubernetes提供了一個(gè)原生資源,稱(chēng)為“Secret”,可用于管理和存儲(chǔ)敏感信息。敏感信息被編碼為未加密的Base64格式,并被存儲(chǔ)在Secret對(duì)象中。Secret可以作為環(huán)境變量被注入到Pod內(nèi)部的容器中,也可以作為數(shù)據(jù)卷掛載到容器內(nèi)部。

為了保證敏感信息的安全性,Secret對(duì)象應(yīng)該被加密,并且應(yīng)該使用Kubernetes RBAC機(jī)制對(duì)訪問(wèn)進(jìn)行控制。如果你正在使用AWS公有云來(lái)托管Kubernetes集群,則可以利用AWS密鑰管理服務(wù)(KMS)對(duì)靜態(tài)數(shù)據(jù)進(jìn)行加密。

Kubernetes的清單文件通常被提交到代碼倉(cāng)庫(kù)中以進(jìn)行版本控制。但是你可能不希望將敏感信息以純文本或Base64編碼字符串的形式提交到Git代碼倉(cāng)庫(kù)中。我們都應(yīng)該知道為什么,這不安全!但是,你在Kubernetes集群之外將敏感數(shù)據(jù)保存在何處,以確保它們是安全的?

有很多方法可以解決這個(gè)問(wèn)題。下面列出了其中幾個(gè):

1選項(xiàng)1:加密純文本敏感數(shù)據(jù),然后再提交到Git代碼倉(cāng)庫(kù)中

  1. 使用對(duì)稱(chēng)或非對(duì)稱(chēng)算法加密純文本敏感數(shù)據(jù)。
  2. 使用Kubernetes Custom Resource Definition(CRD)創(chuàng)建自定義的Secret對(duì)象,以使用加密的文本數(shù)據(jù)。
  3. 創(chuàng)建一個(gè)自定義Kubernetes控制器,該控制器讀取自定義Secret對(duì)象中的加密信息,并在運(yùn)行時(shí)解密,并創(chuàng)建一個(gè)原生的Secret對(duì)象。

使用這種方法,你可以將加密的數(shù)據(jù)提交到Git代碼倉(cāng)庫(kù)中。而且它沒(méi)有風(fēng)險(xiǎn),因?yàn)閿?shù)據(jù)是加密的,只能用你的私鑰解密。但是你把私鑰放在哪里?

如何存儲(chǔ)加密密鑰和管理整個(gè)加解密過(guò)程,可以使用Bitnami的Sealed Secrets[1]。

2選擇2:使用第三方服務(wù)來(lái)存儲(chǔ)敏感數(shù)據(jù)

  1. 你可以將敏感數(shù)據(jù)存儲(chǔ)到第三方服務(wù)中,如AWS Secrets Manager或HashiCorp Vault。
  2. 創(chuàng)建自定義Kubernetes控制器,基于配置從這些服務(wù)中獲取機(jī)密信息,并在運(yùn)行時(shí)創(chuàng)建Kubernetes Secret對(duì)象。

External Secrets[2]項(xiàng)目可以幫助你實(shí)現(xiàn)選項(xiàng)2。

你還可以增強(qiáng)應(yīng)用程序邏輯,以便在應(yīng)用程序啟動(dòng)時(shí)從第三方服務(wù)讀取機(jī)密信息,但這里的整體思想是將機(jī)密信息管理與應(yīng)用程序業(yè)務(wù)邏輯分離開(kāi)來(lái),并利用Kubernetes的功能來(lái)進(jìn)行相同的管理。

3快速概覽Sealed Secrets

在Sealed Secret開(kāi)源項(xiàng)目中,你可以將你的Secret加密為一個(gè)SealedSecret,這樣就可以安全地存儲(chǔ),甚至可以存儲(chǔ)到公共存儲(chǔ)庫(kù)中。SealedSecret只能由運(yùn)行在目標(biāo)集群中的控制器解密,其他人,甚至包括原始作者,都無(wú)法從SealedSecret獲得原始的Secret。

Sealed Secrets由兩部分組成:

  • 服務(wù)器端的控制器
  • 客戶端工具:kubeseal

kubeseal使用非對(duì)稱(chēng)加密來(lái)加密數(shù)據(jù),然后只有服務(wù)端的控制器才能解密數(shù)據(jù)。

這些加密數(shù)據(jù)被編碼在SealedSecret資源中,你可以將其視為創(chuàng)建Secret的配方。

下面是如何使用Sealed Secrets來(lái)管理Secret的具體步驟。

1、安裝kubeseal,這是一個(gè)客戶端工具,可以幫助你創(chuàng)建SealedSecret

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

2、安裝服務(wù)器端控制器,為SealedSecret創(chuàng)建Custom Resource Definition(CRD)

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

3、驗(yàn)證sealed-secret controller Pod是否運(yùn)行

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets
如果你查看Pod的日志,你將看到控制器為自己創(chuàng)建的一對(duì)秘鑰,這對(duì)秘鑰將被用于加解密過(guò)程。
如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets
運(yùn)行以下命令查看公鑰/私鑰信息。
如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

4、創(chuàng)建一個(gè)名為secrets.yaml的Secret清單文件

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

現(xiàn)在讓我們使用kubeseal命令,將secrets.yaml轉(zhuǎn)變?yōu)镾ealedSecret資源清單文件。

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

在上面的步驟中,kubeseal從Kubernetes集群獲取公鑰并使用該公鑰加密數(shù)據(jù)。

5、讓我們使用SealedSecret資源清單文件,在Kubernetes中創(chuàng)建資源。

如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets
如果你再次檢查控制器的日志,你將看到控制器攔截了請(qǐng)求,并解密來(lái)自SealedSecret的加密數(shù)據(jù),數(shù)據(jù)被解密后,將創(chuàng)建Kubernetes的Secret對(duì)象。
如何優(yōu)雅的保護(hù) Kubernetes 中的 Secrets

一旦創(chuàng)建了Kubernetes Secret對(duì)象,就可以將它作為環(huán)境變量注入到容器中,或者作為數(shù)據(jù)卷掛載。

上面步驟4中創(chuàng)建的SealedSecret資源清單文件可以被提交到Git代碼倉(cāng)庫(kù)中。secrets.yaml文件可以丟棄,因?yàn)樗辉傩枰?。被存?chǔ)在sealed-secret.yaml文件中的數(shù)據(jù)是安全的,它是被加密的,且只能由運(yùn)行在Kubernetes集群中的Controller解密。

希望這篇文章能讓你知道如何保護(hù)Kubernetes的機(jī)密信息。

相關(guān)鏈接:

  1. https://github.com/bitnami-labs/sealed-secrets
  2. https://github.com/external-secrets/kubernetes-external-secrets

鏈接:https://waswani.medium.com/securing-secrets-in-kubernetes-c78c7bcd433

(版權(quán)歸原作者所有,侵刪)

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!