久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

如何優雅的保護 Kubernetes 中的 Secrets

現如今開發的大多數應用程序,或多或少都會用到一些敏感信息,用于執行某些業務邏輯。比如使用用戶名密碼去連接數據庫,或者使用秘鑰連接第三方服務。在代碼中直接使用這些密碼或者秘鑰是最直接的方式,但同時也帶來了很大的安全問題,如何保證密碼、秘鑰不被泄露。

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

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

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

有很多方法可以解決這個問題。下面列出了其中幾個:

1選項1:加密純文本敏感數據,然后再提交到Git代碼倉庫中

  1. 使用對稱或非對稱算法加密純文本敏感數據。
  2. 使用Kubernetes Custom Resource Definition(CRD)創建自定義的Secret對象,以使用加密的文本數據。
  3. 創建一個自定義Kubernetes控制器,該控制器讀取自定義Secret對象中的加密信息,并在運行時解密,并創建一個原生的Secret對象。

使用這種方法,你可以將加密的數據提交到Git代碼倉庫中。而且它沒有風險,因為數據是加密的,只能用你的私鑰解密。但是你把私鑰放在哪里?

如何存儲加密密鑰和管理整個加解密過程,可以使用Bitnami的Sealed Secrets[1]。

2選擇2:使用第三方服務來存儲敏感數據

  1. 你可以將敏感數據存儲到第三方服務中,如AWS Secrets Manager或HashiCorp Vault。
  2. 創建自定義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

如何優雅的保護 Kubernetes 中的 Secrets

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

如何優雅的保護 Kubernetes 中的 Secrets

3、驗證sealed-secret controller Pod是否運行

如何優雅的保護 Kubernetes 中的 Secrets
如果你查看Pod的日志,你將看到控制器為自己創建的一對秘鑰,這對秘鑰將被用于加解密過程。
如何優雅的保護 Kubernetes 中的 Secrets
運行以下命令查看公鑰/私鑰信息。
如何優雅的保護 Kubernetes 中的 Secrets

4、創建一個名為secrets.yaml的Secret清單文件

如何優雅的保護 Kubernetes 中的 Secrets

現在讓我們使用kubeseal命令,將secrets.yaml轉變為SealedSecret資源清單文件。

如何優雅的保護 Kubernetes 中的 Secrets

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

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

如何優雅的保護 Kubernetes 中的 Secrets
如果你再次檢查控制器的日志,你將看到控制器攔截了請求,并解密來自SealedSecret的加密數據,數據被解密后,將創建Kubernetes的Secret對象。
如何優雅的保護 Kubernetes 中的 Secrets

一旦創建了Kubernetes Secret對象,就可以將它作為環境變量注入到容器中,或者作為數據卷掛載。

上面步驟4中創建的SealedSecret資源清單文件可以被提交到Git代碼倉庫中。secrets.yaml文件可以丟棄,因為它不再需要了。被存儲在sealed-secret.yaml文件中的數據是安全的,它是被加密的,且只能由運行在Kubernetes集群中的Controller解密。

希望這篇文章能讓你知道如何保護Kubernetes的機密信息。

相關鏈接:

  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

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

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 永定县| 甘泉县| 大邑县| 资讯 | 江西省| 三都| 根河市| 关岭| 监利县| 通道| 南安市| 当雄县| 漠河县| 巴南区| 河西区| 忻城县| 彩票| 明水县| 石嘴山市| 五原县| 克什克腾旗| 晋城| 霍州市| 特克斯县| 河津市| 改则县| 乌苏市| 辽源市| 阿拉尔市| 沙田区| 株洲市| 延边| 通州市| 灌阳县| 兰坪| 鸡西市| 安吉县| 建阳市| 界首市| 长兴县| 孝义市|