在 Kubernetes 上部署 Secret 加密系統 Vault

HashiCorp Vault 是一個基于身份的 Secret 和加密管理系統。Secret 是您想要嚴格控制訪問的內容,例如 API 加密密鑰、密碼或證書。Vault 提供由身份驗證和授權方法控制的加密服務。使用 Vault 的 UI、CLI 或 HTTP API,可以安全地存儲和管理對機密和其他敏感數據的訪問、嚴格控制和可審計。

目前的系統需要訪問大量 Secret:數據庫憑據、外部服務的 API 密鑰、面向服務的架構通信的憑據等。了解誰在訪問哪些機密已經非常困難。如果沒有自定義解決方案,幾乎不可能安全存儲和詳細審計。這就是 Vault 的用武之地。

我們可以使用官方 HashiCorp Vault Helm Chart 將 Vault 部署到 Kubernetes 中。https://github.com/hashicorp/Vault-helm

Helm Chart 允許用戶以各種配置部署 Vault:

  • Dev:用于測試 Vault 的單個內存 Vault 服務器

  • 獨立(默認):單個 Vault 服務器使用文件存儲后端持久保存到卷

  • 高可用性 (HA):使用 HA 存儲后端(如 Consul)的 Vault 服務器集群(默認)

  • 外部:依賴于外部 Vault 服務器的 Vault Agent Injector 服務器

下面將使用 Helm 部署 Vault,以下是步驟概述:

  • 下載 Vault Helm Chart

  • 修改 values.yaml, 用 Nodeport 暴露 Vault UI Service

  • 安裝 Vault

  • 避坑指南

安裝

下載 Chart 包

添加倉庫:

helm?repo?add?hashicorp?https://helm.releases.hashicor

搜索可用的安裝包版本:

#?helm?search?repo?hashicorp/Vault?-l
NAME????????????CHART?VERSION???APP?VERSION?????DESCRIPTION
hashicorp/Vault?0.19.0??????????1.9.2???????????Official?HashiCorp?Vault?Chart
........

拉取最新版本的 Chart 包到本地:

helm?fetch?hashicorp/Vault
tar?-zxf?Vault-0.19.0.tgz
cd?Vault/

修改 values.yaml

編輯 values.yaml 文件,修改訪問 Vault UI 的配置:

  • enable ui

  • activeVaultPodOnly的值設為true

  • serviceType 更改為 NodePort

  • serviceNodePort 端口號改為 30000

#?Vault?UI
ui:#?True?if?you?want?to?create?a?Service?entry?for?the?Vault?UI.##?serviceType?can?be?used?to?control?the?type?of?service?created.?For#?example,?setting?this?to?"LoadBalancer"?will?create?an?external?load#?balancer?(for?supported?K8S?installations)?to?access?the?UI.enabled:?truepublishNotReadyAddresses:?true#?The?service?should?only?contain?selectors?for?active?Vault?podactiveVaultPodOnly:?trueserviceType:?"NodePort"serviceNodePort:?30000externalPort:?8200targetPort:?8200

執行安裝

基于修改后的 values.yaml,執行安裝命令:

helm?install?-f?values.yaml?Vault?--namespace?Vault?.?--create-namespace
或者
helm?install?-f?values.yaml?Vault?hashicorp/Vault?--namespace?Vault?--version?0.19.0??--create-namespace

檢查 pod、svc 是否正常:

#?k?get?pod?-n?Vault
NAME???????????????????????????????????READY???STATUS????RESTARTS???AGE
Vault-0????????????????????????????????1/1?????Running???0??????????11m
Vault-agent-injector-f96b59db4-4855j???1/1?????Running???0??????????11m#?k?get?svc?-n?Vault
NAME???????????????????????TYPE????????CLUSTER-IP???????EXTERNAL-IP???PORT(S)?????????????AGE
Vault??????????????????????ClusterIP???10.233.61.235????<none>????????8200/TCP,8201/TCP???11m
Vault-agent-injector-svc???ClusterIP???10.233.32.31?????<none>????????443/TCP?????????????11m
Vault-internal?????????????ClusterIP???None?????????????<none>????????8200/TCP,8201/TCP???11m
Vault-ui???????????????????NodePort????10.233.145.124???<none>????????8200:30000/TCP??????11m

避坑指南

Vault-0 一直 NotReady,通過 get pod 命令進行查看。

$?k?get?pod?-n?Vault
NAME???????????????????????????????????READY???STATUS????RESTARTS???AGE
Vault-0????????????????????????????????0/1?????Running???0??????????1m
Vault-agent-injector-f96b59db4-4855j???1/1?????Running???0??????????1m

檢查日志:

$?k?logs?-f?Vault-0?-n?Vault
│?2022-05-18T03:37:03.330Z?[INFO]??core:?security?barrier?not?initialized????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?2022-05-18T03:37:03.330Z?[INFO]??core:?seal?configuration?missing,?not?initialized

describe 看到下面的輸出:

............Warning??Unhealthy??2m19s?(x57?over?6m41s)??kubelet????????????Readiness?probe?failed:?Key????????????????Value??????????????????????????????????????????????????????????????│
│?---????????????????-----???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Seal?Type??????????shamir??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Initialized????????false???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Sealed?????????????true????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Total?Shares???????0???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Threshold??????????0???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Unseal?Progress????0/0?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Unseal?Nonce???????n/a?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Version????????????1.9.2???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?Storage?Type???????file????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????│
│?HA?Enabled?????????false

這個問題是:尚未初始化和解封 Vault。自身沒有自動初始化機制,需要執行下面的操作。

參見下面的 issue:
https://github.com/hashicorp/Vault-helm/issues/17

初始化 Vault

要解封 Vault,我們需要初始化 Vault,該操作將輸出一些將用于解封 Vault 的 Unseal 密鑰。保存Unseal KeyInitial Root Token,下面要用到:

$?k?exec?-ti?Vault-0?-n?Vault?--?Vault?operator?init
Unseal?Key?1:?84EQZ9v8EOsboZ2sakjWkaladYg3Kc6cMSR3SaTXjlnQ
Unseal?Key?2:?ljJlqqERDSjWkaladIcaNlpBUOELKJtZhb9zDwzV/GiL
Unseal?Key?3:?Cxi+JEpUs1aDR/XcjWadM/sK+xXbIXlYjck9o/5Bifw9
Unseal?Key?4:?291rLn8XMsLIOKjWka6/7dBlzfIad830g0wcgEoOUx7X
Unseal?Key?5:?TqDLJkpE6NTsIyKVwjaWkaladO5B70LntD8o06x95l7ZInitial?Root?Token:?s.mCOZiIHkRLopQsMOS1bd5ZJ
............

Vault 初始化為 5 個 Key,密鑰閾值為 3。使用上面 Key 解封 Vault,需要達到閾值:

$?k?exec?-ti?Vault-0?-n?Vault?--?Vault?operator?unseal$?k?exec?-ti?Vault-0?-n?Vault?--?Vault?operator?unseal$?k?exec?-ti?Vault-0?-n?Vault?--?Vault?operator?unseal

在提示符下每次粘貼不同的 Key。下面是解封 Vault 后的輸出:

Unseal?Key?(will?be?hidden):
Key????????????????Value
---????????????????-----
Seal?Type??????????shamir
Initialized????????true
Sealed?????????????true
Total?Shares???????5
Threshold??????????3
Unseal?Progress????1/3
Unseal?Nonce???????9hl41a94-f15f-125d-04e5-edbd026cfc44
Version????????????1.9.2
Storage?Type???????file
HA?Enabled?????????false

現在檢查 Vault-0,應該為 READY 1/1

$?k?get?pod?-n?Vault
NAME???????????????????????????????????READY???STATUS????RESTARTS???AGE
Vault-0????????????????????????????????1/1?????Running???0??????????11m
Vault-agent-injector-f96b59db4-4855j???1/1?????Running???0??????????11m
登錄 Vault UI

在 Nodeport 服務中配置的 30000 端口上打開 UI:
http://{HostIP}:30000/ui/Vault/auth?with=token

42a40a39f28f516b376cf1ec1d89cbe4.png

使用Token登錄,需要使用到上面獲得到的Initial Root Token

77aaf53b6f55534a4bf4addec37e9d80.png

總結

本文實踐了如何在 Kubernetes 中使用 Helm 部署 HashiCorp Vault。下面是一些常用場景:

  • 使用在 Kubernetes 中運行的 Vault 服務的應用程序可以使用不同的 secrets 引擎[1] 和 身份驗證方法[2] 從 Vault 訪問和存儲秘密。

  • 使用在 Kubernetes 中運行的 Vault 服務的應用程序可以利用Transit 秘密引擎[3] 作為“加密即服務”。這允許應用程序在存儲靜態數據之前將加密需求發送到 Vault。

  • 管理員可以給 Vault 掛載持久卷,該卷可用于存儲 審計日志[4]

Vault 可以直接在 Kubernetes 上運行,因此除了 Vault 本身提供的原生集成之外,為 Kubernetes 構建的任何其他工具都可以選擇利用 Vault。

  • Vault on Kubernetes Reference Architecture[5]提供了在生產環境 Kubernetes 上運行 Vault 的最佳實踐。

  • Vault on Kubernetes Security Considerations[6]提供了特定于在生產 Kubernetes 環境中安全運行 Vault 的建議。

參考資料

[1]

secrets 引擎: https://www.vaultproject.io/docs/secrets

[2]

身份驗證方法: https://www.vaultproject.io/docs/auth

[3]

Transit 秘密引擎: https://www.vaultproject.io/docs/secrets/transit

[4]

審計日志: https://www.vaultproject.io/docs/audit

[5]

Vault on Kubernetes Reference Architecture: https://learn.hashicorp.com/tutorials/vault/kubernetes-reference-architecture?in=vault/kubernetes

[6]

Vault on Kubernetes Security Considerations: https://learn.hashicorp.com/tutorials/vault/kubernetes-security-concerns?in=vault/kubernetes

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287293.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287293.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287293.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《看聊天記錄都學不會C語言?太菜了吧》(15)你學了一節課的函數我5分鐘搞定了,還很熟

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋…

【經典回放】多種語言系列數據結構算法:棧(JavaScript版)

本文采用JavaScript語言實現棧結構算法并舉例應用。 JavaScript的棧是數組對象中自動提供的,這點如同C#,實際也不需要自己編寫什么棧的程序,如果你用: var s=new Array(); 定義一個s的數組,則這個s上將有以下的方法可供使用: 其中:FF: Firefox, IE: Internet Explore…

設計模式(10)-----模板方法模式

模板方法模式(Template Method) 定義 定義了一個操作中的算法的骨架&#xff0c;而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 UML類圖 例子 AbstractClass package com.csdhsm.pattemdesign.template;/** * Title: …

Android之提示Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must sup

1 問題 : Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must supply a layout_width attribute. 05-08 16:42:59.322 23038 23038 E AndroidRuntime: at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:7…

SLES修改本地FTP安裝源

2019獨角獸企業重金招聘Python工程師標準>>> SLES修改本地FTP安裝源 一、配置本機FTP............................................................................................................. 1 1.1、安裝.............................................…

.NET7 Preview4:重構的返回值TypedResults

為了更好的測試&#xff0c;更好的性能&#xff0c;Preview4帶了一個新的請求返回值類型&#xff0c;這個新的類型中封裝了所有的Http請求返回狀態函數&#xff0c;還包括了返回成功后的幾種數據類型&#xff0c;下面列舉了幾個常用的類型&#xff1a;app.MapGet("/test_o…

MATLAB軟件禁用利好,Matlab被禁用?一款國產軟件站了出來說:我就是中國的Matlab...

眾所周知&#xff0c;前段時間Matlab被禁用&#xff0c;引發了網友們對于國產工業軟件落后的諸多思考&#xff0c;比如為什么落后&#xff0c;落后到什么程度&#xff0c;有沒有替代品等等。并且從Matlab到EDA&#xff0c;再到CAD等等&#xff0c;甚至工業操作系統等等&#xf…

CMDB資產采集

Paramikoimport paramiko private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa) # 創建SSH對象ssh paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(ho…

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(3)都說123是字符不是數字

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

ArcGIS實驗教程:ArcGIS 10.2手把手圖文安裝教程(經典版)

ArcGIS實驗視頻教程合集&#xff1a;《ArcGIS實驗教程從入門到精通》&#xff08;附配套實驗數據&#xff09; ArcGIS許可服務無法啟動解決辦法&#xff1a;Win10操作系統ArcGIS許可License無法啟動的解決方法匯總&#xff08;絕對成功&#xff01;&#xff09; 目錄 一、系統…

html中radio,checkbox值的獲取、賦值、注冊事件

1&#xff0c;radio分組 只要name一樣&#xff0c;就是一組的&#xff0c;即一組中只能選擇一個&#xff0c;如下&#xff1a; 代碼如下:<span>group1:</span> <input type"radio" id"radio1" checked"checked" name"grou…

ObjectAnimator屬性動畫應用demo

感謝慕課網--eclipse_xu 布局文件&#xff1a;activity_main.xml 1 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"…

java數據庫防火墻,數據庫centos7防火墻導致java程序訪問mongodb3.0.1時報錯的問題分析...

環境描述&#xff1a;數據庫&#xff1a;mongodb3.0.1數據庫系統&#xff1a;centos7,(虛擬機&#xff0c;最小安裝)數據庫驅動&#xff1a;mongo-Java-driver-3.0.0.jar問題描述&#xff1a;shell環境下用mongo客戶端程序能正常連接mongod&#xff0c;但java程序始終報錯。查看…

Android之提示androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerV

1 問題 我有2個recycleView,但是用的同一個線性布局導致錯誤如下 LayoutManager androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerView: androidx.recyclerview.widget.RecyclerView{dfe1682 VFED..... ......I. 0,0-0,0 #7f090…

今晚在線解讀|2021-2022 .NET 中國開發者生態調查報告

點擊藍字關注我們作為一名 .NETer&#xff0c;你就職于怎樣規模的公司&#xff1f;所屬什么行業領域&#xff1f;平時使用哪些快速開發框架&#xff1f;產品方向及收費模式又是怎樣的&#xff1f; 作為一名開發者&#xff0c;你從業已有幾年&#xff1f;平時加班多嗎&#xff1…

實現網站驗證碼切換功能

實現網站驗證碼切換功能 一、樣例 樣例1、 樣例2、 二、實現原理 三、實現代碼 com.fry.servlet.VerifyCodeServlet 1 package com.fry.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 im…

校園春色關不住,怎奈何唯有花枝俏,不見賞花人?

受新冠肺炎疫情的影響&#xff0c;直至今天&#xff08;2020年4月16日&#xff09;&#xff0c;各大學依然是人去樓空&#xff0c;我的大學也不例外。春天來了&#xff0c;本應是校園春色關不住&#xff0c;卻怎奈何唯有花枝俏&#xff0c;不見賞花人&#xff1f;這也正應了那句…

CSDN是如何讓我副業月入過萬的?

始 我跟 CSDN 的緣分要從 2011 年說起&#xff0c;當時我正上高二&#xff0c;當時好像是在搞鼓 MFC。當時家里有了第一臺電腦&#xff0c;我也再也不用去黑網吧去敲代碼了&#xff0c;在家搜索資料的時候出現在我眼簾之中&#xff0c;并且對我有幫助的基本上都是 CSDN 上的內…

Java Servlet API中文說明文檔

Java Servlet API中文說明文檔 目 錄 1.... Servet資料 1.1 緒言 1.2 誰需要讀這份文檔 1.3 Java Servlet API的組成 1.4 有關規范 1.5 有關Java Servlets 1.6 Java Servlet概論 1.7 Servlet的生命周期 1.8 Servlet的解析和載入 1.9 …

MSMQ消息廣播

安裝配置MSMQ消息廣播&#xff0c;并驗證是否可以發送廣播消息&#xff0c;過程實錄。1. 安裝MSMQ with broadcasting support選擇安裝“消息隊列”&#xff0c;并在子選項中選擇“多播支持”一起安裝。2. 注冊表修改MulticastBindIPIf Message Queueing found multiple IP add…